一、 获取请求行数据
GET /day14/demo1?name=zhangsan HTTP/1.1
方法:
(1)获取请求方式 :GET
* String getMethod()
(2)(重要)获取虚拟目录:/day14
* String getContextPath()
(3)获取Servlet路径: /demo1
* String getServletPath()
(4)获取get方式请求参数:name=zhangsan
* String getQueryString()
(5)(重要)获取请求URI:/day14/demo1
* String getRequestURI(): /day14/demo1
* StringBuffer getRequestURL() :http://localhost/day14/demo1
* URL:统一资源定位符 : http://localhost/day14/demo1
* URI:统一资源标识符 : /day14/demo1 (与URL相比表示的范围更大)
(6) 获取协议及版本:HTTP/1.1
* String getProtocol()
(7)获取客户机的IP地址:
* String getRemoteAddr()
@WebServlet("/RequestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取请求方式 :GET
String method = request.getMethod();
System.out.println(method);
//2.(*)获取虚拟目录:/ 未设置
String contextPath = request.getContextPath();
System.out.println(contextPath);
//3. 获取Servlet路径: /RequestDemo
String servletPath = request.getServletPath();
System.out.println(servletPath);
//4. 获取get方式请求参数:name=Java
String queryString = request.getQueryString();
System.out.println(queryString);
//5.(*)获取请求URI:/RequestDemo
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURI);/RequestDemo
System.out.println(requestURL);//http://localhost:8080/RequestDemo
//6. 获取协议及版本:HTTP/1.1
String protocol = request.getProtocol();
System.out.println(protocol);
//7. 获取客户机的IP地址:0:0:0:0:0:0:0:1(IPV6)
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
}
}
二、获取请求头数据
方法:
* (*)String getHeader(String name):通过请求头的名称获取请求头的值
* Enumeration<String> getHeaderNames():获取所有的请求头名称
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//演示获取请求头数据
//1.获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
//2.遍历
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
//根据名称获取请求头的值
String value = request.getHeader(name);
System.out.println(name+"---"+value);
}
}
}
防盗链应用:
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//演示获取请求头数据:referer
String referer = request.getHeader("referer");
System.out.println(referer);//http://localhost/day14/login.html
//防盗链
if(referer != null ){
if(referer.contains("/day14")){
//正常访问,表示是从官方主页上跳转过来的
// System.out.println("播放电影....");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("播放电影....");
}else{
//盗链,不是从官方主页上跳到播放页面的就拦截
//System.out.println("想看电影吗?来优酷吧...");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("想看电影吗?来优酷吧...");
}
}
}
}
三、 获取请求体数据:
* 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
* 步骤:
(1)获取流对象
* BufferedReader getReader():获取字符输入流,只能操作字符数据
* ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
(2)再从流对象中拿数据
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求消息体--请求参数
//1.获取字符流
BufferedReader br = request.getReader();
//2.读取数据
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
通过 Login.html
提交表单:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="/requestDemo" method="post">
<input name="username" placeholder="请输入用户名">
<input name="password" placeholder="请输入密码">
<input type="submit" value="提交">
</form>
</body>
</html>