Java web----HttpSession
来源:互联网 发布:前端工程师和美工 编辑:程序博客网 时间:2024/06/05 04:29
1 What is HttpSession
javax.servlet.http.HttpSession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到HttSession对象中!
2 HttpSession是域对象HttpServletRequest、ServletContext,它们都是域对象,现在我们又学习了一个HttpSession,它也是域对象。它们三个是Servlet中可以使用的域对象,而JSP中可以多使用一个域对象。
- HttpServletRequest:一个请求创建一个request对象,所以在同一个请求中可以共享request,例如一个请求从AServlet转发到BServlet,那么AServlet和BServlet可以共享request域中的数据;
- ServletContext:一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用中共享,只要不启动服务器,那么ServletContext中的数据就可以共享;
- HttpSession:一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据;
3 用户登录session实例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> This is my JSP page. <br> <form action="/session01/LoginServlet" method="post"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="登陆"> </form> </body></html>
package com.cug.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 LoginServlet extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String username = req.getParameter("username");String password = req.getParameter("password");if(!(username.equalsIgnoreCase("bluze") && password.equalsIgnoreCase("123"))){resp.getWriter().print("用户名或密码错误!!!");}else{HttpSession session = req.getSession();session.setAttribute("username", username);resp.sendRedirect("/session01/login1.jsp");}}}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>login1.jsp</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <h1>login1</h1><br/> <% String name = (String)session.getAttribute("username"); if(name!=null){ out.println("欢迎:"+name); }else{ out.println("您还没有登陆!!!"); } %> <a href="/session01/login2.jsp">login2.jsp</a> </body></html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'login2.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <h1>This is login2</h1> <% String name = (String)session.getAttribute("username"); if(name!=null){ out.println("欢迎:"+name); }else{ out.println("您还没有登陆!!!"); } %> <a href="/session01/login1.jsp">login1.jsp</a> </body></html>
4 session的实现原理
session底层是依赖Cookie的!
当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。
当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命不-1,即只在浏览器内存中存在,也就是说如果用户关闭了浏览器,那么这个Cookie就丢失了。
当用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,所以服务器会创建一个session,并在响应中把sessionId中到Cookie中发送给客户端。
你可能会说,那原来的session对象会怎样?当一个session长时间没人使用的话,服务器会把session删除了!这个时长在Tomcat中配置是30分钟,可以在${CATALANA}/conf/web.xml找到这个配置,当然你也可以在自己的web.xml中覆盖这个配置!
<session-config> <session-timeout>30</session-timeout> </session-config>
- Java web----HttpSession
- Java HttpSession
- Java-HttpSession
- 【Java.Web】Session —— HttpSession及相关
- Java Web笔记:Servlet取得httpSession以及servletContext
- Java Web day(6)之jsp&Cookie&HttpSession基础
- 【Java.Web】Session —— HttpSession及相关
- Java-HttpSession监听
- java HttpSession理解
- java WebSocket 获取httpSession
- HttpSession
- HttpSession
- HttpSession
- httpsession
- HttpSession
- HttpSession
- HttpSession
- HttpSession
- Java-Factorial Trailing Zeroes
- waveout 播放流媒体
- C++中const、volatile、mutable的用法
- compass sass 中文 错误的问题
- Java绘制验证码
- Java web----HttpSession
- 将一个十六进制字符串转换为十进制数值
- 十七、运算符重载(一) 成员函数重载、友元函数重载、运算符重载规则
- tcp/ip 上,丢包重传机制
- 设计模式-适配器模式
- apue学习第十一天(2)——深度剖析auto, register, static, extern
- 一名初入职场的freshman-梦想成为一名优秀的“产品经理”
- Discuz!X3.2学习笔记(二)
- 安卓下对SD卡文件的读写