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>
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();
}
}
}
}