JavaWeb_MVC案例之多个请求对应一个Servlet
MVC案例之多个请求对应一个Servlet
- 1.方法一
测试第一种方法:
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="customerServlet?method=add">add</a>
<br>
<a href="customerServlet?method=query">query</a>
<br>
<a href="customerServlet?method=delete">delete</a>
<br>
<a href="customerServlet?method=update">update</a>
<br>
</body>
</html>
CustomerSevlet.java
package com.xs.mvc_crud.CustomerServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/customerServlet")
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public CustomerServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
switch (method) {
case "add":
add(request, response);
break;
case "query":
query(request, response);
break;
case "delete":
delete(request, response);
break;
case "update":
update(request, response);
break;
}
}
/**
* @Title: delete
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void delete(HttpServletRequest request, HttpServletResponse response) {
System.out.println("delete");
}
/**
* @Title: update
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void update(HttpServletRequest request, HttpServletResponse response) {
System.out.println("update");
}
/**
* @Title: query
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void query(HttpServletRequest request, HttpServletResponse response) {
System.out.println("query");
}
/**
* @Title: add
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void add(HttpServletRequest request, HttpServletResponse response) {
System.out.println("add");
}
}
此方法的缺点上边已经总结。
- 2.方法二
测试第二种方法:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>MVC_CRUD</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>CustomerServlet</display-name>
<servlet-name>CustomerServlet</servlet-name>
<servlet-class>com.xs.mvc_crud.servlet.CustomerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CustomerServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="add.do">add</a>
<br>
<a href="query.do">query</a>
<br>
<a href="delete.do">delete</a>
<br>
<a href="update.do">update</a>
<br>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>没有找到请求的页面!</h4>
</body>
</html>
CustomerServlet.java
package com.xs.mvc_crud.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/customerServlet")
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public CustomerServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取ServletPath:/update.do 或/add.do。
String servletPath = request.getServletPath();
//2.去除 / 和 do,得到类似于update和add这样的字符串。
String methodName = servletPath.substring(1);
methodName = methodName.substring(0,methodName.length() - 3);
try {
//3.利用反射获取methodName对应的方法。
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.利用反射调用对应的方法。
method.invoke(this, request, response);
} catch (Exception e) {
//添加错误响应。
response.sendRedirect("error.jsp");
}
}
/**
* @Title: delete
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void delete(HttpServletRequest request, HttpServletResponse response) {
System.out.println("delete");
}
/**
* @Title: update
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void update(HttpServletRequest request, HttpServletResponse response) {
System.out.println("update");
}
/**
* @Title: query
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void query(HttpServletRequest request, HttpServletResponse response) {
System.out.println("query");
}
/**
* @Title: add
* @Description: TODO
* @param request
* @param response
* @return void
*/
private void add(HttpServletRequest request, HttpServletResponse response) {
System.out.println("add");
}
}