HttpServletResponse

1、浏览器与服务器之间的交互过程

当服务器收到一次浏览器的Http(http底层是基于TCP传输协议)请求后在服务器同时会产生一个Request对象和一个Response对象 
经过request请求对象得到客户端向服务器提交的数据,在经过响应生成数据由服务器把数据发送到客户端 。html


2、HttpServletResponse对象经常使用的方法

HttpServletResponse:
 setStatus(int) 设置响应的状态码
 setHeader(String,String) 设置响应头信息java


 其中,addHeader()与setHeader()区别:
  addHeader 用于一个key多个value 状况 ------- key:value,value,value ... 在原有值添加新值
  setHeader 用于 一个key一个value 状况 ------- 用新的value 覆盖以前value web


 getWriter() 得到响应体字符输出流,也就是往浏览器些数据
 getOutputStream() 得到响应体字节输出流,一样是往浏览器写数据
 setContentType("text/html;charset=utf-8") 设置服务器返回的数据是什么类型的而且是以什么编码打开
 setCharacterEncoding("utf-8") 服务器是以什么编码解释浏览器提交的数据
注意:(1)writer 和 getOutputStream 生成的内容是Http协议响应体数据,它不可以生成状态行和头信息
   (2)ServletResponse 接口不提供与协议相关的API 可是HttpServletResponse是面向Http协议,因此提供协议相关的API 
   (3) HttpServletResponse :HttpServletRequest
   它们的实现类不在JavaEE API中(request和response实现类在tomcat源码中)   ,实现类是由服务器提供在服务器接收到请求发生时,由服务器构造出Request和Response对象

apache

3、状态码的使用

 状态码是结合Location响应头使用的
 response.setStatus(302);
 response.setHeader("Location", "/day6/response/demo2.html")Location的value指定要重定向的地址
 以上两行代码能够简化,经过sendRedirect方法实现:response.sendRedict("/day6/response/demo2.html");
经过refresh完成自动刷新页面:
refresh 格式: 时间(秒);url=跳转页面路径
例如: response.setHeader("refresh", "5;url=/day6/hello.html"); === 生成响应头信息中
在HTML中meta标签,一样能够产生Http响应头信息相同的效果 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 http-equiv 响应头信息name
 content 响应头信息value 
例如: <meta http-equiv="refresh" content="5;url=/day6/hello.html" /> === 生成响应体中
注意问题:
1)、文件复制时用getOutputStream , 手动生成响应内容时用getWriter 
2)、getOutputStream和getWriter相互排斥不能同时使用 
3)、getOutputStream和getWriter生成响应体内容,不能改变状态行和头信息的 
4)、tomcat服务器会自动调用response输出流 close方法,调用close时自动flush缓冲区内容 api


4、HttpServletRequest

一、得到客户机经常使用信息
 getMethod 请求方式
 getProtocol 协议
 getRequestURI 和 getRequestURL 得到请求资源路径
 getRemoteAddr 得到客户机IP地址 
 * 将 127.0.0.1 localhost 加入本机 hosts文件 
 getContextPath 得到工程虚拟目录名称
 URI和URL区别 
 URI:/day6/request1
 URL:http://localhost/day6/request1
 URI范围比URL大,http://localhost/day6/request1 是URL也是 URI ,/day6/request1 是URI 不是 URL浏览器

二、得到请求头信息
 getHeader(name) 得到指定头信息
 User-Agent 客户端浏览器类型 (文件下载)
 MSIE IE浏览器
 Firefox 火狐浏览器
Chrome google浏览器
三、得到请求参数
 GET方式请求,参数位于请求行中
 POST方式请求,参数位于请求体中tomcat

 getParameter(name) 根据参数名称得到参数值 (一个值)
 getParameterValues(name)  根据参数名称得到参数值 (多个值) -------- 结合checkbox 一块儿使用
 getParameterNames() 得到全部参数名称
 getParameterMap() 将参数name和value 保存到一个map中,返回map服务器


5、乱码问题解决

 POST请求乱码 :request.setCharacterEncoding("utf-8"); 
 GET请求乱码 
 解决方案一:修改server.xml 
    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="utf-8"/>
* 必须有修改tomcat服务器配置文件权限post

解决方案二:逆向编解码
 username = URLEncoder.encode(username, "ISO-8859-1");
 username = URLDecoder.decode(username, "utf-8");
 简化
 username = new String(username.getBytes("ISO-8859-1"),"utf-8");网站

结论:能用post时 不用get ---- form提交都用post 
 <a href="url?name=中国"> ---- 手动处理 get 
 URL编码和解码
 1) 浏览器提交一次请求,请求中中文字符,自动进行URL编码 (由浏览器完成)
 2) web服务器接收到内容以后,自动URL解码 
 URLEncoder 完成URL编码 , URLDecoder 完成URL解码

 服务器端接收请求,请求url : http://localhost/day6/request3?name=aaa+bbb
 问题:在服务器端执行 request.getParameter("name"); 值 aaa bbb

四、请求转发传递数据 
请求转发forward 和 请求重定向redirect 区别 ??? 
1) 转发一次请求 一次响应; 重定向两次请求 两次响应
2) 转发URL地址 不变,重定向URL地址改变第二个资源地址
3) 转发只能转发给同一个网站内部资源,重定向能够定向到任何网站 
4) 转发中/属于服务器内部路径 不写工程名,重定向/来自客户端必需要写工程名
servlet的最佳应用:Servlet处理数据获得数据处理结果,经过请求转发,将处理结果传递JSP显示 
* Servlet处理数据得到结果,JSP负责数据显示的。


6、关于api

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html 

相关文章
相关标签/搜索