请求
请求对象
关于请求
请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问。在B/S架构中,就是客户浏览器向服务器发出询问。在JavaEE工程中,客户浏览器发出询问,要遵循HTTP协议规定。
请求对象,就是在JavaEE工程中,用于发送请求的对象。我们常用的对象就是ServletRequest和HttpServletRequest,它们的区别就是是否和HTTP协议有关。
常用请求对象
常用请求方法
请求对象的使用示例
常用方法一:请求各种路径
/* 获取路径的相关方法 */ @WebServlet("/servletDemo01") public class ServletDemo01 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 ip = req.getRemoteAddr(); System.out.println(ip); //4.获取请求消息的数据 getQueryString() String queryString = req.getQueryString(); System.out.println(queryString); //5.获取统一资源标识符 getRequestURI() /request/servletDemo01 String requestURI = req.getRequestURI(); System.out.println(requestURI); //6.获取统一资源定位符 getRequestURL() http://localhost:8080/request/servletDemo01 StringBuffer requestURL = req.getRequestURL(); System.out.println(requestURL); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } } 复制代码
常用方法二:获取请求参数以及封装(非常重要)
我们常常会使用HttpServletRequest对象获取请求参数,然后将其封装到实体类中
/* 获取请求参数信息的相关方法 */ @WebServlet("/servletDemo03") public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.根据名称获取数据 getParameter() String username = req.getParameter("username"); System.out.println(username); String password = req.getParameter("password"); System.out.println(password); System.out.println("--------------------"); //2.根据名称获取所有数据 getParameterValues() String[] hobbies = req.getParameterValues("hobby"); for(String hobby : hobbies) { System.out.println(hobby); } System.out.println("--------------------"); //3.获取所有名称 getParameterNames() Enumeration<String> names = req.getParameterNames(); while(names.hasMoreElements()) { String name = names.nextElement(); System.out.println(name); } System.out.println("--------------------"); //4.获取所有参数的键值对 getParameterMap() Map<String, String[]> map = req.getParameterMap(); for(String key : map.keySet()) { String[] values = map.get(key); System.out.print(key + ":"); for(String value : values) { System.out.print(value + " "); } System.out.println(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } } 复制代码
下面通过实例说明几种封装方式
需求:我们要实现从网页填写学生注册信息,然后把获取请求参数并把相应的信息封装到每一个Student类中。
第一步:编写一个页面html程序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册页面</title> </head> <body> <form action="/request/servletDemo08" method="post" autocomplete="off"> 姓名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"> <br> 爱好:<input type="checkbox" name="hobby" value="study">学习 <input type="checkbox" name="hobby" value="game">游戏 <br> <bu