目录
前言
今天的分享是将我们上次的自定义mvc进行优化
提示:以下是本篇文章正文内容,下面案例可供参考
一、中央控制器动态加载存储子控制器
通过建模我们可以知道,最终configModel对象会包含config.xml中所有子控制器信息,同时为了解决中央控制器能够动态加载保存子控制器的信息,那么我们只需要引入configModel对象即可
config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<action path="/book" type="com.mgy.web.BooKAction">
<forward name="b" path="/demo2.jsp" redirect="false" />
<forward name="a" path="/demo3.jsp" redirect="true" />
</action>
<action path="/order" type="com.mgy.web.OrderAction">
<forward name="a" path="/index.jsp" redirect="false" />
<forward name="b" path="/welcome.jsp" redirect="true" />
</action>
</config>
优化DispatcherServlet
package com.mgy.framework;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.management.RuntimeErrorException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mgy.web.BookAction;
/**
* 中央控制器:
* 主要职能:接受浏览器请求,找到对应的处理人
*
*
*/
@WebServlet("*.action")
public class DispatcherServlet extends HttpServlet{
//private Map<String, Action> actions=new HashMap<String, Action>();
// 通过建模我们可以知道,最终configModel对象会包含config.xml中所有子控制器的信息
// 同时为了解决中央控制器能够动态加载保存子控制器的信息,那么我们只需要引入congigModel对象即可
private ConfigModel ConfigModel;
// 程序启动时,只会加载一次
@Override
public void init() throws ServletException {
//actions.put("/book", new BookAction());
// actions.put("/order", new BooKAction());
try {
ConfigModel = (ConfigModel)ConfigModelFactory.bulid();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//http://localhost:8080/mvc/book.aci