Servlet浅谈(二)

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");。              

时间: 2024-10-19 15:25:41

Servlet浅谈(二)的相关文章

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

Servlet浅谈(三)

一.三种作用域 作用域:web开发中用于存储和获得数据. 1.request 一次请求有效,在forward跳转时可用request作用域传递数据. 2.session client不变,session不变.用于标记用户状态.存储用户数据.验证码.购物车等. 3.ServletContext web应用不变,ServletContext不变,ServletContext代表的是整个web应用.一般用于储存全web单例的重量级资源. ServletContext对象通过session获得,Serv

浅谈二维线段树

一.定义 二维线段树,即用线段树维护一个矩阵 有两种实现方式: 1.原一维线段树的基础上,每一个节点都是一个线段树,代表第二维 下图是一个4*4矩阵 2.四分法转化为一维线段树 两种方法的空间复杂度都是n*n*log^2 第一种方法单次操作的时间复杂度是log^2,第二种方法最差可以退化到n 一维线段树的标记思想,在第一种方法中,可以用于二维线段树的第二维,不可以用于二维线段树的第一维 第二种方法本质上是四叉的一维线段树, 在此只介绍第一种方法 二.基本操作 1.单点修改+矩阵查询 单次访问一个

浅谈二维线段树的几种不同的写法

目录 参考文献 参考文献 暴力写法 二叉树 四叉树 树套树写法1 参考文献 四叉树 树套树 以及和zhoufangyuan巨佬的激烈♂讨论 参考文献 大家好我口糊大师又回来了. 给你一个\(n*n\)矩阵,然后让你支持两种操作,对子矩阵加值和对子矩阵查和. 暴力写法 对于每一行开一个线段树,然后跑,时间复杂度\(n^2logn\). 优点: 代码较短 较为灵活 缺点: 常数大 容易卡 二叉树 我们对于平面如此处理,一层维护横切,一层竖切. 当然,这个做法也是\(n^2logn\)的,卡法就是任意

关于自动化学习浅谈二

什么是自动化测试?自动化测试的原理是什么?常用哪些工具?常用哪些框架?工具的原理又是什么?自动化如何学习?自动化的优点与缺点是什么?价值在哪里?学习自动化测试要了解与掌握哪些内容?哪些项目适合自动化测试呢? 想学习自动化测试首先得明白以上一些问题,不然学着只能知其然,不知其所以然. 1,什么是自动化测试?优缺点是什么?价值在哪里? 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程. 从它的定义中是不是所有人为驱动的测试都可以转化为机器执行呢? 答案是否定的.这也就带出了自动化的局限性.

salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇

上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件的param,此项设置不会修改已经被触发的事件.我们在创建事件的时候可以同时声明attribute,在我们fire事件以前,可以对这些attribute设置值,其中key为attribute的name,value部分即为attribute的value. 2.setParams (Object con

转: 浅谈C/C++中的指针和数组(二)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量

浅谈C中的数组和指针(二)

原文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 在原文基础上增加自己的理解作为修改 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&

浅谈DevExpress<二>:设计一个完整界面(2)

下面来把剩下的工作做完,换肤功能昨天已近讨论过,今天就不重复了.首先建立三个全局变量,一个存放文件路径,一个存放数据,一个存放过滤条件. string DBFileName; DataView dataView; string[] filter = new string[3]; 取得数据并绑定到表格中: DBFileName = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, "Products.xml&