zoukankan      html  css  js  c++  java
  • Serlvet学习笔记之二—不同页面共享数据

    一共有四种方法实现共享页面共享数据

    1.cookie

    2.sendRedirect

    3.session

    4.隐藏表单提交(form)

    5.ServletContex

    1.cookie:服务器在客户端保存用户信息,比如登录名,密码等,实现网页个性化。

    2.sendRedirect:通过该方法将信息传送给下一个页面。

    优点:传送的信息比较快

    缺点:它只能传送字符串,不能传送对象。

    形式:sendRedirect("welcome"?uanme=admin&pwd=123")

    传递

    res.sendRedirect("welcome?uName="+u+"&uPass="+p);    //传递给welcome页面

    接收

    String u=req.getParameter("uname");    //welcome界面接收

    3.session

      用户访问网站时,服务器在服务器的内存为该浏览器分配一个空间,该空间是被这个浏览器独占的,tomcat中默认存在30min,session的时间可以在tomcat中的web.xml中修改,也可以在程序中修改。

      服务器会给浏览器分配一个唯一的session id借此区分不同的客户端。

         session占用服务器的内存,所以在迫不得已才使用。

    功能:   1.网上商城的购物车

        2.保存登陆的用户信息

        3.将一些数据放在session中,提供给同一个用户的不同页面使用。

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

    用法:

      HttpSession hs=req.getSession(true);              //得到session
       hs.setAttribute("pass","ok");                    //向session添加属性
       String name=hs.getAttribute(String name);        //得到session的某一个属性
       hs.removeAttribute(arg0);                        //删除某一个属性

    实现功能4

    在logincl页面创建session

    //将验证成功的信息写入session
                        HttpSession hs=req.getSession(true);              //得到session
                        hs.setAttribute("pass","ok");                    //向session添加属性
                        hs.setMaxInactiveInterval(20);                     //修改session的存在时间,秒为单位
                        res.sendRedirect("welcome?uName="+u+"&uPass="+p);

    在welcome读取session

    String u=req.getParameter("uName");               //得到sendRedirect传递过来的值
               HttpSession hs=req.getSession(true);              //得到session
               String val=(String)hs.getAttribute("pass");        //得到session的某一个属性
               try {
                if(val==null){
                    res.sendRedirect("login");
                }

    4..隐藏表单:这是最常见的一种方式,也是最简单的。

    在login界面创建

     pw.println("<input type=hidden name=sex value=man><br>");

     5.ServletContext

    保存在服务器端,共享给所有用户。

    生命周期是从创建开始到服务器关闭。

    如果想共享给所有用户,而又不希望保存在数据库中,数据量也不大,可以考虑使用ServletContex实现。

    下面用一个网站计数器来做案列

    package com.demo;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import javax.servlet.http.*;
    public class ServletFileTest1 extends HttpServlet {
        public void init(){
            try {
    //创建一个FileReader
                  FileReader fr=new FileReader("D:\myCount.txt");
                  BufferedReader br=new BufferedReader(fr);
                  String numVal=br.readLine();
                  br.close();   
                  this.getServletContext().setAttribute("vistTimes",numVal);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        
        public void destroy(){
            try {
    //创建一个FileWriter
                FileWriter fw=new FileWriter("D:\myCount.txt");
                BufferedWriter bw=new BufferedWriter(fw);
                bw.write(this.getServletContext().getAttribute("vistTimes").toString());
                bw.close();            
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        
        public void doGet(HttpServletRequest req,HttpServletResponse res){
            try {
                System.out.println("doget...");
                req.setCharacterEncoding("gb2312");
                res.setContentType("text/html;charset=gb2312");
               //在ServletContex中进行++操作
                String times=this.getServletContext().getAttribute("vistTimes").toString();
                this.getServletContext().setAttribute("vistTimes",(Integer.valueOf(times).intValue()+1)+"");
                PrintWriter pw=res.getWriter();
                pw.println("访问次数:"+this.getServletContext().getAttribute("vistTimes").toString());  
           pw.println("您的IP地址是: "+req.getRemoteAddr()+"<br>");
                pw.println("您的机器名是: "+req.getRemoteHost()+"<br>"); }
    catch (Exception e3) { e3.printStackTrace(); } } public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req, res); } }
  • 相关阅读:
    c# base64及MD5工具类
    c# dateTime格式转换为Unix时间戳工具类
    c# 金钱大写转小写工具类
    c# bitmap的拷贝及一个图像工具类
    C# DataTable映射成Entity
    Kubernetes---Service(SVC)服务--ingress api
    Kubernetes---Service(SVC)服务
    为网站文字前面添加图标 在线调用 Font Awesome 字体icon小图标 美化网站
    [转]office 2016 4合1/3合1 专业版 增强版 精简绿色安装版
    [转]数据恢复 文件恢复工具 DiskGenius v4.9.1 绿色专业版及单文件
  • 原文地址:https://www.cnblogs.com/zydev/p/5372877.html
Copyright © 2011-2022 走看看