简单MVC模式的实现主要由3部分组成,用于初始化的ConfigListener,控制器 Controller和配置文件 mvc_config.xml
1 监听器ConfigListener
主要用于在初始化ServletContext时读入配置文件,并把路径和转发信息储存在attribute中。代码如下:
2 控制器 Controller
在web.xml中配置Controller的url-pattern为*.do(也可以为其它)
3 配置文件mvc_config.xml
访问 http://xxx/webapp/reg.do, 转发到/register
访问 http://xxx/webapp/login, 转发到/pages/login.jsp
访问 http://xxx/webapp/welcome, 转发到/
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, 转发到/