原视频地址:https://www.bilibili.com/video/BV1vb41187jH?p=35
1. 前端的页面发送的请求方式应当和服务器端需要的请求方式一致
- 服务器需要前端发送POST请求,那前端就应该发送POST请求,若发送GET请求,服务器应当提示错误信息
- 服务器需要前端发送GET请求,那前端就应该发送GET请求,若发送POST请求,服务器应当提示错误信息
2. 怎么完成以上的需求
- 在程序中想办法获取该请求是什么类型的请求 
- 获取到请求方式之后,就可以在程序中判断 - 1 
 2
 3
 4
 5- if ("POST".equals(method)) { 
 } else if ("GET".equals(method)) {
 }
3. 如何在程序中获取请求方式
- 重点:HTTP的请求协议全部信息被自动封装到 - javax.servlet.http.HttpServletRequest对象中
- 在 - HttpServletRequest接口中有一个方法:- String getMethod(),可以获取到请求方式
- public interface javax.servlet.http.HttpServletRequest extends ServletRequest {}- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26- // LoginServlet.java文件 
 public class LoginServlet extends GenericServlet {
 
 public void service(ServletRequest req, ServletReponse res) {
 // 将ServletRequest、ServletReponse强制类型转换成带有Http接口的类型
 HttpServletRequest request = (HttpServletRequest)req;
 HttpServletResponse response = (HttpServletResponse)res;
 
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter;
 
 // 获取浏览器发送的请求方式
 String method = request.getMethod();
 // System.out.println(method);
 // LoginServlet是一个POST请求,不许发送GET请求
 if ("GET".equals(method)) {
 // 前台报出错误
 out.print("405-您应当发送POST请求");
 // 后台报出错误
 throw new RuntimeException("405-您应当发送POST请求");
 }
 
 // 若程序能执行到这里说明请求就是POST请求,程序正常执行
 out.print("正在登录");
 }
 }- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26- // LogoutServlet.java文件 
 public class LoginServlet extends GenericServlet { // 只处理Get请求
 
 public void service(ServletRequest req, ServletReponse res) {
 // 将ServletRequest、ServletReponse强制类型转换成带有Http接口的类型
 HttpServletRequest request = (HttpServletRequest)req;
 HttpServletResponse response = (HttpServletResponse)res;
 
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter;
 
 // 获取浏览器发送的请求方式
 String method = request.getMethod();
 // System.out.println(method);
 // LogoutServlet是一个GET请求,不许发送POST请求
 if ("POST".equals(method)) {
 // 前台报出错误
 out.print("405-您应当发送GET请求");
 // 后台报出错误
 throw new RuntimeException("405-您应当发送GET请求");
 }
 
 // 若程序能执行到这里说明请求就是GET请求,程序正常执行
 out.print("系统正常退出");
 }
 }- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- <!--login.html文件--> 
 <html>
 <head>
 <title>login page</title>
 </head>
 <body>
 <!--表单登录-->
 <!--method="get"或者method="POST"-->
 <form action = "/webappname/login" method = "POST">
 username<input type = "text" name = "username"><br>
 password<input type = "password" name = "password"><br>
 <input type = "submit" value = "login">
 </form>
 
 <!--退出请求,get-->
 <a href = "/webappname/logout">退出系统</a>
 </body>
 </html>- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29- <!--web.xml文件--> 
 <welcome-file-list>
 <welcome-file>login.html</welcome-file>
 </welcome-file-list>
 <!--登录-->
 <servlet>
 <servlet-name>login</servlet-name>
 <!--Servlet全类名-->
 <servlet-class>包名.LoginServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>login</servlet-name>
 <!--请求路径-->
 <url-pattern>/login</url-pattern>
 </servlet-mapping>
 <!--登出-->
 <servlet>
 <servlet-name>logout</servlet-name>
 <!--Servlet全类名-->
 <servlet-class>包名.LogoutServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>logout</servlet-name>
 <!--请求路径-->
 <url-pattern>/logout</url-pattern>
 </servlet-mapping>
4. 在每一个Servlet类中都编写了类似的代码,来保证前后请求方式一直
| 1 | HttpServletRequest request = (HttpServletRequest)req; | 
5. 以上代码在每个Servlet类中都需要编写,如何封装
封装后在每一个具体的Servlet类中不写这样的代码,但是还能达到同样的效果
