1.request_获取客户机信息

    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  因为发布的应用名称会变化

        

2.request_获取请求头_防盗链

获取请求头信息

   获得客户机请求头

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; //后面的代码就不执行了
}

 

3.request_获取请求参数_请求参数的乱码解决

获取请求参数

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提交有效。