4.Request(传智播客)

本文详细介绍了Servlet中关于请求处理的相关API,包括获取客户端IP、请求方式、请求头、请求路径等。同时,讲解了如何使用Referer防止盗链,获取请求参数的方法,以及请求转发的概念。还涉及URL编码、不同路径的处理,如Servlet路径、转发路径、重定向路径以及资源路径的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.常用API

  • 获取客户端IP:getRemoteAddr()
  • 获取请求方式:getMethod()
  • 获取请求头:getHeader(),getIntHeader(),getLongHeader()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   System.out.println("IP:"+req.getRemoteAddr());
    System.out.println("method:"+req.getMethod());
    String browser = req.getHeader("User-Agent");
    if(browser.contains("Chrome")){
        System.out.println("你使用的是谷歌浏览器。");
    }else if(browser.contains("Mozilla")){
        System.out.println("你使用的是火狐浏览器。");
    }else if(browser.contains("Safari")){
        System.out.println("你使用的是苹果浏览器。");
    }
}

2.获取请求路径相关方法(http://localhost:8080/javaWeb/A?name=steven)

  • 获取请求协议:getScheme()
  • 获取服务器名称:getServerName()
  • 获取服务器端口号:getServerPort()
  • 获取项目名称:getContextPath()
  • 获取Servlet名称:getServletPath()
  • 获取请求参数字符串:getQueryString()
  • 获取项目名称和Servlet名称:getRequestURI()
  • 获取不包括请求参数的url:getRequestURL()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("获取请求协议:"+req.getScheme());
    System.out.println("获取服务器名称:"+req.getServerName());
    System.out.println("获取服务器端口号:"+req.getServerPort());
    System.out.println("获取项目名称:"+req.getContextPath());
    System.out.println("获取Servlet名称:"+req.getServletPath());
    System.out.println("获取请求参数字符串:"+req.getQueryString());
    System.out.println("获取项目名称和Servlet名称:"+req.getRequestURI());
    System.out.println("获取不包括请求参数的url:"+req.getRequestURL());
}

在这里插入图片描述

3.使用Referer请求头完成防盗链

<a href="http://localhost:8080/javaWeb/A">A</a>
public class AServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String referer = req.getHeader("Referer");
        if(referer.contains("localhost")){
            System.out.println("该请求是本站发出的!");
        }else{
            System.out.println("该请求不是本站发出的!");
        }
    }
}

4.获取请求参数

  • getParameter(String name)
  • getParameterValues(String name)

5.请求转发(留头不留体)
当客户端请求Servlet时,Servlet不能完成请求处理,而是将请求转发给其他Servlet处理,这样的过程叫做请求转发。

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("AAA");
    resp.setHeader("aaa","AAA");
    resp.getWriter().print("hello");
    req.getRequestDispatcher("/B").forward(req,resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("BBB");
    resp.getWriter().print("hello,world");
}

6.url编码
客户端采用url编码来避免服务器和客户端在传输参数的过程中造成中文字节的丢失,post请求默认使用url编码,get请求不使用url编码,tomcat会自动完成url的解码。

7.路径

  • Servlet路径:url-pattern
  • 转发:以“/”开头,是相对http://localhost:8080/javaWeb/的路径
  • 重定向路径(客户端路径):相对当前主机http://localhost:8080/的路径,所以需要自己手动添加项目名,如response.sendRedirect("/javaWeb/Aservlet")
  • ServletContext获取资源路径:相对当前项目目录,即当然index.jsp所在目录
  • ClassLoader获取资源路径:相对classes目录
  • Class获取资源路径:以“/”开头相对classes目录,不以“/”开头相对当前.class文件所在目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值