• servlet 学习笔记(三)


    同一用户的不同页面共享数据有以下四种方法:

    1.sendRedirect()跳转

    2.session技术

    3.隐藏表单提交(form)

    4. cookie技术(小甜饼)

    ----------------------1.sendRedirect()跳转---------------------------

    通过该方法可以将一个页面的信息传送给另外的页面,比如:sendRedirect(“welcome?uname=aaa”);

    接收页面采用这种格式接收参数:String u=req.getParameter("uname");

    优点:传送信息的速度比较快

    缺点:它只能传送字符串,而不能传送一个对象;在地址栏会显示传递的参数,不适合敏感信息的传递。

      sendRedirect(“welcome?uname=aaa”);

    注意点:

      1.welcome代表你要跳转的那个servlet的url

      2.servlet url名和变量之间有个?

      3.如要传递两个以上的值,它们之间要用符号&分开,比如sendRedirect(“welcome?uname=aaa&passwd=123”);

          另一种方式:

          String u=req.getParameter("username"); //从其他页面获取参数
          String p=req.getParameter("password"); //从其他页面获取参数
          res.sendRedirect("wel?uname="+u+"&upassword="+p); //类似于拼接的方式,灵活传递参数

      4.如果传递的是中文,那你将得到乱码,需要处理一下res.setContentType(“text/html,charset=gbk”);

      5.在接收页面获取用sendRedirect()方式传递的参数:

          String name=req.getParameter("uname");
          String password=req.getParameter("upassword");

    ----------------------2.session技术------------------------------------

    什么是session?

    当用户打开浏览器,访问某个网站时,服务器就会在服务器的内存为该浏览器(特别注意,这边并不是指某台电脑,换句话说,一台电脑上使用双击的方式打开浏览器多会创建不同的session)分配一个空间,该空间被这个浏览器独占。这个空间就是session空间,该空间中的数据默认存在时间为30min,你也可以修改该值。

                                                                                                                                               

                                                                                                                                                                                                                                                                                     

    如上图(a)所示:服务器分配给A、B、C客户端的session空间分别为tomcat服务器中的A、B、C。              

    如何理解session?如上图(b)所示:

    可以把session看做一张表,这张表有两列,而表有多少行理论上没有限制,每一行就是session的一个属性。每个属性包含有两个部分,一个是该属性的名字String,另外一个是它的值Object。

    session可以用来做什么?

      1.网上商城中的购物车

      2.保存登陆用户的信息

      3.将某些数据放入到session中,供同一用户的各个方面使用

      4.防止用户非法登陆到某个页面

      ……

    如何使用session?

    1.得到session,没有就创建session

      HttpSession hs=request.getSession(true);

    2.向session添加属性

      hs.setAttribute(String name,Object val);如:hs.setAttribute("hsname",u);

    3.从session得到某个属性

      String name=hs.getAttribute(String name);如:String name=(String)hs.getAttribute("hsname");

    说明:将类型为Object的属性值强制转换为String类型。

    4.从session中删除掉某个属性

      hs.removeAttribute(String name);

    5.注销session中的内容(比较安全的一种方式),一次性删除所有session的值;

      ht.setMaxInactiveInterval(0);

    说明:移除指定的session采用这种方式:ht.removeAttribute("name");

    session的注意事项:

    1.session中属性存在的默认时间是30min,你也可修改它存在的时间:

    (a)修改web.xml (以分钟为单位) ,具体操作如下:

           打开.... \Tomcat 6.0\conf目录下面的web.xml配置,找到session相关的配置:

    ....

    <!-- ==================== Default Session Configuration ================= -->
      <!-- You can set the default session timeout (in minutes) for all newly   -->
      <!-- created sessions by modifying the value below.                       -->

     <session-config>
            <session-timeout>30</session-timeout>
        </session-config>

    ....

    说明:这边是以分钟为单位,存活时间30分钟,可以根据需要进行修改。

    注意:以上修改是针对tomcat目录下的所有Web应用程序,在实际运用中可以将上面的代码复制到特殊要求的web应用程序的web.xml中并根据实际需要进行配置。

    (b)在程序中修改(以秒为单位),如果值为负值,则session永远不超时,具体代码如下:

          //得到session
          HttpSession hs=req.getSession(true);
          //修改session的存在时间,存活时间5秒
          hs.setMaxInactiveInterval(5);

    2.上面说的这个30min指的是用户的发呆时间,而不是累计时间

    3.当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的session id,并以此来区分不同的浏览器(即客户端)

    4.因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用

    ----------------------3.隐藏表单提交(form)---------------------------

    隐藏表单

    这是最常见的一种方式,也是最简单的,但有时该技巧非常管用,形如:

    <form action=login>

    <input type=hidden name=id value=b>//传递隐藏信息

    <input type=text name=name value=d>//传递显示的信息

    </form>

    通过隐藏表单,我们也可以将一个页面信息,传递给另外的页

     接收页面获取表单提交的信息:

    String id=req.getParameter("id");

    String id=req.getParameter("name");

    ----------------------4. cookie技术(小甜饼)----------------------------

    什么是cookie?

    服务器在客户端保存用户的信息,比如登录名、密码……就是cookie这些信息就像是小甜饼一样,数据量并不大,服务器端在需要的时候可以从客户端读取

    cookie可以用来做什么?

    1.保存用户名、密码,在一定时间不用重新登录

    2.记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么

    3.网站的个性化,比如定制网站的服务、内容

                                                                  cookie的工作原理

    cookie使用

    1.cookie有点像一张表,分两列,一个是名字,一个是值,数据类型都是String

    2.如何创建一个cookie(在服务器端创建的):Cookie c=new Cookie(String name, String val);

       

     1 //如何创建cookie案例
     2 
     3 package com.tsinghua;
     4 
     5 
     6 import javax.servlet.http.*;
     7 import java.io.*;
     8 
     9 public class CookieTest1 extends HttpServlet{
    10     
    11     //处理get请求
    12     
    13 public void doGet(HttpServletRequest req,HttpServletResponse res)
    14 {
    15         
    16    try {
    17             
    18            res.setContentType("text/html;charset=gbk");
    19            PrintWriter pw=res.getWriter();
    20           //当用户访问该servlet时, 就将信息创建到该用户的cookie中
    21         
    22         //1. 现在服务器端创建一个cookie
    23           Cookie myCookie=new Cookie("color1","red");
    24             
    25         //2. 该cookie存在的时间,如果你不设置存在时间,那么该cookie将不会保存
    26 
    27         myCookie.setMaxAge(30);
    28         
    29        //3. 将该cookie写回到客户端
    30         res.addCookie(myCookie);
    31             
    32           pw.println("已经创建了cookie");
    33        }
    34        catch (Exception ex) 
    35         {
    36             ex.printStackTrace();
    37          }                
    38     
    39     }
    40 
    41 }
    View Code

      

    3.如何将一个cookie添加到客户端response.addCookie(c);

     4.如何读取cookie(从客户端读到服务器)request.getCookie();

       

     1 //如何读取cookie案例
     2 
     3 package com.tsinghua;
     4 
     5 
     6 import javax.servlet.http.*;
     7 import java.io.*;
     8 
     9 public class CookieTest2 extends HttpServlet{
    10     
    11     //处理get请求
    12     
    13     public void doGet(HttpServletRequest req,HttpServletResponse res){
    14         
    15         
    16         try {
    17             
    18 
    19             res.setContentType("text/html;charset=gbk");
    20         
    21             PrintWriter pw=res.getWriter();
    22         
    23             //从客户端得到所有cookie信息
    24             Cookie [] allCookies=req.getCookies();
    25         
    26             int i=0;
    27             //如果allCookies不为空...
    28             if(allCookies!=null){
    29             
    30                 //从中取出cookie
    31                 for(i=0;i<allCookies.length;i++){
    32                 
    33                     //依次取出
    34                     Cookie temp=allCookies[i];
    35                 
    36                     if(temp.getName().equals("color1")){
    37                         
    38                         //得到cookie的值
    39                         String val=temp.getValue();
    40                         
    41                         pw.println ("color1="+val);
    42                         break;
    43                         
    44                     }
    45                 }
    46                 if(allCookies.length==i){
    47                     
    48                     pw.println("cookie 过期");
    49                 }
    50                         
    51             }else{            
    52                 pw.println ("不存在color1这个cookie/或是过期了!");
    53             }    
    54         
    55         }
    56         catch (Exception ex) {
    57             
    58             ex.printStackTrace();
    59         }
    60 
    61     }
    62 }
    View Code

    5.删除cookie

     1 /**
     2  * @(#)CookieTest3.java
     3  *
     4  *
     5  * @author 
     6  * @version 1.00 2013/10/13
     7  */
     8 //如何删除cookie案例
     9 package com.tsinghua;
    10 import javax.servlet.*;
    11 import javax.servlet.http.*;
    12 import java.io.*;
    13 
    14 public class CookieTest3 extends HttpServlet{
    15 
    16     public CookieTest3() {
    17     }
    18     
    19      //    重写doGet方法
    20     //    req:用于向客户端(浏览器)获取信息
    21     //    res:用于向客户端(浏览器)返回信息
    22     
    23     public void doGet(HttpServletRequest req,HttpServletResponse res)
    24     {
    25         try {
    26                 res.setContentType("text/html ; charset=gbk ");
    27                 PrintWriter pw=res.getWriter();
    28                 //从客户端得到所有cookie信息
    29                 Cookie [] allCookies=req.getCookies();
    30                 int i=0;
    31                 //如果allCookies不为空...
    32                 if(allCookies!=null)
    33                 {         pw.println("allCookies的长度:"+allCookies.length+"<br>");         
    34                     //从中取出cookie
    35                     for(i=0;i<allCookies.length;i++)
    36                     {    
    37                         //依次取出
    38                         Cookie temp= allCookies[i];
    39                         pw.println("allCookies["+i+"]的属性名为:"+allCookies[i].getName()+"属性值为:"+allCookies[i].getValue()+"<br>");
    40                         if(temp.getName().equals("color1"))
    41                         {
    42                             //得到cookie的值
    43                             String val=temp.getValue();                        
    44                             pw.println ("已经找到,color1="+val);
    45                         
    46                             //将该cookie删除
    47                             temp.setMaxAge(0);
    48                         //    temp.setPath("/");   这句可不要
    49                             res.addCookie(temp);
    50                             pw.println("时间:"+temp.getMaxAge());
    51                         //    pw.println("删除了color这个cookie");
    52                             pw.println ("删除后color1="+temp.getValue());
    53                         //上面一句还会输出相应的值,但是通过google浏览器查看(F12—Console—s输入:document.cookie回车—结果为空)
    54                         //    break;
    55                         }
    56                         
    57                     }
    58                     
    59              }    
    60              
    61             }
    62             catch (Exception ex) {
    63                 ex.printStackTrace();
    64             }
    65             
    66         
    67     }
    68     
    69     //    重写doPost方法
    70     //    req:用于向客户端(浏览器)获取信息
    71     //    res:用于向客户端(浏览器)返回信息
    72      public void doPost(HttpServletRequest req,HttpServletResponse res)
    73     {
    74         this.doGet(req,res);
    75     }
    76     
    77 }
    View Code

    cookie其它说明

    1.可以通过IE——工具——internet选项——隐私——高级来启用或是禁用cookie

    2.由于cookie的信息是保存在客户端的,因此安全性不高

    3.cookie信息的生命周期可以在创建时设置(比如30s),从创建那一时刻起,就开始计时,到时该cookie的信息就无效了

    -------------------------cookie vs session-----------------------------

    1.存在的位置

    cookie保存在客户端,session保存在服务器端

    2.安全性

    比较而言,cookie的安全性比session要弱

    3.网络传输量

    cookie通过网络在客户端与服务器端传输,而session保存在服务器端,不需要传输

     --------------------------------------------------------------------------

    源代码下载点我

  • 相关阅读:
    @黎耀天 , 你的 论文 里 是不是 说 电场 磁场 对 光 有 作用 ?
    《如何彻底搞懂狭义相对论里的“光速不变”?》 回复
    宇宙际理论该如何理解?
    无工质 飞行装置
    《李秉泉的心里话》 回复
    《与K歌之王的交流》 回复
    我对 李炳铁 和 李秉泉 两位老师 的 学术成果 的 评价
    知乎 : 为什么美国中小学生学的数学比我们简单,美国人却还能做出超级牛的东西?
    @bnllm 快把 0, 1, 1, 无穷, 无穷, 阶乘, 指数 玩坏了
    让 我们 来 测量 普朗克常数 和 万有引力常数
  • 原文地址:https://www.cnblogs.com/bkygg/p/3363079.html
Copyright © 2020-2023  润新知