笔记之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<String ,String[]> map=request.getParameterMap();常用来做框架

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

用表单收集数据:

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

<form action="/day06/servlet/RequestDemo4" method="post">

用户名:<input type="text" name="username"></br>

密  码:<input type="password" name="password"></br>

性  别:<input type="radio" name="gender" value="male"></br>

<input type="radio" name="gender" value="female"></br>

城  市:<select name="city">

<option value="shanghai">上海</option>

<option value="beijing">北京</option>

</select></br>

兴  趣:<input type="checkbox" name="like" value="sing">唱歌

<input type="checkbox" name="like" value="dance">跳舞

<input type="checkbox" name="like" value="football">足球

</br>

简  历:<textarea rows="5" cols="40" name="resume"></textarea></br>

照  片:<input type="file" name="image"></br>

<input type="hidden" name="xxx" value="yyy">

<input type="submit" value="提交">

</form>

单选,多个选项的  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


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值