response、request的使用

一、response
ServletResponse–通用的response提供了一个响应应该具有最基本的属性和方法
1、输出数据
response.setContentType(“text/t.html;charset=utf-8”);
response.getOutputStream.write(“”.getByte(“utf-8”));

response.setCharacterEncoding(“utf-8”);
response.getWriter().write(“”);

2、实现下载
3、实时刷新页面
4、控制是否缓存页面
5、请求重定向

*getOutputStream和getWriter这两个方法互相排斥,调用其中的任何一个方法后,就不能再调用那个另一方法。
*response中获取的输出流,在servlet方法结束后服务器会帮我们关闭,所以一般不要自己在servlet关闭这个流。

二、request
ServletRequest–通用request,提供给一个request应该具有的最基本的方法
1、获取客户机信息
getRequestURL–返回客户端发出请求完整URL
getRequestURI–返回请求行中的资源名部分
getQueryString–返回请求行中的参数部分
getRemoteAddr–返回发出请求的客户机的ip地址
getMethod–得到客户机的请求方式
getContextPath–获得当前web应用虚拟目录名称

2、获取请求头信息
获取客户机请求头
getHeader(name)–String
getHeaders(String name)–Enumeration
getHeaderName–Enumeration
获取具体类型客户机请求头
getIntHeader(name)–int
getDateHeader(name)–long

*防盗链

3、获取请求参数
乱码问题:
浏览器以什么编码发送请求参数?浏览器以什么编码打开表单页面就用什么编码发送这个页面提交的数据。
服务器以什么编码打开?如果不指定,则使用ISO8859-1,这样如果请求参数中有中文就必然会引起乱码问题。
对于Post提交,可以用设置setCharacterEncoding(“utf-8”)来明确通知服务器以浏览器发过来的编码来打开请求数据来解决乱码问题。但此方法只对请求体中的实体内容部分起作用,所以get提交的乱码并不能解决。
对于get提交的乱码,只能手动的进行编解码来解决乱码:
String name = request.getParameter(“username”);
name = new String(name.getBytes(“iso8859-1”),”utf-8”).

4、利用请求域传递参数
作用范围:整个请求链上
生命周期:当服务器收到一个请求,创建出代表请求的request对象,request开始。当请求结束,服务器销毁代表请求的request对象,request域结束。
作用:在整个请求链范围内共享数据,通常我们在servlet中处理好的数据会存入request域后请求转发到jsp页面来进行展示。
getAttribute
setAttribute
removeAttribute

5、实现请求转发和请求包含
(1)、请求转发:
this.getServletContext().getRequestDispatcher(“”).forward(request,resopnse).
request.getRequestDispatcher(“”).forward(request,response).
请求转发是希望将请求交给另外一个资源执行,所以应该保证只有最后要执行的资源才能够输出数据,所以:
*请求转发时,如果已经有数据被写入到了resopnse的缓存区,但是这些数据还没有被发送到客户端,则请求转发时,这些数据将会被清空。但是清空的只是响应中的实体内容部分,头信息并不会被清空
*请求转发时已经有数据被打给了浏览器,那么再进行请求转发时,不能成功,会抛异常,原因是响应已经结束,再转发给其他人已经没意义。
*在最终输出数据的servlet执行完成后,response实体内容中的数据会被设置为已提交的状态,再往里面写数据也不会起总用。
*一个servlet两次请求转发也是不可以的,一次请求交给两个人处理也不行。
(2)、请求包含:将两个资源的输出合并后输出
this.getServletContext().getRequestDispatcher(“).include(request,response);
request.getRequestDispatcher(“”).include(request,response);
*被包含的servlet不能改变响应信息的状态吗和响应头,如果它里面存在这样的语句,这些语句的执行的结果将会被忽略
*常用来页面布局
(3)、三种资源处理方式的区别:
请求重定向:
response.sendRedirect();
请求转发:
request.getRequestDispatcher().forward;
请求包含:
request.getRequestDispatcher.include().

请求重定向和请求转发的区别:
请求重定向地址栏会发生变化,请求转发地址栏不会发生变化
请求重定向两次请求两次响应,请求转发一次请求一次响应
如果需要在资源跳转时利用request域传递域属性必须使用请求转发
如果希望资源跳转后修改用上网地址栏使用请求重定向
如果使用请求转发和请求重定向都可以,优先使用请求转发,减少对服务器的访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值