Web保存状态的手段(哀求转发,Cookie的使用)

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一,掌握哀求转发

哀求转发与重定向技能都是跳转页面的途径,但是这两个技能之间也有差别之处。
哀求转发更倾向于servlet跳转jsp,而重定向更倾向于servlet跳转到servlet。
1. 常用页面跳转方法2:哀求转发(重写URL)
 RequestDispatcher接口对象允许将哀求转发到其他服务器资源
2. javax.servlet.RequestDispatcher接口的常用方法
 void forward(HttpServletRequest,HttpServletResponse) throws ServletException,java.io.IOException
 说明:在服务器上转发哀求到另一个资源(Servlet, JSP, HTML)
3. javax.servlet.ServletContext接口的常用方法
 RequestDispatcher getRequestDispatcher(String path)
 说明:一个RequestDispatcher对象可以用来转发哀求到资源或包罗在相应中的资源,资源可以是动态或静态的。
 参数说明:path-转发路径
4. 通过HttpServletRequest接口中的方法设置/获取参数
 setAttribute(String name,Object value)
 getAttribute(String name)
  1. package csdn;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet("/cs")
  9. public class CheckServlet extends HttpServlet {
  10.     @Override
  11.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12.         String username = req.getParameter("username");
  13.         String password = req.getParameter("password");
  14.         if (RegisterServlet.map.get(username) != null & RegisterServlet.map.get(username).equals(password)) {
  15.             req.getRequestDispatcher("welcome.jsp").forward(req,resp);
  16.         } else {
  17.             req.getRequestDispatcher("login2.jsp").forward(req,resp);
  18.             
  19.         }
  20.     }
  21. }
复制代码
效果跟使用重定向的效果是一样的
5.重定向与哀求转发对比

二,Web中保持状态的手段

1.Cookie的使用

1. 如何实现“两周内主动登录”功能?

Cookie:保存到客户端的(多是文本文件),与客户端相关,以“key-value”对的情势保存数据


  •  设置逾期时间
  •  存储在硬盘上(例:IE)
  •  可以在差别的浏览器进程间共享,关闭后再次打开浏览器cookie依然有效
注:客户端可以制止服务器写入Cookie
1. 创建Cookie:


  •  javax.servlet.http.Cookie
  •  new Cookie(name,value)
2. Cookie类的常用方法:


  •  String getName()
  •  返回cookie的名称,在创建后名称不能改变
  •  void setValue(String value)/String getValue()
  •  设置/返回cookie的值
  •  void setMaxAge(int age)
  •  设置cookie的最大值(秒)
3. 其他常用方法


  •  void addCookie(Cookie)
  •  接口HttpServletResponse中的方法
  •  相应中指定的cookie,此方法可以多次调用来设置多个cookie
  •  Cookie[] getCookies()
  •  接口HttpServletRequest中的方法
  •  读取客户端的所有Cookie,返回一个Cookie数组;假如没有cookie返回null
  1. Map<String,String>map=new HashMap<>();
  2.         map.put("admin","123");
  3.         map.put("test","456");
  4.         map.put("abc","xyz");
  5.         //通过用户名,去map中查找密码,如果用户名存在,则可以找到,否则为空
  6.         String x=map.get(u);
  7.         //Set<String> k=map.keySet();
  8.         if (x!=null&&x.equals(s)/*k.contains(u) && map.get(k).equals(s)*/) {
  9.             //auto!=null表示勾选了自动登录
  10.             if (auto!=null){
  11.                 //我们使用login作为cookie的键,用这个cookie来实现自动登录
  12.                 Cookie c=new Cookie("login",u);
  13.                 c.setMaxAge(60);
  14.                 resp.addCookie(c);
  15.             }
复制代码
  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: ***
  4.   Date: 2024/7/19
  5.   Time: 10:31
  6.   To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11.     <title>用户登录</title>
  12. </head>
  13. <body>
  14. <%
  15.     Cookie[] cookies = request.getCookies();
  16.     if (cookies!=null){
  17.         for (Cookie c:cookies){
  18.             String name = c.getName();
  19.             //login这个cookie是我们用来做自动登陆的,如果找到了他,说明我们之前选过自动登录并且还有效
  20.             if (name.equals("login")){
  21.                 session.setAttribute("abc",c.getValue());
  22.                 response.sendRedirect("welcome.jsp?name="+c.getValue());
  23.             }
  24.         }
  25.     }
  26. %>
  27. <form action="dbCheck" method="post">
  28.     用户名:<input type="text" name="userName">
  29.     <br/>
  30.     密码:<input type="password" name="password">
  31.     <br/>
  32.     <input type="checkbox" name="autoLogin" value="1">两周内自动登录
  33.     <input type="submit" value="登录">
  34. </form>
  35. </body>
  36. </html>
复制代码
我们要使用js在这里界说cookie数组,将主动登录的用户名和暗码保存在这里
这是一段关于Cookie的代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表