JavaWeb同步学习笔记之三十一、JavaWeb_MVC案例之多个请求对应一个Servlet

JavaWeb_MVC案例之多个请求对应一个Servlet

MVC案例之多个请求对应一个Servlet

  • 1.方法一
    多个请求对应一个Servlet:方法一
    测试第一种方法:
    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.方法二
    多个请求对应一个Servlet:方法二
    测试第二种方法:
    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");
	}
}

猜你喜欢

转载自blog.csdn.net/baidu_38688346/article/details/88366543