创建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解码(开发中推荐使用)