HttpServletRequest对象和HttpServletResponse对象

HttpServletRequest对象

request中getParameter()方法和getAttribute()方法的区别

  • getParameter()方法获取的是浏览器提交的数据(多为表单提交的数据);
  • getAttribute()方法获取的是request域中的数据(request.setAttribute()设置的值);

request获取请求体

方法名描述
String getParameter(String name)getParameter获得指定参数名对应的值。如果没有返回null,如果只有多个获得第一个。 例如:username=jack
String[] getParameterValues(name)getParameterValues[] 获取请求数据key相同的多个数据

request域对象

方法说明
void setAttribute(String name, Object o)往request域中设置值
Object getAttribute(String name)从request域中取值
void removeAttribute(String name)从request域中移除值

request请求转发

方法说明
RequestDispatcher getRequestDispatcher(String path)获取请求转发器(request对象方法)
void forward(ServletRequest request, ServletResponse response)将请求转发到另一个资源(Servlet)上
说明
  1. 转发是服务器内部的跳转行为;
  2. 从一个Servlet转发到另一个资源(静态或动态),能够实现跳转,但是浏览器地址栏地址没有发生改变。因为对浏览器来说本质上就只有一次请求;
  3. 请求转发的作用:共享request域中的数据;

request获取请求行信息

方法说明
String getMethod()获取请求方式的类型
StringBuffer getRequestURL()获取客户端发出请求完整URL
String getRemoteAddr()获取IP地址
String getProtocol()获取当前协议的名称和版本

request获取请求头信息

方法作用
String getHeader(String name)根据请求头的k关键字获取请求头信息

请求头的key关键字及其对应信息(部分)

请求头key请求头value
referer浏览器通知服务器,当前请求来自何处,如果是直接访问,则不会有这个头。常用于:防盗链
If-modified-Since浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。
cookie与会话有关技术,用于存放浏览器缓存的cookie信息。
user-agent浏览器通知服务器,客户端浏览器与操作系统相关信息
connection保持连接状态。Keep-Alive 连接中,close 已关闭
host请求的服务器主机名
content-length请求体的长度
content-type如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码
accept浏览器可支持的MIME类型。文件类型的一种描述方式。
mime格式浏览器请求数据的类型,例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件
accept-encoding浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩
accept-language浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)

处理post请求中文乱码:

		//处理post请求乱码
        request.setCharacterEncoding("UTF-8");

HttpServletResponse对象

响应行

协议/版本 状态码 如:HTTP/1.1 200 。

其中通常只会用到状态码,操作状态码的方法:

response.setStatus(int  code);//向浏览器发送状态码

【常用状态码】

状态码说明
200响应成功
404资源路径错误或资源被删除
500服务器内部错误
302重定向

响应头

response.setHeader(String name,String value)//设置响应头信息

【常见响应头】

响应头Key响应头value
refresh页面刷新,例如: response.setHeader("Refresh","3;url=http://www.baidu.com"); //三秒刷新页面到百度
content-type设置响应数据的类型(MIME类型)编码格式 例如:text/html;charset=UTF-8(可处理响应乱码)
location指定响的路径,与状态码302配合使用,可完成重定向 例如:response.setStatus(302); response.setHeader("location", "/TestServlet");
content-disposition通过浏览器以附件形式解析正文,attachment;filename=xx.zip
  • content-type:服务器如响应给浏览器中文数据,tomcat用getWriter()输出字符时,对中文要进行编码处理,而tomcat8 默认编码是ISO-8859-1,该码表是不支持中文编码的。所以响应给浏览器,出现乱码。所以服务器在向浏览器输出数据之前,对于中文要采用支持中文的编码进行编码

用于处理响应乱码的API

方法说明
response.setHeader("content-type","text/html;charset=utf-8");设置响应头
response.setContentType("text/html;charset=utf-8");简写方式
  • location:指定响的路径,与状态码302配合使用,可完成重定向 例如:response.setStatus(302); response.setHeader("location", "/TestServlet");
    另外有一个简写方式;

response.sendRedirect("/otherServlet");//少写代码

转发和重定向的区别

区别点转发重定向
实现原理服务器内部浏览器执行
请求次数一次两次
浏览器地址栏地址不变化变为第二次请求的地址
能否共享request域能够共享不能共享
作用共享request域对象完成跳转
转发和重定向怎么选择
  1. 如果需要共享request域,必须使用转发;
  2. 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;
区别点转发重定向
实现原理服务器内部浏览器执行
请求次数一次两次
浏览器地址栏地址不变化变为第二次请求的地址
能否共享request域能够共享不能共享
作用共享request域对象完成跳转
  1. 如果需要共享request域,必须使用转发;
  2. 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;
posted @ 2020-10-14 14:41  ZuiTaiPing  阅读(19)  评论(0)    收藏  举报