一、Session
1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
2. 常用方法:
- 获取HttpSession对象:
HttpSession session = request.getSession();- 使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
3. 原理: Session的实现是依赖于Cookie的。
4. session的特点:
- session用于存储一次会话的多次请求的数据,存在服务器端
- session可以存储任意类型,任意大小的数据
5. session与Cookie的区别:
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对于不安全
6. session的销毁时间:
- 服务器关闭
- session对象调用invalidate() 。
- session默认失效时间 30分钟(可修改tomcat下的web.xml文件中的session-config)
<session-config> <session-timeout>30</session-timeout> </session-config>
7. session与cookie的区别:
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对于不安全
8. 其它
- 当客户端关闭,服务器不关闭,两次获取session在默认情况下不是同一个,但可以通过创建cookie,设置存活时间进行存储
Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(60*60); response.addCookie(c);
- 当客户端不关闭,服务器关闭,两次获取session也不是用一个,但是为确保数据不丢失,tomcat自动完成以下工作:
session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上
session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。
二、Session案例
1. 需求:将session持久化存储
2. 代码实现:
编写SessionServlet:
编写SessionServlet2:
3. 结果
续:
三、JSP入门
1. 概念:Java Server Pages -> java服务器端页面,既可以指定定义html标签,又可以定义java代码。
2. 原理:JSP本质上就是一个Servlet
3. JSP的脚本:JSP定义Java代码的方式
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
- <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
4. JSP的内置对象(九个):在jsp页面中不需要获取和创建,可以直接使用的对象
1.PageContext javax.servlet.jsp.PageContext JSP的页面容 器
2.request javax.servlet.http.HttpServletrequest 获取用户的请求信息
3.response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
4.session javax.servlet.http.HttpSession 用来保存每一个用户的信息
5.application javax.servlet.ServletContext 表示所有用户的共享信息
6.config javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数
7.out javax.servlet.jsp.jspWriter 页面输出
8.page java.lang.object)
9.exception java.lang.Throwable
四、案例
- 编写JSPServlet:
续:
- 编写JSPShopping.jsp
续:
- 结果
补充:
response.getWriter()和out.write()的区别:
- 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
- response.getWriter()数据输出永远在out.write()之前
not learn to live:
难过的不是你不知道,是知道了却什么也做不了。这是生活给予你的无力感,更是自己对生活的一种纵容。