JavaWeb-Request对象

JavaWeb-Request对象

一、Request:

Request代表请求对象,其中封装了对请求中具有请求行、请求头、实体内容的操作的方法

ServletRequest – 通用request,提供一个request应该具有的最基本的方法

|

|–HttpServletRequest – ServletRequest的孩子,针对http协议进行了进一步的增强

1.获取客户机信息

getRequestURL方法返回客户端发出请求完整URL

getRequestURI方法返回请求行中的资源名部分,在权限控制中常用

getQueryString 方法返回请求行中的参数部分

getRemoteAddr方法返回发出请求的客户机的IP地址

getMethod得到客户机请求方式

getContextPath 获得当前web应用虚拟目录名称,特别重要!!!,

工程中所有的路径请不要写死,其中的web应用名要以此方法去获得。

2.获取请求头信息

getHeader(name)方法 — String ,获取指定名称的请求头的值

getHeaders(String name)方法 — Enumeration ,获取指定名称的请求头的值的集合,因为可能出现多个重名的请求头

getHeaderNames方法 — Enumeration ,获取所有请求头名称组成的集合

getIntHeader(name)方法 — int ,获取int类型的请求头的值

getDateHeader(name)方法 — long(日期对应毫秒) ,获取一个日期型的请求头的值,返回的是一个long值,从1970年1月1日0时开始的毫秒值

*实验:通过referer信息防盗链

String ref = request.getHeader(“Referer”);

