一个简单MVC模式的实现

简单MVC模式的实现主要由3部分组成,用于初始化的ConfigListener,控制器 Controller和配置文件 mvc_config.xml

1 监听器ConfigListener
主要用于在初始化ServletContext时读入配置文件,并把路径和转发信息储存在attribute中。代码如下:

public class ConfigListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
SAXReader reader = new SAXReader();
try {
Document document = reader.read(ConfigListener.class.getClassLoader().getResourceAsStream("mvc_config.xml"));
Element root=document.getRootElement();
//将读出的信息保存在map中
Map config=new HashMap();
for(Iterator it=root.elementIterator("path");it.hasNext();){
Element e=(Element)it.next();
config.put(e.attributeValue("name"), e.elementText("forward"));
}
//将map保存在context中
event.getServletContext().setAttribute("config", config);
/*System.out.println(paths.size());
for(int i=0; i<paths.size(); i++){
Element e=(Element)paths.get(i);
System.out.println(e.attributeValue("name"));
System.out.println(e.elementText("goto"));
}*/
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


2 控制器 Controller

public class Controller extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out=resp.getWriter();
Map parameters=req.getParameterMap();
//...将参数进行验证或封装
String path=req.getServletPath().replace(".do", "");
System.out.println(path);
Map config=(Map)getServletContext().getAttribute("config");
//out.println(config);
String forward=(String)config.get(path);
//out.println(forward);
RequestDispatcher dispatcher=req.getRequestDispatcher(forward);
dispatcher.forward(req, resp);
}
}

在web.xml中配置Controller的url-pattern为*.do(也可以为其它)

<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


3 配置文件mvc_config.xml

<?xml version="1.0" encoding="UTF-8"?>
<paths>
<!-- must start with / and no extension like .do or others -->
<path name="/reg">
<forward>/register</forward>
</path>
<path name="/login">
<forward>/pages/login.jsp</forward>
</path>
<path name="/welcome">
<forward>/</forward>
</path>
</paths>


访问 http://xxx/webapp/reg.do, 转发到/register
访问 http://xxx/webapp/login, 转发到/pages/login.jsp
访问 http://xxx/webapp/welcome, 转发到/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值