Java篇-HttpServletRequest

一 : HttpServletRequest简述

HttpServletRequest : 当创建Servlet时会覆盖service()方法,或doGet()doPost这些方法中都会有requestresponse参数,分别代表请求和响应.
doGet()与doPost方法的request类型是HttpServletRequest而service方法的类型是ServletRequest,HttpServletRequestServletRequest的子接口,功能更加强大.1HttpServletRequest运行过程与HttpServletReponse一样.

二 : HttpServletRequest方法

  • 获得请求行
    //获取请求方式
        String method = request.getMethod();
        System.out.println(method);
        //获取请求资源相关
        String uri = request.getRequestURI();
        StringBuffer url = request.getRequestURL();
        System.out.println("uri : " + uri);
        System.out.println("url : " + url);
        //获取web应用名称
        String name = request.getContextPath();
        System.out.println(name);
        //获取地址后参数
        String parms = request.getQueryString();
        System.out.println(parms);
    
        //获得客户机IP地址
        String add = request.getRemoteAddr();
        System.out.println(add);
GET
uri : /WEBpro/line
url : http://localhost:8080/WEBpro/line
/WEBpro
null
0:0:0:0:0:0:0:1
  • 获得请求头
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //获取指定的头
        String user = request.getHeader("User-Agent");
        System.out.println(user);
        
        //获得所有头的名字
        Enumeration<String> em =  request.getHeaderNames();
        while(em.hasMoreElements()) {
            
            String key = em.nextElement();
            String value = request.getHeader(key);
            System.out.println(key + " : " + value);
        }
    
    }
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
host : localhost:8080
connection : keep-alive
upgrade-insecure-requests : 1
user-agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding : gzip, deflate, br
accept-language : zh-CN,zh;q=0.9
cookie : Pycharm-33f57aa8=68b58c91-5eb9-4266-8cce-24e5ca585161; Phpstorm-37f204a9=27ada96d-4b5d-4f2a-bee0-f72f9b9a4b77

refer头执行该访问的来源做防盗链

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //对来源进行判断
        String head = request.getHeader("referer");
        
        //输出
        if (head !=null && head.startsWith("http://localhost")) {
            //中文
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write("请阅览");
        }else {
            response.getWriter().write("可耻的盗贼");
        }
    }
  • 获得请求体

获得单个表单的值

    String par = request.getParameter("username");
    System.out.println("单个表单 : " + par);

获得多个表单的值

String[] hobby = request.getParameterValues("hobby");
        for (String item : hobby) {
            System.out.println("多个表单的值为 : " + item);
        }

获得所有请求参数名称

Enumeration<String> en = request.getParameterNames();
        while(en.hasMoreElements()) {
            String name = en.nextElement();
            System.out.println("name : " + name);
        }

获取所有参数,参数封装到MAP<String,String[]>

Map<String, String[]> map = request.getParameterMap();
    for (Map.Entry<String, String[]> ent : map.entrySet()) {
        System.out.println("key : " + ent.getKey());
        for (String item : ent.getValue()) {
            System.out.println("value : "+item);
        }
        System.out.println();
    }

注意 :获取get请求方式的请求参数,与post相同

三 : 解决参数乱码

乱码原因 : 客户端采用UTF-8编码,在服务器端使用iso8859-1解码所以对应的字符不对

《Java篇-HttpServletRequest》 编码-解码

解决办法 :
先使用iso8859-1编码回去,在使用utf-8解码->找到对应的中文字符

代码 :
此为post与get通用方式

String username = request.getParameter("username");
//      username = new String(username.getBytes("iso8859-1"),"UTF-8");

Post可以直接这么写 :

request.setCharacterEncoding("UTF-8");

四 : request转发

使用request转发,其中转发是服务器内部之间的传递,所以getRequestDispatcher("")参数地址的项目名字可以省略.
转发是一次访问.

《Java篇-HttpServletRequest》 转发

request.getRequestDispatcher("login.jsp").forward(request, response);

五 : request 域对象

request也是一个存储数据的区域对象
具有方法 :
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
作用范围 : 一次请求中

六 : Mac 访问 jsp 500 问题

新建了一个 .jsp页面,路径也没有问题,直接访问就500,要不就是404.很奇怪,查了很久原因最后发现原来是mac权限的问题,mac电脑下tomcat/work/Catalina/localhost 没有读写权限的问题,怎么解决呢 : 不用命令那么麻烦,直接右击文件夹 ->显示简介,更改权限为读与写即可,再重新run就搞定了

《Java篇-HttpServletRequest》 文件夹

    原文作者:TianTianBaby223
    原文地址: https://www.jianshu.com/p/dd7d0db2196e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