1、JSP执行过程
2、JSP最终都会转换为Servlet去执行
3、JSP语法
1)注释:
①<!-- HTML注释--> HTML注释,会发送给客户端 //在页面看不到,但页面的源代码可以看到
②<%--JSP注释--%> JSP注释,不会发送给客户端(隐藏注释) //在页面看不到,页面的源代码也看不到
③<!--<%=new java.util.Date()%>--> HTML注释中嵌套JSP表达式,会把表达式内容计算出来再发送给客户端
2)编译器指令:<%@ %> 两个主要指令page与include
① page:页指令,<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
a)language="java",声明脚本语言的种类,目前只能用"java"
b)import="java.util",需要导入的Java包的列表,其中java.lang.* ,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*这些包在JSP编译时就已经导入了,就不需要再导入了
c)无论把<%@ %>指令放在JSP文件的哪个地方,它的作用范围都是整个JSP页面。
②include:包含指令,表示当前页面可以包含其他页面
③taglib指令,用于引入自定义标签库
3)声明:<%! int i = 3; %> 表示为成员变量 ,脚本段:<% int j = 3; %> 表示为局部变量
当服务器将JSP转换为Servlet时,会将JSP中的声明转换为类的成员变量,而将脚本段转换为方法中的局部变量,Servlet是单实例的,这样成员变量的值就只有一个,每个用户都会访问到它,二脚本段中的值则是局部变量,每个用户访问的时候各有一份,互不影响。
4)表达式:<%= expression %>
5)脚本段:<%
//任何合法的Java代码
%>
6)<jsp:forward page="需要转向页面的地址"> </jsp:forward>
该指令用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面。
7)<jsp:include page="被包含页面的地址"> </jsp:include>
4、JSP内置对象
5、getParameter方法是getParameterValues方法的特列,表示请求参数值只有一个,如果请求参数值有多个,请使用getParameterValues方法。在多选框的情况下需要使用getParameterValues方法来获取用户多选的多个复选框的值。
6、request和response
7、Session用来保存客户端状态信息
8、request的setAttribute与getAttribute方法一般是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值(获取到之后一般都需要进行向下类型转换,将属性值转换为真正的对象)。setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。
9、request的getParameter方法的作用是获取到客户端通过表单或url请求参数所发送过来的参数值,是客户端与服务端之间的交互,服务端要想获取到客户端发送过来的数据,就需要使用getParameter方法来获取。没有与getParameter方法相对应的setParameter方法。
10、request对象内数据的存活范围就是在request对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端重写发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得之前的request对象中存放的任何数据。
11、暂时这么理解:session对象的存活范围,只要浏览器不关闭,session对象就会一直存在,因此在同一个浏览器窗口中,无论向服务端发送多少个请求,session对象只有一个。
12、application对象的存活范围,只要服务器没有关闭,application对象的数据就一直存在,并且application对象只有一个。
13、HttpServletResponse对象的sendRedirect(String location)方法称作重定向。如果location地址前面加上“/”,则表示相对于Servlet容器的根来请求,即http://localhost:8080,如果location地址前面没有加上“/”,则表示相对于当前请求的URI来寻找地址。
14、RequestDispatch的forward方法(request,response)方法称作请求转发。
15、请求转发和重定向区别:
1)请求转发,整个过程处于同一个请求当中
2)重定向,实际上客户端会向服务端发送两个请求。
3)RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
4)sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。