Servlet中的HttpServletRequest

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版权协议,转载请附上原文出处链接和本声明。