1、获取请求行
@WebServlet(name = "requestServlet01", urlPatterns = "/requestServlet01")
public class RequestServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、获取请求行
//获取请求的资源路径
System.out.println(req.getRequestURI());//资源路径(哪个项目):/day033/requestServlet01
System.out.println(req.getRequestURL().toString());//完整路径:http://localhost:8080/day033/requestServlet01
//获取请求方式
System.out.println("请求方式"+req.getMethod());
//获取get请求参数
System.out.println("get的请求参数"+req.getQueryString());
//获取客户机的ip和浏览器的端口
System.out.println("远程地址:"+req.getRemoteAddr()+"远程端口:"+req.getRemotePort());
}
2、获取请求头
常见的请求头

@WebServlet(name = "requestServlet01", urlPatterns = "/requestServlet01")
public class RequestServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//2、获取请求头
// 获取指定的请求头——getHeader里面写需要获取的请求头的key,根据key拿到请求头里的value——
String value = req.getHeader("User-Agent");
System.out.println(value);
//批量获取请求头
Enumeration<String> names = req.getHeaderNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
System.out.println(name + ":" + req.getHeader(name));
}
}
3、获取请求体
getParamter为了获取请求参数
@WebServlet(name = "requestServlet01", urlPatterns = "/requestServlet01")
public class RequestServlet01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求体
//单个获取请求值
System.out.println(req.getParameter("username"));
System.out.println(req.getParameter("password"));
//获取指定名称的值,但是他的值有多个
String[] names = req.getParameterValues("username");
System.out.println(names);
String[] passwords = req.getParameterValues("password");
System.out.println(passwords);
//批量获取name和值
Map<String, String[]> map = req.getParameterMap();
//map的迭代
Set<Map.Entry<String, String[]>> entries = map.entrySet();
System.out.println(entries);
for (Map.Entry<String, String[]> entry : entries) {
String key = entry.getKey();
String[] value = entry.getValue();
System.out.println("name:" + key + "-value:" + Arrays.toString(value));
}
}
}
4、重定向
@WebServlet(name = "requestServlet03", urlPatterns = "/requestServlet03")
public class RequestServlet03 extends HttpServlet {
//重定向
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置相应行
resp.setStatus(302);
//设置响应头--告诉浏览器重定向地址
resp.setHeader("location","https://www.baidu.com");
//简写
req.setAttribute("name", "zs");
resp.sendRedirect("http://localhost:8080/day033/requestServlet02");
}
5、转发
@WebServlet(name = "requestServlet04", urlPatterns = "/requestServlet04")
public class RequestServlet04 extends HttpServlet {
//转发
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我要转发了");
req.setAttribute("name","准备转发");
//转发到另一个资源,服务器内部行为
req.getRequestDispatcher("/requestServlet02").forward(req,resp);
}
}
6、防盗链
通过超链接点击网站会携带这个头,请求的来源

而直接访问网址,是没有这个东西的

请求头中的referer这个头可以用来限制请求方式,例如,只能通过超链接进行访问,则比较请求头里携带的referer是否是所规定的,限制用户不可以通过其他方式或者直接访问网址的方式进行访问。
@WebServlet(name = "requestServlet05", urlPatterns = "/requestServlet05")
public class RequestServlet05 extends HttpServlet {
//重定向
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charser=utf-8");
//获取请求头里的referer的值
String referer = req.getHeader("referer");
//判断referer是否为null,是否有上级页面
if (referer == null || referer.trim().equals("")){
//动态的获取网站的前缀:req.getContextPath()
resp.sendRedirect(req.getContextPath()+"/demo1.html");
return;
}
//判断referer的地址是否是我们指定的网页链接
if(!referer.startsWith("http://www.baidu.com")){
System.out.println("非法访问");
resp.sendRedirect(req.getContextPath()+"/demo1.html");
return;
}
resp.getWriter().write("访问成功");
}
}
版权声明:本文为qq_43163943原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。