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)上 |
说明
- 转发是服务器内部的跳转行为;
- 从一个Servlet转发到另一个资源(静态或动态),能够实现跳转,但是浏览器地址栏地址没有发生改变。因为对浏览器来说本质上就只有一次请求;
- 请求转发的作用:共享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请求中文乱码:
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域对象 | 完成跳转 |
转发和重定向怎么选择
- 如果需要共享request域,必须使用转发;
- 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;
| 区别点 | 转发 | 重定向 |
|---|
| 实现原理 | 服务器内部 | 浏览器执行 |
| 请求次数 | 一次 | 两次 |
| 浏览器地址栏地址 | 不变化 | 变为第二次请求的地址 |
| 能否共享request域 | 能够共享 | 不能共享 |
| 作用 | 共享request域对象 | 完成跳转 |
- 如果需要共享request域,必须使用转发;
- 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;