加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

JSP中Request与Response的差异

发布时间:2023-06-16 14:58:47 所属栏目:教程 来源:
导读:Web服务器会针对每次的请求分别创建request对象和response对象,因此有不少朋友们会好奇JSP中Servlet的request和request到底有什么区别呢?下面我们就去看看JSP中Request与Response的区别。

JSP中Servlet的Reque
Web服务器会针对每次的请求分别创建request对象和response对象,因此有不少朋友们会好奇JSP中Servlet的request和request到底有什么区别呢?下面我们就去看看JSP中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,自带一个输出流,当你需要将一个页面或者一个文件传到客户端时,你可以通过这个流来进行操作。
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!