本文主要是介绍JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Session的追踪技术
已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,如果浏览器没有禁用cookie的话,当浏览器再次访问项目中的Servlet程序时会将JSESSIONID带着,这时JSESSIONID就像唯一的一把钥匙 开启服务器端对应的session空间,进而获取到session中的内容(Session没有失效的情况下)。之所以第一次访问会创建与浏览器对应的一个Session空间,是因为第一次访问浏览器是不会携带对应的JSESSIONID,凡是不带有JSESSIONID的访问 调用request.getSession()方法都会为客户端创建一个session空间。
当浏览器客户端禁用了cookie之后,浏览器端就无法保存JSESSIONID,就无法使用session。不是说服务器端的Session空间丢失了,而是在服务器端找到打开对应Session空间的钥匙(JSESSIONID)丢失了。这时就需要使用Session的追踪技术。
session的销毁:
(1)非正常关闭服务器。注意:非正常关闭服务器是不会序列化session到本地的。会导致session丢失。
(2)手动正常关闭服务器。不会导致session丢失(正常关闭服务器后,会在服务器中将session存储起来,再次启动服务器的时候 会被重新加载到内存中)
(3)session的过期,默认是30分钟(在不关闭浏览器的情况下) 可以在服务器的web.xml文件中进行设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<session-timeout>30</session-timeout>
</session-config>
注意:关闭浏览器 后重新访问无法获取session内容 并不是因为session被销毁 而是session只是一次会话,其客户端的JSESSIONID是保存在内存里的,关闭浏览器后JSESSIONID在内存里被释放。
(4)调用session.invalidate() 手动销毁session 。
示例如下:
SessionDemo1.java 路径:/session1
public class SessionDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// session域对象HttpSession session = request.getSession();session.setAttribute("username", "小风");// DD64756D56885AF87E883B887BF77E6C jsessionid=DD64756D56885AF87E883B887BF77E6CSystem.out.println(session.getId());response.sendRedirect("/day12/session2");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
SessionDemo2.java /session2
package cn.itcast.session;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class SessionDemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 手动传入jsessionid=DD64756D56885AF87E883B887BF77E6C HttpSession session = request.getSession();String username = (String) session.getAttribute("username");response.setContentType("text/html;charset=UTF-8");response.getWriter().write("<h4>访问到了..."+username+"</h4>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
正常关闭服务器
重新启动服务器 session又被反序列化到内存中
禁用浏览器的cookie之后
重新访问:
发现cookie被浏览器被禁用之后,无法获取session空间的内容。可以使用cookie追踪技术,就是在跳转路径后加上;jsessionid=DE3D5641D0D1D248D66C7A3D67E47F8E 访问路径即http://localhost/day12/session2;jsessionid=DE3D5641D0D1D248D66C7A3D67E47F8E 效果如下:
session的域对象:
ServletContext:代表整个web应用,数据库连接
session:一次会话,存放个人信息
request:一次请求,存放错误处理
JSP设置与页面的注释
(1)设置JSP文件的打开方式(以便快速打开)window -- 选项 -- General -- Editors -- 文件关联 -- *.jsp -- 选择MyEclipse JSP Editor -- default
(2)设置JSP的编码(用于显示中文)window -- 搜索JSP -- 找到JSP -- 选择UTF-8 -- OK
JSP页面的注释:
(1)HTML的注释 <!-- --> JSP文件的阶段存在,在翻译成Java文件后也存在,在页面也存在。
(2)Java的注释 JSP文件的阶段存在,在翻译成Java文件也存在,在页面不存在。
<%
// 单行
/**/ 多行
/**
* 文档注释
*/
%>
(3)JSP的注释 <%-- JSP的注释 --%> 只存在于JSP文件阶段。
JSP指令元素
功能:用于指示JSP执行某些步骤 或用于指示JSP表现特定行为。
语法格式:<%@ directive [attribute="value"]*%> 即 <%@ 指令元素 属性名=属性值 %>
分类:page指令标记、include指令标记、taglib指令标记
page指令标记
(1)page属性包含在" <%@ page " 和 "%>" 之间。
(2)这些属性可以单独使用,也可以几个或多个同时使用。
(3)在JSP页面中,只有import可以出现多次,其他属性都只能出现一次。
page指令属性:
- language:声明使用脚本的种类,即JSP文件运行嵌入的语言。目前只支持Java一种语言(不需要改变)例如:language="java"
- extends:JSP翻译成Servlet的Java文件时,Servlet继承的类(不需要改变)例如:extends="src.class"
- session:例如session="true",指定一个Http会话是否使用session对象,默认值是true 可以直接使用session。设置成false不能直接使用session(如果设置成false 要想获取session 只能使用Java代码 <% HttpSession session2 = request.getSession() %>)
- import: 用于导入Java包或类的列表 (可以使用后多次 import="java.util.Date")
- buffer:指定JSP对客户端输出缓冲区的大小,默认是8kb (buffer="8k")
- autoFlush:设置默认自动刷新缓冲区(不需要改变),如果buffer溢出,设置成true时正常输出,设置成false时 出现异常 (autoFlush="true")
- errorPage: 处理异常事件时调用的JSP页面 ,指定错误页面 (errorPage="error.jsp")
- isErrorPage:设置此页是否可以为其它页的errorPage目标 (设置值为true,可以是exception对象,设置成false不能使用exception对象)
- contentType:定义JSP页面响应的MIME类型(指定服务器端输出所有内容采用的编码 contentType="text/html,charset=utf-8")
- pageEncoding:JSP页面字符编码,其优先权高于contentType(JSP翻译成Servlet文件时采用的编码 pageEncoding="gb2312")
- isELIgnored:用于指定EL(表达式语言)是否被忽略。true则忽略,false则计算表达式的值 (isELIgnored="false")
重点:session import contentType pageEncoding isELIgnored
配置全局的错误页面
在项目中的web.xml中进行配置:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
<error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
注意:所有的请求出现错误后 都会跳转到对应的错误页面。errorPage属性的优先级大于全局错误页面的优先级。如果一个JSP的page指令属性后指定了errorPage属性,出现了错误的话,会跳转到errorPage指定的页面。
在WebRoot下新建jsp的文件夹,在jsp文件夹下新建demo.jsp、error.jsp, 在WebRoot根目录下下新建全局的错误页面404.jsp、500.jsp 进行测试page指令有关的属性
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" isErrorPage="true" %>
<!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-8">
<title>Insert title here</title>
</head>
<body><h3>亲,服务器正在维护!!</h3><%=exception.getMessage() %> </body>
</html>
404.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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-8">
<title>Insert title here</title>
</head>
<body><h3>亲,您访问的资源恋爱了,不在服务区!!</h3></body>
</html>
500.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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-8">
<title>Insert title here</title>
</head>
<body><h3>亲,服务器正在维护,这回是真的维护!!</h3></body>
</html>
demo.jsp
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" session="true" buffer="8kb" autoFlush="true" errorPage="/jsp/error.jsp" isELIgnored="false"%><!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-8">
<title>Insert title
这篇关于JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!