ServletRequest -- 通用request,提供一个request应该具有的最基本的方法
|--HttpServletRequest -- ServletRequest的孩子,针对http协议进行了进一步的增强
1.获取客户机信息
resquest.getRequestURL().toString();
返回客户端发出请求完整URL http://localhost:8080/day04/servlet/Demo1Servlet
*resquest.getRequestURI()
返回请求行中的资源名部分 /day04/servlet/Demo1Servlet
resquest.getQueryString()
方法返回请求行中的参数部分 name=zhang
*resquest.getRemoteAddr()方法返回发出请求的客户机的IP地址
*resquest.getMethod() 得到客户机请求方式 GET
*resquest.getContextPath()
获得当前web应用虚拟目录名称 /day04 因为发布的应用名称会变化
获取请求头信息
获得客户机请求头
String getHeader(name) //获取请求头的值
Enumeration<String> getHeaders(String name) //获取重名请求头的值
Enumeration<String> getHeaderNames() //所有请求头名字组成的枚举
int getIntHeader(name)
long(日期对应毫秒) getDateHeader(name)
通过referer信息防盗链
String ref = request.getHeader("Referer"); if(ref==null || "".equals(ref) || !ref.startsWith("http://localhost")){ response.sendRedirect(request.getContextPath()+"/index.html"); //重定向 return; //后面的代码就不执行了 }
request.getParameter(name) --- String 通过name获得值
request.getParameterValues() --- String[ ] 通过name获得多值 checkbox
request.getParameterNames() --- Enumeration<String> 获得所有name
request.getParameterMap() --- Map<String,String[ ]> key :name value: 多值
1、浏览器以什么编码来发送请求参数?
浏览器以什么编码打开的表单页面,就用什么编码发送这个页面提交的数据。
2、服务器以什么编码来打开呢?
如果不指定,则使用ISO8859-1,这样如果请求参数中有中文必然就乱码了
1、对于POST提交,可以设置request.setCharacterEncoding("utf-8");明确的通知服务器以浏览器发送过来数据的编码方式来打开数据就可以解决乱码。
但是上面的方法只对请求中实体内容部分起作用,所以GET提交的乱码并不能解决.
2、对于GET提交的乱码,只能手动的进行编解码从而解决乱码问题:
先将乱码的字符按照iso8859-1码表进行编码,编成二进制字节数组(=原请求参数值按照utf-8编码的二进制字节数组),再将此二进制用正确的码表解码。
String username = request.getParameter("username"); username = new String(username.getBytes("iso8859-1"),"utf-8");
上面两行代码对post提交有效。