JAVA-Servlet高级应用

会话只是指一段指定的时间间隔。

会话跟踪是维护用户状态(数据)的一种方式。它也被称为servlet中的会话管理。

Http协议是一个无状态的,所以我们需要使用会话跟踪技术来维护用户状态。 每次用户请求服务器时,服务器将请求视为新请求。 所以需要保持一个用户的状态来识别特定的用户。

HTTP是无状态的,这意味着每个请求被认为是新的请求。如下图所示:

为什么使用会话跟踪?

  • 因为需要用于识别特定的用户。

会话跟踪技术

会话跟踪中使用的技术有四种:

  • Cookies
  • 隐藏表格域
  • 网址重写
  • HttpSession

Cookie是在多个客户端请求之间持久存储的一小段信息。

Cookie具有名称,单个值和可选属性,例如注释,路径和域限定符,生存周期和版本号。

默认情况下,每个请求都被视为新的请求。在cookie技术中,servlet响应可以添加cookie。 所以cookie存储在浏览器的缓存中。之后,如果用户发出请求,默认情况下会带上cookie。 因此,我们就可以知道用户旧用户。

Cookie类型

Servlet中有2种类型的Cookie。

  • 非持久性cookie
  • 持久性Cookie

非持久性cookie

  • 它仅适用于单个会话。当用户关闭浏览器时都会删除它。

持久性Cookie

  • 它对多个会话有效。当用户关闭浏览器时也不会删除它。只有在用户注销或注销时才被删除。

Cookie的优点

  • 维持状态最简单的技术。
  • Cookie在客户端维护。

Cookie的缺点

  • 如果从浏览器中禁用Cookie,则无法正常工作。
  • 只能在Cookie对象中设置文本信息。

Cookie类

javax.servlet.http.Cookie类提供了使用Cookie的功能。它为Cookie提供了很多有用的方法。

Cookie类的构造方法

构造方法描述
Cookie()构建一个cookie。
Cookie(String name, String value)构造具有指定名称和值的cookie。

Cookie类的方法

下面中给出了一些常用的Cookie类方法。

方法描述
public void setMaxAge(int expiry)设置cookie的最大生命周期(以秒为单位)。
public String getName()返回cookie的名称。创建后无法更改名称。
public String getValue()返回cookie的值。
public void setName(String name)更改cookie的名称。
public void setValue(String value)更改cookie的值。

使用Cookies所需的其他方法

要添加cookie或从cookie获取值,需要其他接口提供的一些方法。它们分别是:

  • public void addCookie(Cookie ck)HttpServletResponse接口的方法用于在响应对象中添加cookie。
  • public Cookie[] getCookies()HttpServletRequest接口的方法用于从浏览器返回所有的cookie。

下面来看看创建cookie的简单代码。

Cookie ck=new Cookie("user","maxsu jaiswal");//creating cookie object response.addCookie(ck);//adding cookie in the response 
Java

如何删除Cookie?

下面来看看删除cookie的简单代码。它主要用于注销或注销用户。

Cookie ck=new Cookie("user","");//deleting value of cookie ck.setMaxAge(0);//changing the maximum age to 0 seconds response.addCookie(ck);//adding cookie in the response 
Java

如何获取Cookie?

下面来看看简单的代码用来获取所有的cookies。

Cookie ck[]=request.getCookies(); for(int i=0;i<ck.length;i++){ out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie }

Cookie是存储在客户端的一种信息技术。

在上一页中,我们学到了很多关于cookie的内容 如何创建cookie,如何删除cookie,如何获取cookie等

在这里,我们将使用servlet cookie创建一个登录和注销示例。

在这个例子中,我们创建了3个链接:登录,注销和用户资料。用户在未登录之前不能进入个人资料页面。如果用户已经注销,则需要再次登录才能访问个人资料。

在这个应用程序中,创建了以下文件。

  • index.html - Web应用程序首页。
  • link.html - 链接页面。
  • login.html - 登录页面。
  • LoginServlet.java - 登录Servlet处理。
  • LogoutServlet.java - 注销Servlet处理。
  • ProfileServlet.java - 用户个人资料Servlet。
  • web.xml - Servlet配置文件。

打开Eclipse,创建一个动态Web项目:LoginWithCookies,其完整的项目结构如下图所示 -

按以下顺序,分别编写每个文件的源代码。

文件:index.html -

<!DOCTYPE html>
<html> <head> <meta charset="UTF-8"> <title>使用Cookie登录应用程序</title> </head> <body style="text-algin: center;"> <h2>欢迎使用Cookie登录应用程序</h2> <a href="login.html">登录</a>| <a href="logout">注销</a>| <a href="profile">个人信息</a> </body> </html> 
HTML

文件:link.html -

<a href="login.html">登录</a>| <a href="logout">注销</a>| <a href="profile">个人信息</a> <hr> 
HTML

文件:login.html -

    <div style="text-algin: center; padding-top:12px;"> <form action="login" method="post"> 用户名:<input type="text" name="name"> 密码:<input type="password" name="password"><input type="submit" value="登录"> </form> </div> </body> </html> 
HTML

文件:LoginServlet.java -

package com.yiibai;

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); String name = request.getParameter("name"); String password = request.getParameter("password"); // 用户名和密码分别为:admin , 123456 if (name.equals("admin") && password.equals("123456")) { out.print("您已成功登录系统!"); out.print("<br>欢迎您, " + name); Cookie ck = new Cookie("name", name); response.addCookie(ck); } else { out.print("<font style='color:red;'>用户名或密码错误!</font>"); request.getRequestDispatcher("login.html").include(request, response); } out.close(); } } 
Java

文件:LogoutServlet.java -

package com.yiibai;

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LogoutServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); Cookie ck = new Cookie("name", ""); ck.setMaxAge(0); response.addCookie(ck); out.print("您已成功注销!"); } } 
Java

文件:ProfileServlet.java -

package com.yiibai;

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ProfileServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); Cookie ck[] = request.getCookies(); if (ck != null) { String name = ck[0].getValue(); if (!name.equals("") || name != null) { out.print("<b>欢迎您来到个人信息中心</b>"); out.print("<br>您好, " + name); } } else { out.print("<font style='color:red;'>请先登录!</font>"); request.getRequestDispatcher("login.html").include(request, response); } out.close(); } } 
Java

文件: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>LoginWithCookies</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <!-- 登录Servlet --> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.yiibai.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!-- 注销Servlet --> <servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>com.yiibai.LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping> <!-- 用户资料Servlet --> <servlet> <servlet-name>ProfileServlet</servlet-name> <servlet-class>com.yiibai.ProfileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ProfileServlet</servlet-name> <url-pattern>/profile</url-pattern> </servlet-mapping> </web-app> 
XML

在编写所有上面文件代码之后,部署这个Web应用程序,打开浏览器访问URL: http://localhost:8080/LoginWithCookies/ ,如果代码没有错误,应该会看到以下结果 -

点击“登录”链接,输入用户名和密码:admin 和 123456 ,应该会看到以下结果 -

提交登录成功后,看到以下结果 -

查看个人信息 -

 

其它如注销,登录密码错误请自己尝试一下。

转载于:https://www.cnblogs.com/xinfang520/p/7723451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值