笔记之Servlet的Request对象(获取请求参数的方法、表单格式、防盗链、请求重定向)

Request对象:

发送HTTP请求用HttpServletRequest

包含3部分:请求行,请求头,请求数据

方法:

getMethod()获得请求方式

getRequestUri()getRequestURL() 获得客户机发送的请求资源的地址(URLURI的子集)

getHeaders(),getHeader(),getHeader(),getDateHeader(),

getIntHeader()获取请求头

getInputStream()

getparameter()

getRemoteAddr()获得客户机IP地址

getRemoteHost()获得发出请求的客户机完整主机名

getRemotePort()获取客户机使用的端口

getLocalAddr(),getLocalName()得到服务器IP和主机名

方法很多,参考文档。。。

getHeader()应用实例:

  是否以压缩方式发送给客户端

request.getHeader("Accept-Encoding").contains("gzip")

getHeaders()的应用:

Enumeration e=reqeust.getHeaders("Accept");

因为可能有多个Accept 

getHeaderNames()获取所有的请求头名字:

Enumeration e=request.getHeaderNames();

Whiel(e.hasMoreElement()){

String name=e.nextElement();

String value=requst.getHeader(name);

syso

}

获取请求参数:(即请求时发送的数据)

第一种方式:

request.getParameter("name");

第二种方式

request.getParameterValues("name"); 请求可能带有多个值

第三种方式:

Enumeration e=request.getParameterNames(); 常用于做框架

第四种方式:

Map map=request.getParameterMap();常用来做框架

Key是数据名,value为数组形式,可获取多个值的情况

用表单收集数据:

数据提交会交给 action对应的Servlet处理

用户名:

密  码:

性  别:


城  市:

上海

北京


兴  趣:唱歌

跳舞

足球


简  历:

照  片:

提交">

单选,多个选项的  name 要一样

复选框,多个选项的name也要一样

超链接收集用户数据:

发邮件,验证有用邮箱,邮件打开时激发img 标签中的servlet,将用户的邮箱地址返回


Request常见应用:防盗链

Referer头会记录来访URL

String referer=request.getHeader("Referer");

If(referer==null||!referer.startWith("http://localhost")){

response.sendRedirect("/day06/index.jsp");

Return;

}

请求转发和请求重定向区别:参考PPT

一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。

一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。

因为请求转发是面向服务器,/代表应用,请求重定向是面向浏览器,/代表整个网站

重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。

转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

请求转发:服务器将数据交个servlet 处理,servlet处理后转发给JSP显示。

this.getServletContext().getRequestDispather("/1.jsp").forward(request,response);

request.getRequestDispather("/1.jsp").forward(request,response);

前一种方式麻烦,后一种比较好。

地址不变,发送一次请求。

forward细节问题:

一个请求中的forward数据提交后,不能再次forward

Forward之前,response 不能提交数据,否则会抛异常。(forward时会清空RESPONSE

Forward之后,写入Response 的数据不会提交, 已经转到JSP。请求结束。

但是response 中设置头,不会清掉,依然有效

    请求重定向:地址改变,2次请求2次响应

Request也是一个域

setAttribute()request中存数据

getAttribute()获得request 中数据

RemoveAttribute()移除request中的某个数据

getAttributeNames()

Request,response servletContext的区别

RequestDispatherinclude 方法:

同一个应用的多个 页面,头和体相同,则不需要多次编写相同搞得部分,直接引入即可。(这里不是重定向,不是给浏览器用,所以/代表应用)

request.getRequestDiptcher("/header.jsp").include(request,response);//include 内部使用了getWriter()输出数据,所以下面写出数据只能用writer,因为getOutPutStreamgetWriter互斥

Xxxxxxxxxxxxxxxxxxxxxxxxx

String data="jkdjka";

response.getWriter().write(data);

request.getRequestDiptcher("/body.jsp").include(request,response);

注意:如果servlet类名错误,重构后,还要在配置文件中修改名字。

java


你可能感兴趣的:(J2EE技术)