Servlet学习笔记(三)之HttpServletRequest

来源:互联网 发布:淘宝运营推广区别 编辑:程序博客网 时间:2024/06/05 04:43

HttpServletRequest(HttpServletRequest 想比 ServletRequest 添加与协议相关 API)对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户信息。

通过Request对象进行的常用操作:

  • 获取客户机信息
  • 获取请求头信息
  • 获取请求参数
  • 利用请求域传递对象

这里写图片描述

(一)获取客户机信息

常用方法:

public String getContextPath();/获取请求的上下文路径public StringBuffer getRequestURL();/返回客户端发出请求的完整URLpublic String getRequestURI();/返回请求行中的资源名部分public String getQueryString();/返回请求行中的参数部分public String getMethod();/返回客户机请求方式,如get,post等public String getRemoteAddr();/返回发出请求的客户机的IP地址
public class RequestServlet1 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 问题一 区分 getRequestURL 和 getRequestURI        System.out.println("url:" + request.getRequestURL());        System.out.println("uri:" + request.getRequestURI()); // 返回        // /day06/request1        // 问题二:了解 通过 getQueryString 可以获得 get方式提交查询串 url中?后面部分        System.out.println("querystring:" + request.getQueryString());        // 获得客户端ip        System.out.println("ip: " + request.getRemoteAddr());        // 通过 getContextPath 获得工程虚拟目录名称        System.out.println(request.getContextPath()); // 返回 /requesttest        // 通过getMethod 获得请求方式        System.out.println("请求方式 : " + request.getMethod());        // 问题: 获得当前访问资源路径 --- /request1        System.out.println("当前访问资源路径 :"                + request.getRequestURI().substring(                        request.getContextPath().length()));    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}

输出:

url:http://localhost:8080//requesttest/request1uri://requesttest/request1querystring:nullip: 127.0.0.1//requesttest请求方式 : GET当前访问资源路径 :/request1

区别URL(统一资源定位符)与URI(统一资源标识符):
url:http://localhost/requesttest/request1 — 完整
uri:/requesttest/request1 —- 部分

URI 包含 URL的 ,URL 一定完成路径,URI可以相对路径
http://localhost/requesttest/request1 是一个URL 同时也是 URI
./hello /requesttest/request1 —- 都是URI 不是URL

querystring:null
由于请求中没有查询串,因此querystring为null,如果改成http://localhost/requesttest/request1?username=megustas则输出变为

querystring:username=megustas

即通过 getQueryString 可以获得 get方式提交查询串 url中?后面部分

获得当前访问资源路径 :

request.getRequestURI().substring(request.getContextPath().length());

在URI的基础上去掉工程虚拟目录名称的部分,剩下的就是当前访问的资源的路径。

(二)获取请求头信息

getHeader 获得头信息的值,转换一个字符串
getHeaders 获得头信息值 ,获得Enumeration
getHeaderNames 获得所有头信息名称 返回 Enumeration

  • 掌握getHeader使用,遍历Enumeration 获得所有头信息
public class RequestServlet2 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("test...");        // 获得指定头信息字段 Accept-Encoding: gzip, deflate        String value = request.getHeader("Accept-Encoding"); // 如果头信息存在多个值,将多个值拼接到一起,形成String        System.out.println(value); // gzip, deflate        System.out.println("--------------------------------");        // 获得所有头信息内容 ---- 获得所有头信息名称        Enumeration<String> enumeration = request.getHeaderNames();        while (enumeration.hasMoreElements()) {            String name = enumeration.nextElement(); // name 就是一个头信息名字            System.out.println(name + ":" + request.getHeader(name));        }    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}

通过头信息可以进行防盗链,存在合法referer不是盗链,否则控制目标资源无法访问 (因为直接输入网址的情况没有refer的头信息)
* 通过URL 绕过盗链判断

(三)获取请求参数

请求参数:用户通过请求提交服务器的一些数据—–< a href=”url?xxx=xxx” >、< form method=”get”> 、 < form method=”post”>

可以通过getParameter(name)方法来获取
html页面:

<body>   <h1>分别以get 和 post方式 提交数据</h1>   <h1>第一种 通过超链接 提交数据 以?方式</h1>   <!-- 包括两个参数的 name 和 city -->   <a href="/requestexample/request4?name=zhangsan&city=beijing">超链接提交数据</a>   <h1>第二种 通过form的post方式提交数据</h1>   <form action="/requestexample/request4" method="post">      请输入姓名 <input type="text" name="name" /><br/>     请输入城市 <input type="text" name="city" /> <br/>     <input type="submit" value="提交" />   </form>  </body>
public class RequestServlet4 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 通过getParameter 获得请求数据        String name = request.getParameter("name");        System.out.println(name);        String city = request.getParameter("city");        System.out.println(city);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}
0 0
原创粉丝点击