request功能

request功能

1.获取请求消息数据

  •  获取请求行数据
    • 方法
      • 获取请求方式:GET
        • String getMethod()
      • 获取虚拟目录:/day14
        • String getContextPath()
      • 获取Serclet路径:/demo1
        • String getServletPath()
      • 获取get方式请求参数:name=zhangsan
        • String getQueryString()
      • 获取请求URI:/day14/demo1
        • String getRequestURI()
        • StringBuffer getRequestURL()
      • 获取协议以及版本:HTTP/1.1
        • String getProtocoll()
      • 获取客户机的IP地址:
        • String getRemoteAddr()

java代码

复制代码
@WebServlet("/request")
public class RequestDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //获取虚拟目录
        String contextpath = req.getContextPath();
        System.out.println(contextpath);
        //获取Serclet路径
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        //获取get方式请求参数
        String queryString = req.getQueryString();
        System.out.println(queryString);
        //获取请求URI
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        //获取协议以及版本
        String protocol = req.getProtocol();
        System.out.println(protocol);
        //获取客户机的IP地址
        String remoteAddr = req.getRemoteAddr();
        System.out.println(remoteAddr);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
复制代码

运行结果

  • 获取请求头数据
    • 方法
      • String getHeader(String name):通过请求头的名称或请求头的值
      • Enumeration<String> getHeaderNames():获取所有的请求头名称

java代码

复制代码
@WebServlet("/request02")
public class RequestDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Enumeration<String> hn = req.getHeaderNames();
        while (hn.hasMoreElements()){
            String name = hn.nextElement();
            String value = req.getHeader(name);
            System.out.println(name+"---"+value);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
复制代码

运行结果

  • 获取请求体数据
    • 请求体:只有post请求方式 才有请求体 在请求体重封装了POST请求的请求参数
      • 步骤
        • 获取流对象
          • BufferedReader getReader():获取字符输入流 只能操作字符数据
          • ServletInputStream getInputStream():获取字节输入流 可以操作所有类型数据
        • 在从流对象中拿数据  

java代码

复制代码
@WebServlet("/request05")
public class RequestDemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BufferedReader br = req.getReader();
        String line=null;
        while ((line = br.readLine())!=null){
            System.out.println(line);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
    }
复制代码

运行结果

2.其他功能

  • 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
    • String getParameter(String name):根据参数名获取参数值
    • String[] getParameterValues(String name):根据参数名获取参数值的数组
    • Enumeration<String> getParameterNames():获取所有请求的参数名称
    • Map<String,String[]> getParameterMap():获取所有参数的map集合

java代码

复制代码
@WebServlet("/request06")
public class RequestDemo06 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Get");
        //根据参数名获取参数值
        System.out.println("参数名获取参数值");
        String username = req.getParameter("username");
        System.out.println(username);
        //根据参数名称获取参数值的数组
        System.out.println("参数名称获取参数值的数组");
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }
        //获取所有请求的参数名称
        System.out.println("所有请求的参数名称");
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            System.out.println(name);
            String value = req.getParameter(name);
            System.out.println(value);
            System.out.println("-----------------------");
        }

        //获取所有参数的map集合
        System.out.println("所有参数的map集合");
        Map<String, String[]> parameterMap = req.getParameterMap();
        //遍历
        Set<String> keySet = parameterMap.keySet();
        for (String name : keySet) {
            //获取键获取值
            String[] values = parameterMap.get(name);
            System.out.println(name);
            for (String value : values) {
                System.out.println(value);
            }
            System.out.println("-------------------");
        }


    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post");
        doGet(req,resp);
    }
复制代码

HTML代码

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>明文提交</h3>
    <form action="/request06" method="get">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="text" placeholder="请输入密码" name="password"><br>

        <input type="checkbox" name="hobby" value="game">游戏
        <input type="checkbox" name="hobby" value="study">学习
        <br>

        <input type="submit" name="提交">
    </form>
    <hr>
    <h3>密文提交</h3>
    <form action="/request06" method="post">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="text" placeholder="请输入密码" name="password"><br>

        <input type="checkbox" name="hobby" value="game">游戏
        <input type="checkbox" name="hobby" value="study">学习
        <br>

        <input type="submit" name="提交">
    </form>

</body>
</html>
复制代码

运行结果

  • 请求转发:一种在服务器内部的资源跳转方式
    • 步骤
      • 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
      • 使用RequestDisPatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
    • 特点:
      • 浏览器地址栏路径不发生变化
      • 只能转发到当前服务器内部资源中
      • 转发是一次请求

java代码

RequestDemo07类

复制代码
@WebServlet("/request07")
public class RequestDemo07 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("request07被访问了....");
        req.getRequestDispatcher("/request08").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post");
        doGet(req,resp);
    }
复制代码

RequestDemo08类

复制代码
@WebServlet("/request08")
public class RequestDemo08 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("request08被访问了....");

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post");
        doGet(req,resp);
    }
复制代码

运行结果

  • 共享数据
    • 域对象:一个作用范围的对象 可以在范围内共享数据
    • request域:代表一次请求的范围 一般用于请求转发的多个资源中共享数据
    • 方法
      • void serAttribute(String name,Object obj):存储数据
      • Object getAttitude(String name):通过键获取值
      • void removeAttribute(String name):通过键移除值对

java代码

RequestDemo07类

复制代码
@WebServlet("/request07")
public class RequestDemo07 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //存储数据到request域中
        req.setAttribute("msg","hello");
        System.out.println("已传入");
        req.getRequestDispatcher("/request08").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post");
        doGet(req,resp);
    }
}
复制代码

RequestDemo08类

复制代码
@WebServlet("/request08")
public class RequestDemo08 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("request08被访问了....");

        Object msg = req.getAttribute("msg");
        System.out.println(msg);

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post");
        doGet(req,resp);
    }
}
复制代码

运行结果

  • 获取ServletContext

java代码

复制代码
@WebServlet("/request09")
public class RequestDemo09 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = req.getServletContext();
        System.out.println(servletContext);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
复制代码

运行结果

posted @   baimingze  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示