本文主要是介绍06.HttpSession,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HttpSession
回话跟踪
为什么需要会话跟踪?
HTTP协议是一种无状态的协议(一般情况下,在响应客户后,服务器就与客户断开连接)
需要对用户在访问同一WEB应用时对用户进行跟踪(如:是否登录)
HttpSession
HttpSession是javaWeb对用户进行会话跟踪的一个接口。
HttpSession由Servlet容器的提供者实现。
HttpSession通过HttpServletRequest的getSession()或getSession(boolean b)方法获取:
getSession():如果会话没有被创建则创建并返回。
getSession(boolean b):如果参数时false,如果会话存在则返回,否则返回null。
常用方法
String getId():返回包含分配给此会话的唯一标识符的字符串。
void invalidate():使会话无效,然后取消任何绑定到此会话的对象的绑定。
void setAttribute(String name, Object value):使用指定名称将对象绑定到此会话。
Object getAttribute(String name):返回此会话中的指定名称绑定在一起的对象(经常需要进行类型转换)。
void removeAttribute(String name):从此会话汇总移出与指定名称绑定在一起的对象。
void setMaxInactiveInterval(int interval):设置servlet容器在客户端访问之间保持此会话的最大时间间隔。
int getInactiveInterval():返回servlet容器在客户端访问之间将使此会话保持打开状态的最大时间间隔。
ServletContext getServletContext():返回此会话的ServletContext。
boolean isNew():如果客户端还不知道该会话,或者客户端选择不加入该会话,则返回true。例如,如果服务器仅适用基于cookie的会话,而客户端已经禁用了cookie的使用,则每个请求上的会话都将是新的会话。
使用HttpSession完成登录验证
用户没有登录则不能访问除登录之外的Servlet。
创建index.html
创建login.html
创建LoginServlet和TestServlet(TestServlet需要登录之后才能访问)
web.xml
示例代码
首页:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><p><a href="pages/login.html">登录</a></p><p><a href="control/test">访问TestServlet(需要登录之后才能访问)</a></p></body>
</html>
登录页面:login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><fieldset><legend>用户登录</legend><!-- 注意login.html文件的路径,这里访问的是该路径下的login服务 --><!-- 也可以使用"../login"(返回上一级)表示访问根路径下的login服务 --><!-- 另外一种方式,在头标签里面加此标签<base href="/SessionTrack/">,表示此页面所有的访问都是相对于该位置下的页面或服务--><form action="login" method="post"><p>用户名:<input type="text" name="name" /></p><p><!-- 不要使用普通空格,中间使用一个全角空格字符,间隔刚好是一个中文文字 -->密 码:<input type="password" name="password" /></p><p><input type="submit" value="登录" /> <input type="reset" value="取消" /></p></form></fieldset>
</body>
</html>
登录服务验证页面:LoginServlet.java
package com.li.servlet;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 {private static final long serialVersionUID = 1L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String name=req.getParameter("name");String password=req.getParameter("password");if("admin".equals(name) && "123456".equals(password)) {//获取会话HttpSession session=req.getSession();session.setAttribute("uesr", name);resp.setContentType("text/html;charset=UTF-8");resp.getWriter().write("<strong>欢迎"+name+"!</strong><br/><a href='../index.html'>返回首页</a>");}else {//登录失败,通过重定向的方式重新返回登录页面/*由于我们在配置文件中已经把服务配置到pages文件下,*所以,此处我们使用的是相对路径,不在需要加重定向位置所在的文件夹。*/resp.sendRedirect("login.html");}}
}
访问服务测试页面:TestServlet.java
package com.li.servlet;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 TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//注意参数,session可以为null, 也可以不使用参数从而判断session是否为新的HttpSession session=req.getSession(false);if(session==null || session.getAttribute("uesr")==null) {//如果没有登录,则重定向到登录页(该Servlet配置在control路径下,也可以使用绝对路径)resp.sendRedirect("../pages/login.html");//System.out.println(getContextPath());}else {resp.setContentType("text/html; charset=UTF-8");resp.getWriter().write("<h3>欢迎"+session.getAttribute("uesr")+"访问TestServelt</h3><a href='../index.html'>返回首页</a>");}}
}
配置文件:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>SessionTrack</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.li.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><!-- 将服务配置到pages文件下,否则将直接针对工程的根路径而配置到根路径下 --><url-pattern>/pages/login</url-pattern></servlet-mapping><servlet><servlet-name>TestServlet</servlet-name><servlet-class>com.li.servlet.TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><!-- 将服务直接配置到根路径下的control路径下 --><url-pattern>/control/test</url-pattern></servlet-mapping></web-app>
这篇关于06.HttpSession的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!