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


编码-解码

解决办法 :
先使用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就搞定了

文件夹

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 7,266评论 3 56
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,402评论 0 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,621评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11
  • 嗨~ 这么多天了,自从你跟我说,还是做朋友吧之后,总是想跟你说点什么,但又怕一时的情绪发泄,换来一个挽不回...
    因小胖阅读 295评论 0 0