zoukankan      html  css  js  c++  java
  • WEB登录回显、会话Cookie(持久时间、携带路径、遍历)

    summarize

    request 登录回显

    如何判断是用重定向response 还是请求转发 request,看需不需要带数据,带就用转发,不带就用重定向

    域对象:目前学了俩 一个是request.Context 整个web信息。一个是request域,只在一次请求中

    一次会话: 从打开浏览器访问某个站点到关闭浏览器。若只是关闭页面,不叫会话结束会话就是从打开浏览器就开始。

    会话技术:就是记录本次会话中的客户端状态与数据

    Cookie:存在客户端,session:存在服务端

    session:将数据存到服务端,安全性好,增加服务器压力

    Cookie:不能存中文,必须是字符串,可以设置持久化的时间,注意!当没设置持久时间:Cookie会随客户端的打开而产生而产生非,随客户端关闭而消失,设置了时间后,Cookie会从启动命令开始,计算时间,当时间到,就会删除Cookie,客户端没关浏览器也会删除。设置持久化时间的单位为:秒。

    携带路径:如果不设置携带路径。cookie会显示产生在整个web资源所在的路径都携带Cookie信息。如果设置了携带路径,写到哪个目录下,就会显示哪个目录下所有cookie信息

    删除客户端的Cookie:把持久化时间改为0,原理:覆盖之前所存下的Cookie。

    编辑登录代码

    login.jsp加上没写完的值

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3 <!DOCTYPE html>
      4 <html>
      5 <head>
      6 <meta name="viewport" content="width=device-width, initial-scale=1">
      7 <title>会员登录</title>
      8 <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
      9 <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
     10 <script src="js/bootstrap.min.js" type="text/javascript"></script>
     11 <!-- 引入自定义css文件 style.css -->
     12 <link rel="stylesheet" href="css/style.css" type="text/css" />
     13 
     14 <style>
     15 body {
     16     margin-top: 20px;
     17     margin: 0 auto;
     18 }
     19 
     20 .carousel-inner .item img {
     21      100%;
     22     height: 300px;
     23 }
     24 
     25 .container .row div {
     26     /* position:relative;
     27                  float:left; */
     28     
     29 }
     30 
     31 font {
     32     color: #666;
     33     font-size: 22px;
     34     font-weight: normal;
     35     padding-right: 17px;
     36 }
     37 </style>
     38 </head>
     39 <body>
     40 
     41     <!-- 引入header.jsp -->
     42     <jsp:include page="/header.jsp"></jsp:include>
     43 
     44 
     45     <div class="container"
     46         style=" 100%; height: 460px; background: #FF2C4C url('images/loginbg.jpg') no-repeat;">
     47         <div class="row">
     48             <div class="col-md-7">
     49                 <!--<img src="./image/login.jpg" width="500" height="330" alt="会员登录" title="会员登录">-->
     50             </div>
     51 
     52             <div class="col-md-5">
     53                 <div
     54                     style=" 440px; border: 1px solid #E7E7E7; padding: 20px 0 20px 30px; border-radius: 5px; margin-top: 60px; background: #fff;">
     55                     <font>会员登录</font>USER LOGIN         下面黄色:用三目运算符判断是否为空,如果为null,显示空串,如果不为空,获取info的值,并显示
     56                     <div><%=request.getAttribute("info")==null?"":request.getAttribute("info") %></div><!--  <%=%> 这里相当于往页面输出代码 -->
     57                     <form class="form-horizontal" action="/Shop/LoginServlet" method="post">
     58                         <div class="form-group">
     59                             <label for="username" class="col-sm-2 control-label">用户名</label>
     60                             <div class="col-sm-6">
     61                                 <input type="text" class="form-control" id="username"
     62                                     placeholder="请输入用户名" name="username">
     63                             </div>
     64                         </div>
     65                         <div class="form-group">
     66                             <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
     67                             <div class="col-sm-6">
     68                                 <input type="password" class="form-control" id="inputPassword3"
     69                                     placeholder="请输入密码" name="password">
     70                             </div>
     71                         </div>
     72                         <div class="form-group">
     73                             <label for="inputPassword3" class="col-sm-2 control-label">验证码</label>
     74                             <div class="col-sm-3">
     75                                 <input type="text" class="form-control" id="inputPassword3"
     76                                     placeholder="请输入验证码">
     77                             </div>
     78                             <div class="col-sm-3">
     79                                 <img src="./image/captcha.jhtml" />
     80                             </div>
     81                         </div>
     82                         <div class="form-group">
     83                             <div class="col-sm-offset-2 col-sm-10">
     84                                 <div class="checkbox">
     85                                     <label> <input type="checkbox"> 自动登录
     86                                     </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <label> <input
     87                                         type="checkbox"> 记住用户名
     88                                     </label>
     89                                 </div>
     90                             </div>
     91                         </div>
     92                         <div class="form-group">
     93                             <div class="col-sm-offset-2 col-sm-10">
     94                                 <input type="submit" width="100" value="登录" name="submit"
     95                                     style="background: url('./images/login.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 35px;  100px; color: white;">
     96                             </div>
     97                         </div>
     98                     </form>
     99                 </div>
    100             </div>
    101         </div>
    102     </div>
    103 
    104     <!-- 引入footer.jsp -->
    105     <jsp:include page="/footer.jsp"></jsp:include>
    106 107 </body> 108 </html>
    注意
    <%=request.getAttribute("info")==null?"":request.getAttribute("info") %>:+判断是否为null,如果是null,显示空串,若不是,显示"info"里的值

    若改后台代码时,需重启服务器:比如新加文件Servlet、src里面的文件内容 若改jsp页面文件直接保存即可,无需重启服务器

    在web包下建个 LoginServlet

    package com.oracle.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.oracle.service.UserService;
    
    public class LoginServlet extends HttpServlet {
        private UserService userService=new UserService();
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //        解决中文乱码
            request.setCharacterEncoding("utf-8");
    //        获取用户名
            String username=request.getParameter("username");
    //        获取密码
            String password=request.getParameter("password");
    //        调用service层的方法 
            int count=userService.login(username,password);
    //        如果登录成功
            if(count>0){
    //            重定向
                response.sendRedirect(request.getContextPath()+"/index.jsp");
            }else{
    //            如果登录不成功
                request.setAttribute("info","用户名或密码错误");
    //            请求转发
                request.getRequestDispatcher("/login.jsp").forward(request, response);//获取转发器
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    在UserServices 写登录代码

    //    登录
        public int login(String username,String password){
    //        处理异常
            int count=0;
            try {
                count=usersDao.login(username, password);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return count;
        }
    }

    会话技术Cookie

    1.服务器端向客户端发送一个Cookie

    原理图

    1)创建Cookie:

    Cookie cookie = new Cookie(String cookieName,String cookieValue);

    示例:

    Cookie cookie = new Cookie("username","zhangsan");

    那么该cookie会以响应头的形式发送给客户端:

    注意:Cookie不能存中文,必须是字符串

     2)cookie在客户端的持久化时间:

    cookie.setMaxAge(int seconds); ---时间单位:秒

    注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会   被持久化到浏览器的磁盘文件里

    举例:

    cookie.setMaxAge(10*60);

    设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器      自动删除该cookie信息

    3)设置Cookie的携带路径

    cookie.setPath(String path);

    注意:若不设置携带路径,那么该cookie信息会在访问产生该cookie的      web资源所在的路径都携带cookie信息

    示例:

    cookie.setPath("/WEB16");

    代表访问WEB16应用中的任何资源都携带cookie

    cookie.setPath("/WEB16/cookieServlet");

    代表访问WEB16中的cookieServlet时才携带cookie信息

    4)向客户端发送cookie:

    response.addCookie(Cookie cookie);

    创建一个SendCookieServlet

    package com.oracle.demo01;
    //创建Cookie并设置持久化、携带路径、删除Cookie 
    import java.io.IOException;
    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 SendCookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //        创建Cookies对象
            Cookie cookie=new Cookie("goods","naiping");
    //        在发送前 设置持久化事件
            cookie.setMaxAge(60*2);//设置了时间之后 从走这句代码开始,开始计时
    //        设置Cookie携带路径
    //        cookie.setPath("/WEB07/SendCookieServlcet");
    //        访问WEB07下的所有资源都携带
    //        cookie.setPath("/WEB07");
    //        访问服务器上的任何资源都携带
    //        cookie.setPath("/");
    //        发送Cookie
            response.addCookie(cookie);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    5)删除客户端的cookie:

    如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时    间为0的cookie进行覆盖即可

    package com.oracle.demo01;
    //删除Cookie
    import java.io.IOException;
    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 RemoveCookieServlcet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //        删除Cookies对象
            Cookie cookie=new Cookie("goods","naiping");
            cookie.setMaxAge(0);//删除cookie就设置成0 
            response.addCookie(cookie);//发送
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    } 

    2.服务器端怎么接受客户端携带的Cookie

    cookie信息是以请求头的方式发送到服务器端的:

    1)通过request获得所有的Cookie:

    Cookie[] cookies = request.getCookies();

    2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

    for(Cookie cookie : cookies){
    if(cookie.getName().equal(cookieName)){
    String cookieValue = cookie.getValue();
      }
    }
    package com.oracle.demo01;
    //2)遍历Cookie数组,获取Cookie信息显示在控制台
    import java.io.IOException;
    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 GetCookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //        获取Cookie数组
            Cookie[] cookies=request.getCookies();
    //        遍历Cookie数组,通过cookie名获取cookie值
            for(Cookie c:cookies){
                if(c.getName().equals("goods")){
                    System.out.println(c.getValue());
                }
            }
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • 相关阅读:
    android_firewall or Droidwall http://code.google.com/p/droidwall/
    CMDProcessorLibrary
    Pimp_my_Z1
    HoloGraphLibrary
    程序猿正本清源式进化的意义
    UnsatisfiedLinkError: No implementation found for , AndroidStudio使用*.so
    HUNNU-10307-最优分解问题
    Spring声明式事务
    【献给CWNU的师弟】Web篇
    迪科斯彻算法总结
  • 原文地址:https://www.cnblogs.com/zs0322/p/11138604.html
Copyright © 2011-2022 走看看