预备知识
一、什么是JSP
全称Java Server Pages,里边包含html标签、css样式,JavaScript脚本和Java代码
二、JSP执行过程
当用户通过浏览器访问Tomcat上发布的JSP页面时,Web应用服务器使用JSP引擎对该页面进行翻译(java文件)、编译(.class文件)和执行,然后将执行结果(静态页面代码)返回给客户端浏览器,最后将浏览器执行返回的结果呈现给用户。具体过程如下图所示
注意
JSP的翻译,编译和执行操作都是在服务器端进行的,返回给客户端浏览器的是服务器执行JSP对应字节码文件后的HTML代码,所以对于客户端来说,只要有浏览器就可以浏览JSP页面
三、JSP内置对象
JSP常用内置对象有:response对象、pageContext对象、request对象、session对象和application对象,本文中主要讲解session对象;
四、还需要知道的
1、声明:
作用:
JSP声明用于定义JSP页面中的变量与方法,这些经过定义的变量和方法,将成为编译后Servlet类的属性与方法。声明并不会产生任何的数据输出,声明时可以同时设置初始值,提供给其他声明、小脚本和表达式使用:
语法:
<%!
//声明语句
%>
2、小脚本(Scriptlet):
作用:
小脚本时一段Java代码,该代码将成为编译后Servlet类public void _jspService(final HttpServletRequest request, HttpServletResponse response)方法的一部分。
语法:
<%
//Java代码
%>
3、表达式:
作用:
用于显示数据,JSP表达式实际上是简化的out.println();
语法:
<%=表达式%>
注意:JSP声明和JSP小脚本中包含的是Java程序片段,每一行语句必须使用分号结束;而使用JSP表达式进行输出时,不能在表达式结尾处添加分号。
session对象
web应用中,会话是指在一段时间内,一个用户通过浏览器与服务器之间进行的一系列的请求和响应的交互过程。在一个会话中,用户可以访问该web应用系统中包括网页在内的多种资源。
当用户(浏览器)向Web应用服务器发送第一次请求时,服务器会为该用户创建一个唯一标识的会话,会话一直延续到访问结束(浏览器关闭或用户长时间不访问Web应用)。JSP使用session对象表示会话,即将信息保存在session对象中,方便用户在这个会话中随时获取。
session运行机制
当Web应用系统接收到客户端浏览器的请求时,首先检查服务器是否已经为这个客户端创建了session对象,即判断客户端的请求中是否包含了一个session ID(session唯一标识),如果包含sessionID,则服务器就会通过sessionID找到对应的session对象,以确定是这个客户端访问服务器;而如果客户端的请求中没有sessionID,服务器会为该客户端创建一个新的session对象,并生成一个与此session对象对应的sessionID,然后将sessionID随着本次响应返回给客户端。
session常用方法
setAttribute:设置指定名字的参数值;
getAttribute:获取指定属性的值,如果该属性值不存在则返回null;
removeAttribute:删除session中的一个属性;
getId():获取sessionID;
isNew():每个请求是否会产生新的session对象;
setMaxInactiveInterval():设置停止操作后session对象的有效时间;
注意:
session中保存的对象随Tomcat服务器正常关闭(通过shutdown.bat关闭)而保存到work文件夹相应目录中(Tomcat安装根目录\work\Catalina\localhost\XXX),随Tomcat的启动而重新使用。
演示部分
1、关于session对象的相关演示;
为了效果更明显,我们选择了request来作对比,没有对比就没有伤害
当在一个会话中设置值
1)可以直接访问当前页面获取到该值
2)当会话不关闭时,在其他页面也可以获取到设置的值。
3)直接访问2.jsp是获取不到值的(重新启动浏览器再访问)。
代码部分:
1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<% session.setAttribute("key1", "session");%>
<% request.setAttribute("key2", "request");%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%=session.getAttribute("key1")%>
<%=request.getAttribute("key2")%>
<a href="./2.jsp">点击</a>
</body>
</html>
2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%=session.getAttribute("key1") %>
<%=request.getAttribute("key2")%>
</body>
</html>
通过Tomcat发布之后访问1.jsp,页面内显示:
点击之后发现显示结果为:
但是如果直接关掉了浏览器再启动(关闭所有窗口再启动浏览器的那种),直接访问2.jsp会发现
这就验证了上边的说法
2、关于session运行机制的演示:
在web.xml文件中加入下列代码,设置“杀死”session对象的时间,单位为分钟,默认是30分钟,我们将其修改为1分钟
<session-config>
<session-timeout>1</session-timeout>
</session-config>
1.jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%=session.getId()%>
</body>
</html>
当我们第一次访问1.jsp页面时,或获取到这次的session对象ID为5811A42D6771C295CE46E311CE65F80C,由于设置了时间为1分钟,所以我们先歇会qia一杯卡布奇诺,静待一分钟后,发现ID变为17E97CBE5C165CF45DBFF6DC0B89CCA1,也有力证明了上边的说法