JSP九大内置对象:
out对象:它是JspWriter类的实例,是向客户端输出内容常用的对象。
request对象:它表示客户端的一次请求,这个请求里面的信息是被封装在request对象中的。同时它也是HttpServletRequest类的实例,并且具有请求域,也就是在完成客户端的请求之前,该对象是一直有效的。
常用方法:
request.setCharacterEncoding("UTF-8");//设置编码,解决中文乱码问题。
request.setAttribute("","");//前者为需要设置的属性,后者为需要的值。
request.getAttribute();
request.getRequestDispatcher("index.jsp").forward(request, response);//请求转发到index.jsp页面,该请求对象是一直有效的。
response对象:它包含了响应客户请求的相关信息,它也是HttpServletResponse类的实例。和request一样,它具有页面的作用域,也就是在访问一个页面的时候,该页面的response对象只对这次访问有效,往后执行是不存在、无效的。
常用方法:
response.setContentType("text/html","charset="utf-8");//设置响应的MIMI类型。
response.sendRedirect("index.jsp");//请求重定向,如果存在多次重定向,那么对象数据是不会保存下来的,即为null。
请求转发和请求重定向的区别分析:
-
请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
-
请求转发:服务器行为,request.getRequestDispatcher().forward(req, resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
session对象:当我们第一次访问页面的时候,session对象就会被自动装载和创建。它是HttpSession类的实例对象。
什么是会话?为什么要用session对象?
-
会话:当一个客户端打开浏览器连接到服务器开始,到客户端关闭浏览器服务器结束这个过程,我们称为一个会话。
-
在实际情况下,客户在访问服务器的过程中,避免不了会在服务器的几个页面之间切换,这时候服务端有必要知道当前操作的客户是不是操作前几个页面的客户,也就是必须要清楚知道是否同一个人在进行操作。所以就引入了session对象这个概念。
application对象:它实现了用户间数据的共享,可以存放全局变量,它是ServletContext类的实例。它的生命周期开始于服务器的启动,终止于服务器的关闭。
注:
①在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
②在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。
JSP的指令和动作:
①三个编译指令:page、include、taglib。
②七个动作指令:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getPProperty。
JSP指令:
include指令和include动作指令区别:
Session的生命周期
Session生命周期的“活动”思路:
①某次会话当中通过超链接打开的新页面属于同一次会话。
②只有当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
③除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
注:
注意原有会话是还存在的,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验。
注:
①当Web容器启动的时候,过滤器就已经加载并启动了。
②实例化只会实例化一次,也就是说在Web容器中只会使用一次。
思路:
①首先判断Servlet实例是否存在,如果存在则跳入第③步。
②初始化阶段,init初始化方法是在创建实例之后完成的。
③响应阶段,响应客户端的请求,调用service()方法。由service()方法根据提交方式选择性执行doGet()方法或者doPost()方法。
④终止阶段,调用Destroy()方法销毁,服务器关闭。
Web监听器
Web监听器是有Servlet规范定义的一种特殊类,它可以监听客户端的请求和服务端的操作,同时它还可以监听,包括ServletContext、HttpSession、ServletRequest等对象。
监听器的分类
HttpSession的事件监听器
ServletContext的事件监听器
ServletRequest的事件监听器
注:
这三个监听事件,分别实现对应的接口,也就是图示的1..N。既然实现了接口,即必然要实现其对应的方法,如图所示。主要用途也如图所示。
绑定到HttpSession域中的对象状态的事件监听器
注:
为什么要用session钝化?
首先,正常情况下,我们的session是存放在服务器的session当中的,但是如果我们的用户很多的时候,仍然把session存放在服务器里,这时服务器的开销是很大的,会直接影响我们Web应用的使用。所以就需要使用到session钝化机制,它的本质就是将服务器未使用到的session对象暂时序列化到系统文件当中,当要使用的时候再反序列化到服务器内存当中。
Model1和Model2
注:
Model1是最早的能体现分层思想的一种开发模式,简单来说Model1就是一种Jsp+JavaBean的一种开发模式。
缺点:可维护性和可扩展性是比较差的。
思路:
①首先由Jsp页面向Servlet提交一个请求。
②然后在我们的控制层Servlet实例化一个模型层的对象或者调用模型层的一些功能。
③然后由模型层来访问读取我们的数据库层。
④当得到读取到结果后,再将结果返回到我们的控制层。
⑤控制层得到这个结果后,会根据这个结果给用户展示不同的Jsp页面。
(完)