原视频地址:https://www.bilibili.com/video/BV1vb41187jH?p=35
1. 前端的页面发送的请求方式应当和服务器端需要的请求方式一致
- 服务器需要前端发送POST请求,那前端就应该发送POST请求,若发送GET请求,服务器应当提示错误信息
- 服务器需要前端发送GET请求,那前端就应该发送GET请求,若发送POST请求,服务器应当提示错误信息
2. 怎么完成以上的需求
在程序中想办法获取该请求是什么类型的请求
获取到请求方式之后,就可以在程序中判断
1
2
3
4
5if ("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类中不写这样的代码,但是还能达到同样的效果