web | jsp考试复习要点整理

很烦,不想学这个东西,但是没有办法,还是得过的。

jsp

Author@Mz1

原理

编译原理

  1. 解析jsp
  2. jsp->servlet
  3. 编译servlet

基本语法

常规声明操作

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

导入基本库

<%@ page import = "java.util.*"%>
<%@ page import = "java.io.*"%>

语法&声明

<% 代码片段 %>
<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

声明:
<%! 声明片段 %>
<jsp:declaration>
   代码片段
</jsp:declaration>

输出

<% out.println("Your IP address is " + request.getRemoteAddr()); %>
<%= (new java.util.Date()).toLocaleString()%>

注释

<%-- jsp注释--%>
<% //注释 %>
<!-- html注释 -->

指令

基本语法格式:<%@ directive attribute="value" %>
<%@ page ... %> //定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
	等价于:<jsp:directive.page attribute="value" />
<%@ include ... %> // 	包含其他文件
	<%@ include file="./mod/GradeClass.jsp" %>      //文件包含
	等价于:<jsp:directive.include file="文件相对 url 地址" />
<%@ taglib ... %> //引入标签库的定义,可以是自定义标签

行为

<jsp:action_name attribute="value" />
语法	描述
jsp:include	用于在当前页面中包含静态或动态资源
	<jsp:include page="相对 URL 地址" flush="true" />

jsp:useBean	寻找和初始化一个JavaBean组件
	<jsp:useBean id="name" class="package.class" />

    <jsp:useBean id="myName" ... />
    ...
    <jsp:setProperty name="myName" property="someProperty" .../>

    <jsp:useBean id="myName" ... >
    ...
       <jsp:setProperty name="myName" property="someProperty" .../>
    </jsp:useBean>

	<jsp:useBean id="myName" ... />
    ...
    <jsp:getProperty name="myName" property="someProperty" .../>


jsp:setProperty	设置 JavaBean组件的值
jsp:getProperty	将 JavaBean组件的值插入到 output中
jsp:forward	从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin	用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element	动态创建一个XML元素
jsp:attribute	定义动态创建的XML元素的属性
jsp:body	定义动态创建的XML元素的主体
jsp:text	用于封装模板数据

9个对象

对象	描述
request	HttpServletRequest类的实例
response	HttpServletResponse类的实例
out	PrintWriter类的实例,用于把结果输出至网页上
session	HttpSession类的实例
application	ServletContext类的实例,与应用上下文有关
config	ServletConfig类的实例
pageContext	PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page	类似于Java类中的this关键字
exception	exception 类的对象,代表发生错误的 JSP 页面中对应的异常对象
request对象
<%!public HashMap<String, String> mzGetArgs(HttpServletRequest request) {
	//判断请求方式并处理请求
	Enumeration args = request.getParameterNames();
	int count = 0;
	HashMap<String, String> argsMap = new HashMap<String, String>();
	while (args.hasMoreElements()) {
		count++;
		String paramName = (String) args.nextElement();
		String paramValue = request.getParameter(paramName);
		argsMap.put(paramName, paramValue);
	}
	if (count == 0) {
		return null;
	} else {
		return argsMap;
	}
}%>
session对象

禁用sesseion

<%@ page session="false" %>

public Object getAttribute(String name)

返回session对象中与指定名称绑定的对象,如果不存在则返回null

public void setAttribute(String name, Object value)

使用指定的名称和值来产生一个对象并绑定到session中

public void removeAttribute(String name)

移除session中指定名称的对象

public void invalidate()

将session无效化,解绑任何与该session绑定的对象

servlet

路由配置

  1. 通过@标志配置

    @WebServlet("/ServletTest")    // http://127.0.0.1/test/ServletTest       test 为项目名 下同
    
  2. 通过web.xml配置

    web.xml存放的位置应该是src/main/webapp/WEB-INF/web.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app version="2.5"   
        xmlns="http://java.sun.com/xml/ns/javaee"   
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
        xsi:schemaLocation="http://JAVA.sun.com/xml/ns/javaee   
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
      <servlet>  
         <!-- 类名 -->  
    	<servlet-name>ServletTest</servlet-name> 
        <!-- 所在的包 -->  
        <servlet-class>com.mz1.test.ServletTest</servlet-class>  
      </servlet>  
      
      <servlet-mapping>  
        <servlet-name>ServletTest</servlet-name>  
        <!-- 访问的网址 -->  
        <url-pattern>/abc</url-pattern>  
        </servlet-mapping>  
    </web-app>  
    
    <!-- 这种方式定义的路由为 http://127.0.0.1/test/abc -->  
    

文件IO

读写文件模板

<%@ page import = "java.io.*"%>
<%//读文件函数 %>
<%!public String file_get_contents(String fName){
	File f = new File(fName);
	try{
		FileInputStream fip = new FileInputStream(f);
		InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
		StringBuffer sb = new StringBuffer();
		while (reader.ready()) {
			sb.append((char) reader.read());
			// 转成char加到StringBuffer对象中
		}
		reader.close();
		// 关闭读取流
		fip.close();
		return sb.toString();
	}catch(Exception e){
		// 处理异常
	}
	return null;
}%>
<%//写文件函数 %>
<%!public boolean file_put_contents(String fName, String content){
	File f = new File(fName);
	try{
		FileOutputStream fop = new FileOutputStream(f);
		// 构建FileOutputStream对象,文件不存在会自动新建
		OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
		writer.append(content);  // 写入文件
		writer.close();
		// 关闭写入流,同时会把缓冲区内容写入文件
		fop.close();
		return true;
	}catch(Exception e){
		// 处理异常
	}
	return false;	
}
%>

JDBC/数据库相关

基本预编译模板

<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ page import="java.util.*,java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
	<title>sql测试</title>
	<meta charset="utf-8">
</head>
<body>
	<h1>test</h1>
	<h2>?id=</h2>
	<%
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test";
Connection conn=DriverManager.getConnection(url, "sa", "mz1kawaii");
String s1 = request.getParameter("id");
if (s1 == null){
	s1 = "1";
}
String sql ="select * from users where id="+s1+";";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();   //执行SQL语句
while(rs.next()==true){
	out.print(rs.getString("uname") + " - ");
   out.println(rs.getString("passwd"));
}

rs.close();            //关闭数据集
ps.close();            //关闭SQL语句对象
conn.close();        //关闭数据库连接对象
	%>

</body>
</html>
原文地址:https://www.cnblogs.com/Mz1-rc/p/14819166.html