您的位置:首页 > 理论基础 > 计算机网络

Servlet学习笔记(三)之HttpServletRequest

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

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

获取客户机信息

获取请求头信息

获取请求参数

利用请求域传递对象



(一)获取客户机信息

常用方法:

public String getContextPath();/获取请求的上下文路径
public StringBuffer getRequestURL();/返回客户端发出请求的完整URL
public 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/request1
uri://requesttest/request1
querystring:null
ip: 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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Request