Request
封装了客户端所有的请求信息,服务器创建了request,把它当成一个塑料袋来用,把所有请求数据往里面一塞,就给了servlet,servlet的doGet、doPost方法都会得到她
请求行
请求头
空行
请求体(GET没体)
回忆一下http协议,请求协议中的数据都可以通过request对象来获取
获取常用信息
获取客户端ip
request.getRemoteAddr();
请求
request.getMethod();
可能是post也可能是Get
package baoming;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class EServlet extends HttpServlet {
/*演示,获取客户端的ip地址,获取请求方式,获取User-Agent,得到
客户端的信息,(操作系统浏览器)*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*获取客户端ip地址*/
String addr = request.getRemoteAddr();
System.out.println("ip"+addr);
/*获取请求方式*/
System.out.println("请求方式"+request.getMethod());
/*获取名为User-Agent的请求头*/
String userAgent = request.getHeader("User-Agent");
System.out.println(userAgent);
}
}
获取http请求头
request.getHeader(String name);
适用于单值头
request.getIntHeader("aa");
适用于单值int类型的请求头
request.getDateHeader("aa");
适用于单值毫秒类型的请求头
request.getHeaders("aa");
适用于多值请求头
获取请求URL
http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy
request.getScheme();
获取协议 http
request.getServerName();
获取服务器名 localhost
request.getServerPort();
获取服务器端口 8080
request.getContextPath();
获取项目名 /day10_2
request.getServletPath();
获取Servlet路径 /AServlet
request.getQueryString();
获取参数部分,即问号后面的部分 username=xxx&password=yyy
request.getRequestURI();
获取请求URI,等于项目名+Servlet路径 /day10_2/AServlet
request.getRequestURI();
获取请求URL,等于不包含参数的整个请求路径 http://localhost:8080/day10_2/AServlet
response.getWriter().print(request.getScheme()+"<br/>");
/*获取协议*/
response.getWriter().print(request.getServerName()+"<br/>");
/*获取服务器名*/
response.getWriter().print( request.getServerPort()+"<br/>");
/*获取服务器端口*/
response.getWriter().print(request.getContextPath()+"<br/>");
/*获取项目名*/
response.getWriter().print(request.getServletPath()+"<br/>");
/*获取Servlet路径*/
response.getWriter().print(request.getQueryString()+"<br/>");
/*获取参数部分,即问号后面的部分*/
response.getWriter().print(request.getRequestURI()+"<br/>");
/*获取请求URI,等于项目名+Servlet路径*/
response.getWriter().print(request.getRequestURI()+"<br/>");
/*获取请求URL,等于不包含参数的整个请求路径*/
image.png
使用refere请求头完成防盗链
package baoming;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class EServlet extends HttpServlet {
/*使用Referer请求头,来防盗链*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String referer = request.getHeader("Referer");
System.out.println(referer);
if(referer==null||!referer.contains("localhost")){
request.sendRedirect("www.baidi.com");
}
else {
System.out.println("hello");
}
}
}
获取请求参数
- 获取请求参数,请求参数是由客户端发送给服务器的,有可能是在请求体中(Post),也有可能是在URL之后,(GET)
- 请求参数,有一个参数一个值的,也有一个参数多个值得,
String getParameter(String name):获取指定名称的请求参数值
String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
Enumeration<String>getParameterNames();获取所有请求参数名称
Map<String String[]> getParameterMap();获取所有请求参数,其中key为参数名,value为参数值
案例
超链接参数,表单参数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>测试请求参数</h1>
<a href="">点击这里</a>
<hr/>
<form action="/day10/EServlet?xxx=XXX&yyy=YYY" method="post">
用户名:<input type="text" name="username"/><br>
密码:<input type="password" name="password"/><br>
爱好:<input type="checkbox" name="hobby" value="cf"/>
<input type="checkbox" name="hobby" value="sj"/>
<input type="checkbox" name="hobby" value="ddm"/>
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
package baoming;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
public class EServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] hobby = request.getParameterValues("hobby");
System.out.println(username+","+password+","+ Arrays.toString(hobby));
/*测试获取所有请求数据的名称*/
Enumeration names = request.getHeaderNames();
while (names.hasMoreElements()){
System.out.println(names.nextElement());
}
/*获取所有请求参数,封装到Map中*/
Map<String,String[]> map = request.getParameterMap();
for (String anme : map.keySet()){
String[] values = map.get(name);
System.out.println(name+"="+Arrays.toString(values));
}
}
}
网友评论