JAVA语言之解读javaWeb_Request对象
从安 2019-06-05 来源 : 阅读 886 评论 0

摘要:本篇文章主要讲述JAVA语言之解读javaWeb_Request对象,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述JAVA语言之解读javaWeb_Request对象,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA语言之解读javaWeb_Request对象

一.Http协议的概念及作用

1.什么是HTTP协议?

(HTTP,HyperText Transfer Protocol)超文本传输协议, 是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

2.HTTP协议的作用

HTTP协议规范了传输信息的内容和格式

 

二..HTTP,查看浏览器的传输过程

1).启动浏览器;

   2).按F12,启动:调试模式,网络(NetWork)

   3).刷新网页,重新发送请求。

   4).可以查看请求信息:

 

三.HTTP协议_浏览器请求信息的组成

1.请求行

GET /资源路径 HTTP/1.1

2.请求头

请求头:一堆内容,作为了解即可


Host: localhost:9090 (服务器的域名)

Connection: keep-alive (网络连接是持久的)

Content-Length: 12          (发送数据的大小,单位字节)

Cache-Control: max-age=0  (设置缓存数据的存活时间,单位秒)

Origin: //localhost:9090 (指示了请求来自于哪个站点——服务器名称)

Upgrade-Insecure-Requests: 1  (如果存在更安全的响应,客户端优先选择加密及带有身份验证的响应)

Content-Type: application/x-www-form-urlencoded (发送数据的媒体类型——发挥作用类似后缀名:.mp3 .avi)

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 (当前系统和浏览器版本)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Referer: //localhost:9090/day01/1.html

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9

Cookie: JSESSIONID=98006861B5044ACC8D5C7840C93C17DA  

3.请求体

         如果提交方式为get,则没有内容

         如果提交内容是post,则会存放提交内容的键值对形式

 

四.request对象的基本概念

request,在java中为HttpServletRequest对象

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。

 

注:request对象封装了http请求中的所有信息,是由服务器创建

 

五.request对象_获取请求行信息

java中request对象的六个方法获取请求行的所有信息

获取提交方法(getMethod) 

获取请求行中的资源路径(getRequestURI)

获取完整的请求URL(getRequestURL)

获取协议名称/版本(getProtocol)

获取IP地址(getRemoteAddr)

获取本地端口(getLocalPort)

 

代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        获取提交方法(getMethod)
        System.out.println("请求行方法:"+req.getMethod());
//        获取请求行中的资源路径(getRequestURI)
        System.out.println("请求行资源路径:"+req.getRequestURI());
//        获取完整的请求URL(getRequestURL)
        System.out.println("完整的请求URL:"+req.getRequestURL());
//        获取协议名称/版本(getProtocol)
        System.out.println("获取协议,版本:"+req.getProtocol());
//        获取IP地址(getRemoteAddr)
        System.out.println("获取IP地址:"+req.getRemoteAddr());
//        获取本地端口(getLocalPort)
        System.out.println("获取本地端口:"+req.getLocalPort());
    }

当有http请求时,会输出请求行信息

运行结果 

  请求行方法:GET

  请求行资源路径:/loginServlet

  完整的请求URL: //localhost :8Q8Q/loginServlet

  获取协议,版本:HTTP/1. 1

  获取IP地址:0:0:0:0:0:0:0:1 ◄---點认使用IPV6地址

  获取本地端口 : 8080


六.request对象_请求头信息

两个方法

1. String getHeader(String name);以String的形式返回指定name的值 

1. Enumeration getHeaderNames(),返回此请求包含的所有头名称的枚举 

代码

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //显示请求头信息
    System.out.println("通过头名称name查询指定信息");
    System.out.println("User-Agent"+req.getHeader("User-Agent"));
    System.out.println("查询所有信息");
    Enumeration hn = req.getHeaderNames();
    while(hn.hasMoreElements()){
        String str=hn.nextElement();
        System.out.println(str+req.getHeader(str));
    }
}

 

七.request对象_请求头_通过referer实现防盗链

1.什么是盗链?

通过其他网站访问本网站的一些资源

 

2.如何防止盗链?

思路

通过网页发送的请求eg.download.jsp

如果download.jsp中的请求,来源于盗链者服务器,我们就显示不可以下载;

如果download.jsp中的请求,来源于正规服务器,我们就显示可以下载;

 

实现

通过referer获取请求头信息

String header=request.getHeader(“referer”); 

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String referer = req.getHeader("referer");
    System.out.println(referer);
    if(referer.startsWith("//localhost:8080/zc/")||referer.startsWith("//127.0.0.1:8080/zc/")){
        System.out.println("正常连接");
    }else{
        System.out.println("盗链连接");
    }
}

盗链主要通过标红的地方判断

 

八.request对象_获取请求体

接下来说的是无论是get提交还是post提交,即无论请求体中有没有数据,都是可以使用的

1).public String getParameter(String key):获取某个键的值。

    2).public String[] getParameterValues(String key):获取一个键的多个值(复选框、多选下拉列表)

    3).public MapgetParameterMap();获取所有的键值对,并封装到一个Map中.

    4).public void setCharacterEncoding(String charsetName):设置request的解码方式,如果参数中有中文,

                                       需要使用:"UTF-8"。

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //获取请求体信息
    System.out.println("获取请求体信息");
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    System.out.println("username:"+username);
    System.out.println("password:"+password);
    System.out.println("-----------------------------------------------");
    //当一个name对应多个值时,例如复选框,下拉列表,使用getParameterValues
    String[] pv = req.getParameterValues("hobby");
    for (String s : pv) {
        System.out.println(s);
    }
    System.out.println("-----------------------------------------------");
    //getParameterMap,获取所有的键值对,并封装到一个对象中
    Map map = req.getParameterMap();
    Set strings = map.keySet();
    for (String string : strings) {
        System.out.println(string+" : "+map.get(string));
    }
}

 

九.request对象_BeanUtils工具类的使用

1.什么是"BeanUtils":它是一个第三方的软件包。

作用:自动解析客户端的请求,并根据一个Map,自动封装JavaBean。

2..使用步骤:

        1).将BeanUtils所需jar包复制到lib目录下,并关联到模块中。

        2).使用BeanUtils工具包:

1.    案例代码

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    User user=new User();
    //使用工具类
    try {
        BeanUtils.populate(user,req.getParameterMap());
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    System.out.println(user);
}

 

十.request对象_请求转发

1).什么是“请求转发”:当前Servlet进行一部分处理,然后“转发”给另一个Servlet继续处理。

2).第一个Servlet,要转发给另一个Servlet,必须将request和response对象传给另一个Servlet。

 

语句:

request.getRequestDispatcher(“路径”).forward(request,response);

req.getRequestDispatcher("路径").forward(req,resp);

 

十一.request对象_其它功能_域对象的概念

1).什么是“域对象”:是指可以在“一定范围内”可以共享数据的一种对象。

2).几个重要的域对象:

    1).request:可以在转发的所有路径上,共享同一个request对象。

    2).session:

    3).ServletContext:

 

十二.request对象的生命周期

    1).客户端每次发送请求,Tomcat都会为本次请求创建一个新的Request对象;

    2).在Servlet的处理请求的service()方法执行过程中,一直存活。

                 如果被转发,此request会被传到另一个Servlet,继续存活;

    3).直到service()执行完毕,request对象立即被清理。


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程