servlet实现mvc

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>20181022MVC</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>ControllerServlet</display-name>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>com.igeek.mvc.controller.ControllerServlet</servlet-class>
  	<init-param>
  		<param-name>addUser</param-name>
  		<param-value>com.igeek.mvc.controller.AddUserController</param-value>
  	</init-param>
  	<init-param>
  		<param-name>deleteUser</param-name>
  		<param-value>com.igeek.mvc.controller.DeleteUserController</param-value>
  	</init-param>
  	<init-param>
  		<param-name>updateUser</param-name>
  		<param-value>com.igeek.mvc.controller.UpdateUserController</param-value>
  	</init-param>
  	<init-param>
  		<param-name>queryUser</param-name>
  		<param-value>com.igeek.mvc.controller.QueryUserController</param-value>
  	</init-param>
  	<init-param>
  		<param-name>addStu</param-name>
  		<param-value>com.igeek.mvc.controller.AddStuController</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

servlet实现mvc

 

2.创建controller接口:

package com.igeek.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author www.igeehome.com
 * 
 * TODO
 *
 * 2018年10月22日下午6:37:32
 */
public interface Controller {
	
	public String execute(HttpServletRequest request,HttpServletResponse response);
}

 

3.所有控制类继承controller接口

package com.igeek.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author www.igeehome.com
 * 
 * TODO
 *
 * 2018年10月22日下午6:58:11
 */
public class AddStuController implements Controller {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("添加学生的Controller");
		System.out.println("调用添加学生的service");
		return "addStuSuc.jsp";
	}

}
package com.igeek.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author www.igeehome.com
 * 
 * TODO
 *
 * 2018年10月22日下午6:38:46
 */
public class DeleteUserController implements Controller {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("删除用户的controller");
		return "deleteUserSuc.jsp";
	}

}

4.创建servlet:

package com.igeek.mvc.controller;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ControllerServlet
 */
public class ControllerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	Map<String,Controller> controllers = new Hashtable<>();
    public ControllerServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url = request.getRequestURI().toString();
		System.out.println("请求的url:"+url);
		//解析URL得到key
		int startIndex = url.lastIndexOf("/")+1;
		int endIndex = url.indexOf(".do");
		url = url.substring(startIndex, endIndex);
		System.out.println("key:"+url);
		System.out.println(controllers);
		//通过Key取出controller对象
		Controller controller = controllers.get(url);
		//执行controller的execute方法
		String jspName = controller.execute(request, response);
		response.sendRedirect(jspName);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		//获取初始化参数,初始化所有的controller对象
		Enumeration<String> names = config.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			String className = config.getInitParameter(name);
			//利用反射创建对象
			try {
				Class<?> clazz = Class.forName(className);
				Controller obj = (Controller)clazz.newInstance();
				//将对象添加到集合中 
				controllers.put(name, obj);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
}

servlet实现mvc

servlet实现mvc