002-EE-0007-HttpServletRequest AND HttpServletResponse

创建Servlet时如果覆盖service()方法,参数request/response是ServletRequest/ServletResponse
创建Servlet时如果覆盖doGet/doPost方法,参数request/response是HttpServletRequest/HttpServletResponse



获得请求行

* String getRequestURI() 
	* 获取请求路径不包含域名的部分
	* 例如完整请求路径为http://localhost:8080/webdemo/myServlet,该方法返回/webdemo/myServlet
* StringBuffer getRequestURL() 
	* 获取完整请求路径
	* 例如http://localhost:8080/webdemo/myServlet 
* String getContextPath()
	* web应用的名称
	* 例如完整请求路径为http://localhost:8080/webdemo/myServlet,该方法返回/webdemo
* String getQueryString() 
	* get提交url地址后的参数字符串
	* 例如username=zhangsan&password=123
* request.getRemoteAddr()  
	* 获得访问的客户端IP地址
	* 本机localhost访问获取到的值为0:0:0:0:0:0:0:1
	* 本机127.0.0.1访问获取到的值为127.0.0.1

通过request获得请求头

* long getDateHeader(String name)
* String getHeader(String name)
* Enumeration getHeaderNames()
* Enumeration getHeaders(String name)
* int getIntHeader(String name)
* referer头的作用:执行该此访问的的来源,可做防盗链

获得请求体

* 请求体中的内容是通过post提交的请求参数
* 格式是:
    * username	[zhangsan]
    * password	[123]
    * hobby	[football,basketball]

获得请求参数:

* String getParameter(String name) 
	* 根据name值获取请求参数值
* String[] getParameterValues(String name)
	* 根据name值获取请求参数值,用于复选框
* Enumeration getParameterNames()
	* 获取所有请求的name值
* Map<String,String[]> getParameterMap()
	* 获取所有请求参数map

乱码解决

* post:
    request.setCharacterEncoding(“UTF-8”);
* get:
    parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);


设置响应行

* setStatus(int sc)

设置响应头(add表示添加,而set表示设置)

* addHeader(String name, String value) 
* addIntHeader(String name, int value) 
* addDateHeader(String name, long date) 
* setHeader(String name, String value) 
* setDateHeader(String name, long date) 
* setIntHeader(String name, int value)

设置响应体

* PrintWriter getWriter()
	* 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response缓冲区中
	* 随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端
* ServletOutputStream  getOutputStream()
	* 获得字节流,通过该字节流的write(byte[] bytes)方法可以将字节设置到response缓冲区中
	* 随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端
 * setCharacterEncoding(String charset)
 	* 设置response缓冲区的编码
 	* 如果浏览器解码时使用的不是我们设置的编码格式则会乱码
* response.setContentType("text/html;charset=UTF-8");
	* 设置response缓冲区的编码
	* 指定浏览器解码方式

乱码原理


request乱码原理

1)get
	* 客户端对url使用utf-8进行编码,不经过request缓冲区直接封装进request对象,服务器端使用iso-8859-1解码,所以乱码
	* request.setCharacterEncoding("utf-8")设置的是request缓冲区的编码,get不经过缓冲区,所以不管用
	* new String(request.getParameter("username").getBytes(),"utf-8");
2)post
	* 客户端对表单的参数使用utf-8进行编码,经过缓冲区,tomcat内核从request缓冲区获取信息组装成request对象
	* request.setCharacterEncoding("utf-8")设置request缓冲区的编码为utf-8

response乱码原理

* response对象调用getWrite().write("你好");将中文字符写入response缓冲区
* response缓冲区使用iso-8859-1对中文字符进行编码,客户端使用utf-8解码,乱码
* response.setCharacterEncoding("utf-8");设置response缓冲区的编码为utf-8,不过如果客户端不使用utf-8解码依然会乱码
* response.setContentType("utf-8");设置response缓冲区的编码为utf-8且告诉客户端使用utf-8解码(开发中推荐使用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值