请求对象Request

1.概念

<1>请求:请求:获取资源。在BS架构中,就是客户端浏览器服务器端发出询问。
<2>请求对象:就是在项目当中用于发送请求的对象。
<3>对象创建:需要实现ServletRequest和HttpservletRequest接口,不过在tomcat底层已经帮我们创建好了请求对象。

关系视图如下:
在这里插入图片描述

2.Request获取路径的相关方法

注:浏览器返回【本机地址】ipv6和ipv4的地址是本地host文件控制

//Request获取路径的相关方法
@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取虚拟目录名称getContextPath()
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //2.获取Servlet映射路径getServletPath()
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        //3.获取访问者ip getRemoteAddr()
        String remoteAddr = req.getRemoteAddr();
        //http://127.0.0.1:8080    //127.0.0.1
        //http://localhost:8080[和host文件的配置有关] //0:0:0:0:0:0:0:1
        System.out.println(remoteAddr);
        //4.获取请求消息的数据getQueryString()
        //?username=zhangsan&password=123456
        String queryString = req.getQueryString();
        System.out.println(queryString);
        //5.获取统一资源标识符 getRequestURI()
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        //URL更精确,表示范围比URI小
        //6.获取统一资源定位符 getRequestURL()
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        //浏览器访问http://127.0.0.1:8080/ServletRequest/ServletDemo1?username=zhangsan&password=123456
    }

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

打印结果:
-----------------------------------------------------------------------
/ServletRequest
/ServletDemo1
127.0.0.1
null
/ServletRequest/ServletDemo1
http://127.0.0.1:8080/ServletRequest/ServletDemo1

3.Request获取请求头内信息的相关方法
//Request获取请求头内信息的相关方法
@WebServlet("/ServletDemo2")
public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求头名称[可以有多个值]不区分大小写
        //1.getHeader("请求头名称")根据请求头名称获取值
        String connection = req.getHeader("Connection");
        System.out.println(connection);
        System.out.println("------------------------");
        //返回类型和前面不同,返回为集合
        //2.getHeader("请求头名称")根据请求头名称[有多个值]获取多个值
        String AcceptEncoding = req.getHeader("Accept-Encoding");
        System.out.println(AcceptEncoding);
        System.out.println("------------------------");
        //3.getHeaderNames获取所有的请求头名称
        Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            String value = req.getHeader("s");
            System.out.println(headerName + "..." + value);
        }
    }

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

打印结果:
----------------------------------------------------------------------
keep-alive
------------------------
gzip, deflate
------------------------
host...null
user-agent...null
accept...null
accept-language...null
accept-encoding...null
connection...null
cookie...null
upgrade-insecure-requests...null
sec-fetch-dest...null
sec-fetch-mode...null
sec-fetch-site...null
sec-fetch-user...null
4.获取请求参数相关信息的方法

表单属性为【form action="/ServletRequest/ServletDemo3" method=“post” autocomplete=“off”】
在这里插入图片描述

@WebServlet("/ServletDemo3")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.getParameter()根据名称获取数据
        String value = req.getParameter("name");
        System.out.println(value);
        System.out.println("-------------------------");
        //2.getParameterValues()根据名称获取所有数据
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbies));
        /*for (String hobby : hobbies) {
            System.out.println(hobby);
        }*/
        System.out.println("-------------------------");
        //3.getParameterNames()获取所有名称
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.println(s);
        }
        System.out.println("-------------------------");
        //4.getParameterMap()获取所有参数的键值对,存入Map集合
        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<String> keys = parameterMap.keySet();
        for (String key : keys) {
            String[] values = parameterMap.get(key);
            System.out.println(key + Arrays.toString(values));
        }
    }

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

打印结果:
----------------------------------------------------------------------
zhangsan
-------------------------
[study, game, book]
-------------------------
name
password
hobby
-------------------------
name[zhangsan]
password[123456]
hobby[study, game, book
5.通过流对象获取数据

【请求方法必须是post方式】
表单属性为【form action="/ServletRequest/ServletDemo7" method=“post” autocomplete=“off”】
在这里插入图片描述

//通过流对象获取数据[请求方法必须是post方式]
//不是自己new的都不需要释放资源
@WebServlet("/ServletDemo7")
public class ServletDemo7 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //字符流
        /*BufferedReader br = req.getReader();
        String line = br.readLine();
        while (line != null) {
            System.out.println(line);
            line = br.readLine();
        }*/
        //字节流[应用场景,上传文件]
        ServletInputStream sis = req.getInputStream();
        byte[] bytes = new byte[1024];
        int len = sis.read(bytes);
        while (len!=-1){
            System.out.println(new String(bytes,0,len));
            len = sis.read(bytes);
        }
    }

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

打印结果:
---------------------------------------------------------------------
name=%E6%9D%8E%E5%9B%9B&password=123&hobby=game
6.请求转发

表单属性为【form action="/ServletRequest/ServletDemo9" method=“post” autocomplete=“off”】
在这里插入图片描述

//ServletDemo9
@WebServlet("/ServletDemo9")
public class ServletDemo9 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求字符编码,防止乱码
        req.setCharacterEncoding("utf-8");
        //设置共享数据setAttribute(键,值)
        System.out.println("ServletDemo9设置共享数据");
        req.setAttribute("name","zhangsan");
        //getRequestDispatcher()获取请求调度对象[中介]
        RequestDispatcher rd = req.getRequestDispatcher("/ServletDemo10");
        //实现转发功能[参数为请求对象和相应对象]
        rd.forward(req,resp);//所以ServletDemo9中接收的请求参数也会传递到10中
    }

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

//ServletDemo10
@WebServlet("/ServletDemo10")
public class ServletDemo10 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求字符编码,防止乱码
        req.setCharacterEncoding("utf-8");
        //获取共享数据
        System.out.println("ServletDemo10获取共享数据");
        Object name = req.getAttribute("name");
        System.out.println(name);
        System.out.println("获取ServletDemo7的请求参数");
        System.out.println(req.getParameter("name"));
    }

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

打印结果:
----------------------------------------------------------------------
ServletDemo9设置共享数据
ServletDemo10获取共享数据
zhangsan
获取ServletDemo7的请求参数
王五
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值