浅谈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");。
浅谈Servlet(二)的更多相关文章
- Android开发-浅谈架构(二)
写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...
- 浅谈Servlet(三)
一.三种作用域 作用域:web开发中用于存储和获得数据. 1.request 一次请求有效,在forward跳转时可用request作用域传递数据. 2.session client不变,sessio ...
- 浅谈Servlet(一)
一.Servlet技术引言 1.什么是servlet a.Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式 ...
- 浅谈servlet
刚开始接触servlet的时候,其实不是太理解servlet的,后来经过慢慢摸爬滚打式的的学习,有了一点自己的理解. servlet的产生还要从Java和HTTP说起: Java的servletAPI ...
- 浅谈servlet版本
说白话,eclipseJ2EE版本新建一个web项目后,在IDE中的项目根目录下会看到2.3,2.4,2.5,3.0,3.1....据说最新的4.0在路上,已经有草案了,很期待ing. 360百科是这 ...
- Qt浅谈之二十七进程间通信之QtDBus
一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性. DB ...
- Qt浅谈之二十App自动重启及关闭子窗口
一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...
- Qt浅谈之二十App自动重启及关闭子窗口(六种方法)
一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...
- 浅谈Struts2(二)
一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...
随机推荐
- Windows 8 DirectX 和Xaml UI 混合处理方案
原文 http://www.cnblogs.com/chenkai/archive/2012/11/29/2794983.html [如果不想读这么长问题描述和通用的解决方案. 可以直接skip 这段 ...
- nova的wsgi介绍【WIP】
有关openstack的所有的帖子. https://www.ustack.com/blog/openstack_hacker/#Nova_Workflow 网上已经很多的分析文章了: http:// ...
- android 回调
调函数(callback Function),顾名思义,用于回调的函数. 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用 ...
- Tomcat从零开始(十一)WebappLoader概述
好的,我们先看看这个WebappLoader到底在开始的时候做了什么,先看看他的start()方法. public void start() throws LifecycleException { / ...
- hdu1114Piggy-Bank(DP完全背包)
题意:在ACM可以做任何事情,必须准备和预算获得必要的财政支持.这次行动的主要收入来自不可逆绑定金钱(IBM).背后的想法很简单.每当一些ACM成员有任何小的钱,他把所有的硬币和成小猪银行抛出.你知道 ...
- PS学习
PS快捷键大全(转自UI中国PS教程) 摆脱鼠标流就靠这张图了!!!! 查看图像 使用导航器查看图像 选择窗口-->导航器 菜单命令 使用缩放工具查看图像 ctrl++ 以画布大小放大图像 ct ...
- Socket.io在线聊天室
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- spring aop简单日志实例
转载自:http://www.blogjava.net/laoding/articles/242611.html 一直就用spring的IOC,遗憾spring的另一重要组成部分AOP却没用过,所以近 ...
- 寻找所有javaee官方文档的方法
所有跟java有关的首先要去oracle官网. 所有文档都放在: Oracle Technology Network 即:著名的OTN网站 链接在首页的最后一个标签: 侧面就是documentions ...
- socket(套接字)
客户端: 创建套接字(socket) 连接服务器(connect) 通信(send,recv或者write,read) 关闭套接字(closesocket) 示例代码: int main(int ar ...