Servlet中的request对象、重定向和转发的差别(6)
1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时。HTTP请求头中的全部信息都封装在这个对象中。我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息。
2.request的经常用法
(1)获得客户机信息
getRequestURL方法返回client发出请求时的完整URL。(
比如:url:http://localhost:8080/Summer_Exercise6/Demo1)
getRequestURI方法返回请求行中的资源名部分。
(
比如:uri:/Summer_Exercise6/Demo1)
getQueryString 方法返回请求行中的參数部分。地址栏中?后面的參数(
比如:query:name=wwh&age=12)
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于 Servlet的路径之后和查询參数之前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络port号。
getLocalAddr方法返回WEBserver的IP地址。
(127.0.0.1)
getLocalName方法返回WEBserver的主机名。(虚拟主机名:www.wenhao.com)
(2)获得客户机请求头
getHeader(string name)方法:String
getHeaders(String name)方法:Enumeration
getHeaderNames()方法
(3)获得客户机请求參数(client提交的数据)
getParameter(String)方法
getParameterValues(String name)方法
getParameterNames方法+BeanUtils框架
3.request的常见应用
(1)防盗链(下载文件,必须从指定站点进入,否则不同意下载文件。判段某个页面来自于何方,即referer请求头)
(2)各种表单输入项数据的获取
text、password、radio、checkbox、
file、select、textarea、 hidden、
(3)POST方式请求參数的中文乱码问题
GET方式请求參数的中文乱码问题(JSP)
(4)request对象实现请求转发:请求转发指一个web资源收到client请求后,通知server去调用另外一个 web资源进行处理。
(5)请求转发的应用场景:MVC设计模式
(6)request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象。调用这个对象的forward方法能够实现请求转发。
(7)request对象同一时候也是一个域对象。开发者通过request对象在实现转发时。把数据通过request对象带给其他web资源处理。
setAttribute方法
getAttribute方法
removeAttribute方法
getAttributeNames方法
4.request要注意的地方:
(1).转发是通过RequestDispatcher对象的forward(request,response)方法完毕的
(2).forward()方法之前的输出,假设是输出到缓冲区,再转发到其它Servlet。那么原缓冲区的数据忽略不计
(3).forward()方法之前的输出。假设真正输出到浏览器,再转发到其它Servlet。再转发到其它Servlet代码忽略不计
(4).forward()方法之前的输出,假设是对响应头的设置。会保留到转发的其它Servlet中
5.重定向和转发差别
(1).转发仅仅能相对于当前web应用而言。不能转发到其他web应用
重定向能够在当前web应用之外的其他web应用重写向资源
(2).转发/表示当前web应用
重定向/表示webserver的根文件夹。即webapps文件夹
(3).转发时。浏览器地址栏不变
重定向时,浏览器地址栏改变
(4).转发是服务端的内部行为,浏览器不知
重定向是浏览器和服务端的共同行为。浏览器必知
(5).转发时二个Servlet共享request域对象
重定向时二个Servlet独享request域对象
(6).request具有二义性:
a>请求对象
b>域对象
6.getRequestDispatcher()和sendRedirect()的差别
(1).request.getRequestDispatcher()是请求转发,前后页面共享一个request
;
response.sendRedirect()是又一次定向 前后页面不是一个request .
(2).RequestDispatcher.forward()是在server端执行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完毕.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”。
而HttpServletResponse.sendRedirect()则不是。
(3).ServletContext.getRequestDispatcher(String url)中的url仅仅能使用绝对路径;
而ServletRequest.getRequestDispatcher(String url)中的url能够使用相对路径。
由于ServletRequest具有相对路径的概念。而ServletContext对象无次概念。
7.RequestDispatcher对象从client获取请求request。并把它们传递给server上的servlet,html或jsp。
它有两个方法:
(1)void forward(ServletRequest
request, ServletResponse response)
用来传递request的,能够一个Servlet接收request请求。还有一个Servlet用这个request请 求来产生response。
request传递的请求。response是client返回的信息。forward要在response到达client之前调用,也 就是 before response body output
has been flushed。假设不是的话,它会报出异常。
(2).void include(ServletRequest request, ServletResponse response)
用来记录保留request和response,以后不能再改动response里表示状态的信息。
8.假设须要把请求转移到另外一个Web App中的某个地址。能够按以下的做法:
(1). 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
(2). 调用ServletContext.getRequestDispatcher(String url)方法。
eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,respons);
Servlet中的request对象、重定向和转发的差别(6)的更多相关文章
- 重温Servlet学习笔记--request对象
request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...
- request对象实现请求转发
request对象实现请求转发,请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理.request对象提供了一个getRequestDispatcher方法,该方法返 ...
- JavaWeb(一)Servlet中的request与response
一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...
- 【转载】Servlet中的request与response
一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...
- 此时servlet中的request和我们在页面jsp中的request 是同一个request.
在tomcat容器启动的时候,jsp页面的内置对象request,response,同样是依赖于tomcat容器中的servlet-api.jar包,这个jar包和我们在web项目中的jar包是一样的 ...
- servlet中使用request.getHeader("referer")获取页面从哪跳转过来的
问题 servlet中使用request.getHeader("referer")获取页面从哪跳转过来的,利用这个方法可以判断网页是否正常登录.我做了一个javaweb小项目,其中 ...
- 在SpringMVC中获取request对象
1.注解法 @Autowired private HttpServletRequest request; 2. 在web.xml中配置一个监听 <listener> <listen ...
- 在SpringMVC中获取request对象的几种方式
1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...
- 如何在SpringMVC中获取request对象
1.注解法 @Autowired private HttpServletRequest request; <listener> <listener-class> org.spr ...
随机推荐
- HDU 6119 小小粉丝度度熊 (区间去重)【尺取】
<题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...
- 005.Ceph文件系统基础使用
一 Ceph文件系统 1.1 概述 CephFS也称ceph文件系统,是一个POSIX兼容的分布式文件系统. 实现ceph文件系统的要求: 需要一个已经正常运行的ceph集群: 至少包含一个ceph元 ...
- node.js监听文件变化
前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...
- XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件
XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件 开发者可以在指定的路径中找到复制的数据库文件,具体的操作步骤如下: (1)单击Mac电脑中Finder菜单中的“前往”|“前 ...
- 蓝桥杯 ——无重复组合——C++
问题描述: 求任意长度的(ABCD.....)全部n=0,1,2 ....组合情况(n小于等于串的长度) 解决思路: 如果串的长度固定,n的值固定循环嵌套 在这里以深度优先形成一棵树,如下图: 源代码 ...
- CC NOV17
PERPALIN 可以考虑最后的状态可以是两个非常长而且相同的前缀和后缀中间再加一小段,然后就是不断缩小区间至出解 CHEFHPAL 发现当字符集大于等于3的时候abc循环一定是没有大于1的回文子串的 ...
- Java笔记(七)HashMap和HashSet
HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> { int size();//查看Map中的键值对个数 boolean isEmp ...
- 20172310 实验四 Android程序设计
20172310 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王志 ...
- (转)nginx uwsgi wsgi django 这些东西究竟是什么关系
有太多的文章告诉我们nginx uwsgi django 这些东西怎么用了,太多的人知道这些东西的怎么使用,怎么配置,怎么优化,但是还是有一部分人比如我这种水货不知道这些东西到底是啥,为啥一个项目的发 ...
- xcode升级至9.0之后,新建xib报错: Safe Area Layout Guide Before IOS 9.0
直接翻译是:iOS 9.0前安全区域布局指南. 字面意思就是safe area布局应用在iOS 9之前的版本上了. 解决方法: 1,我们可以把safe area勾掉,不用safe area布局,如下图 ...