1、forward(请求的转发)和redirect(重定向)

  目的:都是为了把一个Servlet的功能,拆分到多个Servlet中,便于后续代码的维护。

  a、forward(请求转发)

    (1)、如何在多个Servlet之间跳转

        request.getRequestDispatcher("/url-pattern").forward(request,response)。

        ps、路径只用填写web.xml中配置的sevlet路径即可

    (2)、request作用域传递数据

        存数据:

        request.setAttribute("name",object);

        取数据:

        request.getAttribute("name");  返回该对象。

        ps、可以传递一切需要传递的内容(基本类型,对象,集合)。

  b、redirect(重定向)

    (1)、如何在多个Servlet之间跳转

        response.sendRedirect("/webapp_name/url-pattern");

        ps、路径需要填写全路径,即:项目名称+serlvet路径名称。

    (2)、传递数据

        传数据:

        重定向是没办法用request作用域传递参数的,因为request作用域为同一个请求下。而重定向是另发起一个请求。所以如果非要传递参数,只能用地址栏的方式,即:"/webapp_name/url-pattern?name=lee"。

        取数据:

        request.getParameter("name");

        ps、地址栏传数据,只能传字符串类型的。

  c、forward和redirect的区别

    forward:一次请求,地址栏不变,可用request作用域传递数据。

    redirect:两次请求,地址栏改变,不能用request作用域传递数据。

2、如何保持用户状态(cookie和HttpSession)

  ps、http协议为无状态的协议,天生不能记录用户的状态。

  a、cookie技术:

    原理:client第一次访问tomcat的时候,server会生成相应的Cookie对象,其中存有一个key-value,记录了用户信息。然后将该Cookie对象复制一份传给client,client则存在该用户的硬盘上,下次client再次访问该server的时候,会自动带着该server的cookie,这样改server就可以识别用户了(储存cookie跟携带cookie的过程由client自动完成,即浏览器)。

    ps、网站只识别自己发放cookie。

    (1)、cookie的开发:

      创建cookie并发送client的过程:

      

Cookie c = new Cookie("key","value");
c.setMaxAge();    //设置cookie的最大存活时间
                        //大于0
                        //等于0,立即销毁
                        //小于0,浏览器关闭之后销毁
response.addCookie(c);    //将cookie放入到Response对象中,传给client

    (2)、Cookie的问题:

      cookie不安全、cookie被用户手动禁用、cookie存储的数据量为4KB、cookie默认不可以存储中文、不同的浏览器cookie在操作系统中存放的位置不同。

    (3)、结论:

      不能将核心功能交给cookie来完成,cookie完成一些可有可无的功能。

  b、HttpSession技术:

    接口为:javax.servlet.http.HttpSession  tomcat负责实现功能

    原理:server为每一个用户浏览器创建对应的session,同一个client浏览器不管发送几次请求,都可以找到自己对应的session,并可以获取session中存储的数据。

    (1)、session开发:

      获得HttpSession:

      HttpSession session = request.getSession();   //通过request对象来获得

      利用session作用域存储对象:

      session.setAttribute("key",Object);

      session.getAttribute("key");

      ps、session作用域可存所有内容(基本类型、对象、集合)。

        session作用域与request作用域对比:

          request:一次请求有效,请求变了,request作用域也变了。

          session:一个浏览器有效,浏览器不关闭,则session作用域不变。

      session的销毁:

      session.invalidate();  //手工调用

      tomcat决定session的存活时间,默认30分钟(可通过修改/conf/web.xml文件来设置)。

    (2)、session的应用场景:

      验证码、网站记录用户登录状态、购物车

      ps、session的实现原理:

        session都有一个唯一标示,sessionId,可通过代码session.getId()来查看。在服务端创建session之后(session只在server中储存),会自动创建一个存储有sessionid的cookie,并且发送给client,下次client再次访问server的时候,带着存有sessionid的cookie来,server通过sessionid从而找到该用户的session作用域。

        那么问题来了,cookie被禁用该如何处理?

        url重写可解决该问题,response.encoderUrl("url");。              

浅谈Servlet(二)的更多相关文章

  1. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  2. 浅谈Servlet(三)

    一.三种作用域 作用域:web开发中用于存储和获得数据. 1.request 一次请求有效,在forward跳转时可用request作用域传递数据. 2.session client不变,sessio ...

  3. 浅谈Servlet(一)

    一.Servlet技术引言 1.什么是servlet a.Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式 ...

  4. 浅谈servlet

    刚开始接触servlet的时候,其实不是太理解servlet的,后来经过慢慢摸爬滚打式的的学习,有了一点自己的理解. servlet的产生还要从Java和HTTP说起: Java的servletAPI ...

  5. 浅谈servlet版本

    说白话,eclipseJ2EE版本新建一个web项目后,在IDE中的项目根目录下会看到2.3,2.4,2.5,3.0,3.1....据说最新的4.0在路上,已经有草案了,很期待ing. 360百科是这 ...

  6. Qt浅谈之二十七进程间通信之QtDBus

    一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性.        DB ...

  7. Qt浅谈之二十App自动重启及关闭子窗口

    一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...

  8. Qt浅谈之二十App自动重启及关闭子窗口(六种方法)

    一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...

  9. 浅谈Struts2(二)

    一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...

随机推荐

  1. AndroidAutoLayout 屏幕适配

    https://github.com/hongyangAndroid/AndroidAutoLayout

  2. poj1862---变形虫(贪心)

    题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2) 求怎么结合,能使最后的一只虫质量最小 分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小 4 3 2 1 ...

  3. openstack 采用conductor的原因

    供参考. Tan0同学给我的解释: 两个原因 一个是为了isolation做准备 因为升级主要就是升DB的schema 如果让compute直接读写DB,那每次升级都得升compute 现在隔离开之后 ...

  4. oracle job 定时执行 存储过程

    oracle job 定时执行 存储过程   一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a ...

  5. UberX及以上级别车奖励政策(优步北京第一组)

    优步北京第一组: 定义为2015年6月1日凌晨前(不含6月1日)激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机( ...

  6. javascript关键字加亮加连接

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/str ...

  7. 【转】Python3.x移除了callable内建函数

    原文地址:http://www.cnblogs.com/elvisxu/archive/2010/10/26/1861958.html 最近学习Python的时候,在Python3下跑<Dive ...

  8. cocos2d-x3.6 连连看随机地图实现

    我的博客:http://blog.csdn.net/dawn_moon 这一节来讲地图初始化实现. 连连看地图初始化有非常多实现方式,大概会有下面几种: 每一格的位置随机取图片放上去 随机取图片放到随 ...

  9. C语言的复合文字

    假设需要向一个带有int型参量的函数传递一个值,这时可以传递一个int型常量,也可以传递一个int型的变量.在C99标准之前,数组参数情况于现在不一样,没有所谓的数组常量可供传递,而在C99中增加了复 ...

  10. VBA 开发学习--基础语法2

    VBA中的运算符 算数运算符及其作用 + 求两个数的和 -  求两个数的差:求一个数的相反数 *  求两个数的积 /   求两个数的商(保留小数位   5/2=2.5) \   整除 (保留整数位  ...