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()
- 获取请求方式:GET
- 方法
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():获取字节输入流 可以操作所有类型数据
- 在从流对象中拿数据
- 获取流对象
- 步骤
- 请求体:只有post请求方式 才有请求体 在请求体重封装了POST请求的请求参数
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); } }
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本