Servlet中Request和Response对象总结

Web服务器接收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

Request概念及常用的API

全称为HttpServletRequest,Request表示客户端向服务器发出的请求,所有客户端信息和客户端提交的数据,均封装在Request对象中.

Http三部分:

1.请求行
Get http://llocalhost:8080/test/servlet/req?username=zs http/1.1

方法:
getMethod();获得请求方法
getRequestURL();返回客户端发出请求时的完整url
getRequestURI();返回请求行中的资源名部分
getContextPath();当前应用的虚拟目录
getQueryString();返回请求行中的参数部分

2.请求消息头
方法:
getHeader(String name) 根据头名称得到头信息值
getHeaderNames() 得到所有头信息name
getHeaders(String name) 根据头名称得到相同名称头信息值

3.请求体/请求正文/实体内容
全部发送给服务器,让服务器知道客户端的情况

获取与表单数据相关的方法:

getParameter(name) 根据表单中的name属性的名,获取value属性的值
getParameterValues(String name) 为复选框获取值提供的方法
getParameterNames() 得到表单提交的所有name的方法
getParameterMap() 得到表单提交的所有值的方法
getInputStream 以字节流的方式得到所有表单数据

Request域对象相关的方法:
setAttribute(String name,Object value);设置域对象
getAttribute(String name);获得域对象
removeAttribute(String name);删除域对象中名称为name的value

与请求转发相关的方法:
getRequestDispatcher(String url).forward(request,response); 转发
include(request,response) 请求包含

与请求编码相关的方法:
解决post方法编码:
requset.setCharacterEncoding(“UTF-8”);告诉服务器以什么方式编码
解决get方式编码:
new String(name.getBytes(“ISO-8859-1”),”UTF-8”);

表单提交中文乱码的原因及解决方案

客户端以UTF-8将中文编码,而Tomcat却用ISO-8859-1解码,违背了编码和解决字符集相同的原则,所以服务器收到乱码

解决:

通用方式:
    byte[] buf = username.getBytes("ISO8859-1");
    username=new String(buf,"UTF-8");

专用方式:即只适合POST

    request.setCharacterEncoding("UTF-8");
Request域对象

Request对象有二层含义:
1——代表客户端向服务器的请求对象
2——代表可以暂存数据的域对象

生命周期:
Request何时创建:一次请求来到Servlet
Request何时销毁:服务器将内容响应到客服端,Request就销毁
Request域对象保存时间只在一次请求中,也就是说一次请求完毕后,Request域对象就销毁了,一旦Request域对象销毁,那么存在其中的数据也就不存在了。

Request域对象相关的方法:
setAttribute(String name,Object value);设置域对象
getAttribute(String name);获得域对象
removeAttribute(String name);删除域对象中名称为name的value

Request转发

request.getRequestDispatcher(“路径”).forward(request,response);
forward()后,流程才会真正转向

转发是服务器内部的事,与浏览器无关,所以浏览器的地址栏不会变,原来浏览器以什么方式提交数据,转发到另一个Servlet依然执行对应的方式

Response概念和常用API

服务器向客户端发送响应时,必须通过Response对象,因此想向客户端输出内容的话就要用Response

Http三部分:

1.响应行:
setStatus(int sc)设置响应状态码

2.响应头:
sendRedirect(String location)请求重定向
setHeader(String name,String value)设置响应头信息

例如:
告诉浏览器使用什么码表:
response.setHeader(“content-type”,”text/html;charset=UTF-8”);
告诉客户端不缓存:
response.setHeader(“pragma”,”no-cache”);
response.setHeader(“cache-control”, “no-cache”);
response.setDateHeader(“expires”, 0);

3.响应正文:
getWriter(); 字符输出流
getOutputStream();字节输出流
setCharacterEncoding(String charset);设置将发送到客户端的响应的字符编码
setContentType(String type);设置将发送到客户端的响应的内容类型

浏览器输出中文乱码的原因和解决方案

Response向浏览器输出中文乱码的原因:
字符:response.getWriter().write(“xx”);
默认按ISO8859-1编码,浏览器默认按GB2312解码
字节:response.getOutputStream().write(“xx”.getBytes());
默认按GB2312编码,浏览器默认按GB2312解码,
window平台默认GB2312的编码和解码

解决方案:
字符:response.setHeader(“contenttype”,”text/html;charset=UTF-8”);//浏览器解码
response.setCharacterEncoding(“UTF-8”);//服务器编码
以上二句代码,可以合二为一,如下:
response.setContentType(“text/html;charset=UTF-8”);
服务器按UTF-8编码,浏览器按UTF-8解码
确保编码解码相同
一:服务器输出的内容采用UTF-8来编码
二:通知浏览器接收什么类型的数据
三:通知浏览器用UTF-8来解码
字符:response.getWriter().write(“xx”);
字节:response.setHeader(“content-type”,”text/html;charset=UTF-8”);
告诉浏览器按UTF-8解码
response.getOutputStream().write(“呵呵”.getBytes(“UTF-8”));
服务器按UTF-8解码

重定向

一个Servlet需要将流程交由另一个Servlet
特点:
1.request.sendRedirect(“”);
2.重定向是客户端与服务器的共同行为,不是服务器内部行为,所以浏览器的地址栏会变化
3.在重定向情况下,不共享Request域对象,但可共享Context域对象
4.如果表单原来以post提交,那么重定向后,因为浏览器再次发送http请求了,新一次的Request创建,如果这次以get提交到Servlet,会重写doGet方法
5.位于/WEB-INF这个私有目录下的资源,只能通过转发才可访问,重定向是不能访问的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值