内容简介:这篇文章主要介绍了JSP中Servlet的Request与Response的用法与区别的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
JSP中Servlet的Request与Response的用法与区别
简介:Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
一,Request
Request代表请求对象,其中封装了对请求中具有请求行、请求头、实体内容的操作的方法,通过这个对象提供的方法,可以获得客户端请求的所有信息。
1. 作为容器
setAttribute(String name,Object o)将数据作为request对象的一个属性存放到request对象中 getAttribute(String name) 获取request对象的name属性的属性值 removeAttribute(String name) 移除request对象的name属性 getAttributeNames() 获取request对象的所有属性名
2. 获得客户端信息
getRequestURL()返回客户端发出请求时的完整URL。 getRequestURI()返回请求行中的资源名部分。 getRemoteAddr()返回发出请求的客户机的IP地址。 getRemoteHost()返回发出请求的客户机的完整主机名。 getRemotePort()返回客户机所使用的网络端口号。 getLocalAddr()返回WEB服务器的IP地址。 getLocalName()返回WEB服务器的主机名。 getQueryString()返回请求行中的参数部分。 getPathInfo()返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
3. 获得客户端请求头
getHeader(string name) getHeaders(String name) getHeaderNames()
4. 获得客户端请求参数(客户端提交的数据)
getParameter(String)方法(常用) getParameterValues(String name)方法(常用) getParameterNames()方法(不常用) getParameterMap()方法(编写框架时常用)
5.request接收表单提交中文参数乱码问题解决
(1)get方式提交表单:
对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的(至于为什么无效我也没有弄明白),默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法:
1) 在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
String name = request.getParameter("name");//接收数据
name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
2) server.xml中配置
URIEncoding=utf-8
(2)post方式提交表单:
之所以会产生乱码,就是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收。
request.setCharacterEncoding("UTF-8");
6.Request对象实现请求转发
request.getRequestDispatcher("/test.jsp").forward(request, response);
request.getRequestDispatcher("/test.jsp").include(request, response);
调用forward()方法后,原先存放在HttpResponse对象中的内容将会自动被清除
调用include()方法后,原先存放在HttpResponse对象中的内容将不会被清除,内容追加
二,Response
Response代表响应,于是响应消息中的状态码、响应头、实体内容都可以由它进行操作
1. 向客户端(浏览器)发送数据的相关方法
getOutputStream() getWriter()
2.向客户端(浏览器)发送响应头的相关方法
addDateHeader()
addHeader()
addIntHeader()
containsHeader()
setDateHeader()
setHeader()
setIntHeader()
例如:
response.setHeader("content-type", "text/html;charset=UTF-8");
3.向客户端(浏览器)发送响应状态码的相关方法--setStatus()
实例代码:
private void downloadFileByOutputStream(HttpServletResponse response)
throws FileNotFoundException, IOException {
//1.获取要下载的文件的绝对路径
String realPath = this.getServletContext().getRealPath("/download/1.JPG");
//2.获取要下载的文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
//3.设置content-disposition响应头控制浏览器以下载的形式打开文件
response.setHeader("content-disposition", "attachment;filename="+fileName);
//4.获取要下载的文件输入流
InputStream in = new FileInputStream(realPath);
int len = 0;
//5.创建数据缓冲区
byte[] buffer = new byte[1024];
//6.通过response对象获取OutputStream流
OutputStream out = response.getOutputStream();
//7.将FileInputStream流写入到buffer缓冲区
while ((len = in.read(buffer)) > 0) {
//8.使用OutputStream将缓冲区的数据输出到客户端浏览器
out.write(buffer,0,len);
}
in.close();
}
它们的区别:
其实从字面上我们就可以知道他们俩的区别在于一个是请求(request),而另一个是响应(response),servlet作为服务端,请求便是来自浏览器的请求,响应便是服务器对浏览器的响应。在你想获取浏览器请求的数据时,我们就要用request,而在我们要向浏览器响应数据或页面时,我们就要用到response。
request 是请求的载体,它附带着,请求的参数,ip,cookie,表单,字符编码,或者上传文件。
你可以通过request去获得你所需要的信息。
response是响应的载体,你可以设置,表头,报文,响应文件类型,字符编码,response,自带一个输出流,当你需要将一个页面或者一个文件传到客户端时,你可以通过这个流来进行操作
希望通过本文能帮助到大家,如有疑问请留言或者到本站社区交流讨论,感谢阅读,谢谢大家对本站的支持!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Book of CSS3
Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95
CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!