if (ref == null || ref == “” || !ref.startsWith(“http://localhost“)) {

response.sendRedirect(request.getContextPath() + “/homePage.html”);

} else {

this.getServletContext().getRequestDispatcher(“/WEB-INF/Hello.html”).forward(request, response);

}

4.获取请求参数时乱码问题:

浏览器发送的请求参数使用什么编码呢?当浏览器打开网页时使用什么编码,发送就用什么编码。

服务器端获取到发过来的请求参数默认使用ISO8859-1进行解码操作,中文一定有乱码问题

对于Post方式提交的数据,可以设置request.setCharacterEncoding(“gb2312”);

来明确指定获取请求参数时使用编码。但是此种方式只对Post方式提交有效。

对于Get方式提交的数据,就只能手动解决乱码:

String newName = new String(name.getBytes(“ISO8859-1”),”gb2312”);此种方法对Post方式同样有效。

在tomcat的server.xml中可以配置http连接器的URIEncoding可以指定服务器在获取请求参数时默认使用的编码,

从而一劳永逸的决绝获取请求参数时的乱码问题。

也可以指定useBodyEncodingForURI参数,令request.setCharacterEncoding也对GET方式的请求起作用,

但是这俩属性都不推荐使用,因为发布环境往往不允许修改此属性。

5.利用请求域传递对象

生命周期:request在service方法调用之前由服务器创建,传入service方法。整个请求结束,request生命结束。

作用范围:整个请求链。

作用:在整个请求链中共享数据,最常用的:

在Servlet中处理好的数据要交给Jsp显示,此时参数就可以放置在Request域中带过去。

6.request实现请求转发

ServletContext可以实现请求转发,request也可以。

在forward之前输入到response缓冲区中的数据,如果已经被发送到了客户端,forward将失败,抛出异常

在forward之前输入到response缓冲区中的数据,但是还没有发送到客户端,forward可以执行,

但是缓冲区将被清空,之前的数据丢失。注意丢失的只是请求实体中的内容,头内容仍然有效。

在一个Servlet中进行多次forward也是不行的,因为第一次forward结束,

response已经被提交了,没有机会再forward了

总之,一条原则,一次请求只能有一次响应,响应提交走后,就再没有机会输出数据给浏览器了。

7.RequestDispatcher进行include操作

forward没有办法将多个servlet的输出组成一个输出,因此RequestDispatcher提供了include方法,

可以将多个Servlet的输出组成一个输出返回个浏览器

request.getRequestDispatcher(“/servlet/Demo17Servlet”).include(request, response);

response.getWriter().write(“from Demo16”);

request.getRequestDispatcher(“/servlet/Demo18Servlet”).include(request, response);

常用在页面的固定部分单独写入一个文件,在多个页面中include进来简化代码量。

*被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略

*常被用来进行页面布局

获取请求参数

getParameter(name) — String 通过name获得值

getParameterValues(name) — String[ ] 通过name获得多值 checkbox

getParameterNames — Enumeration 获得所有请求参数名称组成的枚举

getParameterMap — Map

版权声明:欢迎交流,QQ872785786

时间: 2024-10-07 06:29:10

JavaWeb-Request对象的相关文章

Webform 内置对象 Response对象、Request对象,QueryString

Request对象:获取请求Request["key"]来获取传递过来的值 QueryString:地址栏数据传递 ?key=value&key=value注意事项:不需要保密的东西可以传不要传过长东西,因为长度有限,过长会造成数据丢失 Response对象:响应请求Response.Write("<script>alert('添加成功!')</script>");Response.Redirect("Default.asp

Filter中request对象强转问题

以下为过滤器doFIlter方法的源代码: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletRespons

Request 对象

Request 对象用于检索从浏览器向服务器发送的请求中的信息. 1.使用Request对象的Browser属性,可以访问HttpBrowserCapabilities属性获得当前正在使用哪种类型的浏览器浏览页面,并可以获得该浏览器是否支持某些特定功能. protected void Page_Load(object sender, EventArgs e) { HttpBrowserCapabilities b = Request.Browser; Response.Write("客户端浏览器

在SpringMVC中获取request对象的几种方式

1.最简单的方式(注解法) 1 2 @Autowired private  HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> b.之后在程序里可以用 Http

调用Request对象的post方法把RequestBody传入进去

通过调用登录接口发送一个post请求.跟get不一样的地方就是传参数不一样,post请求需要把参数封装到RequestBody对象,调用Request对象的post方法把RequestBody传入进去.最后调用execute方法执行请求,这个方法前面get请求的时候讲过. http://bbs.guilinlife.com/thread-9125238-1-1.htmlhttp://bbs.guilinlife.com/thread-9125240-1-1.htmlhttp://bbs.guil

request对象和response对象

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器. web服务器收到客户端的HTTP请求,会针对每一次请求分别创建一个用于代表请求的request对象和代表响应的response对象. 1.要得到客户机提交过来的数据,只需要找request对象就行. 2.要向客户机输出数据,只需要找response对象就行. response.setChar

重温Servlet学习笔记--request对象

request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每个请求时,服务器都会创建一个request对象,把请求的数据封装到request中,然后在调用Servlet.service()中传递进去.我们在创建一个servlet时通常会使用doGet或者doPost方法,并没有看到service()方法,就是因为父类的service方法已经读取到了reque

Servlet中的request对象、重定向和转发的差别(6)

1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中.我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息. 2.request的经常用法 (1)获得客户机信息     getRequestURL方法返回client发出请求时的完整URL.(                                比如:ur

ASP入门(八)-Request对象小案例

我们将制作一个能够记住访问者姓名的页面,在这个小案例中,你将学会如何使用Request对象的Cookies.Form以及ServerVariables集合的值,还可以学习到如何使用Response对象来发送Cookies. 首先来看看程序代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset

webx 中request 对象作为单例注入的实现

webx 文档中描述: 你不能把一个短期的对象如request.response和request context注入到MyAction这个singleton对象.然而,在Webx中,这样做是可以的!奥秘在于Request Contexts服务对上表所列的这些短期对象作了特殊的处理,使它们可以被注入到singleton对象中.事实上,被注入的只是一个"空壳",真正的对象是在被访问到的时候才会从线程中取得的.http://openwebx.org/docs/filter.html 例1.