Java篇-HttpServletRequest

作者: TianTianBaby223 | 来源:发表于2018-09-25 10:45 被阅读7次

    一 : 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解码所以对应的字符不对


    编码-解码

    解决办法 :
    先使用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("")参数地址的项目名字可以省略.
    转发是一次访问.

    转发
    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

        本文链接:https://www.haomeiwen.com/subject/gkjdnftx.html