关于多个servlet的配置文件

大家好,我有一个关于servlet文件的问题,一般servlet的配置信息都是放在 %/WEB-INF/web.xml下,如果是个简单的系统还好说,如果是大一点的项目,那么按照模块划分,摸个模块对应多个servlet,那么这些servlet的配置全放在web.xml里就太臃肿了,大家有什么好的方法,比如一个模块的servlet配置信息放在一个model_web.xml里,然后把这个model_web.xml信息放在 web.xml里,我是这么考虑的,自定义一个servlet类,tomcat启动时运行这个servlet,这个servlet把 model_web.xml加载。请问如何实现?
[b]问题补充:[/b]
对于小型应用来说,自己配置的servlet比struts要好使用,这是我问这个问题的初衷。
[b]问题补充:[/b]
不管是struts还是其他的开源框架底层用的还是servlet,如果连servlet都搞不清楚,开口闭口都是这些框架,那么技术得不到提高。只能用人家封装好的框架。
我问这个问题,就是想搞清楚底层的实现,既然struts可以实现,那么技术上来讲也可以实现。

那我只好贴代码了. 简单测试通过.

web.xml 配置内容
[code="xml"]
ttServlet
cn.iwoo.demo.web.TtServlet

xmlLocations
one.xml,two.xml

<servlet-mapping>
    <servlet-name>ttServlet</servlet-name>
    <url-pattern>/tt/*</url-pattern>
</servlet-mapping>[/code]

那为什么不用struts?

这应该是个很好的J2ee实践模式. 将所有的Servlet放在一个统一的地方进行管理.

只不过现在的struts做的也就是你现在做的这件事情而已.

不过,还是不建议重造轮子. :D

总的Servlet

[code="java"]public class TtServlet extends HttpServlet {
private String[] locationArray;
private List servletModels;
@Override
public void init(ServletConfig arg0) throws ServletException {
String locations = arg0.getInitParameter("xmlLocations");
locationArray = locations.split(",");
// .. 这里就直接设定从locationArray加载model_web.xml 得到的内容
servletModels = new ArrayList();
servletModels.add(new ServletModel("/tt/a", "cn.iwoo.demo.web.AServlet"));
// ..
super.init(arg0);
}

@Override
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    this.service(arg0, arg1);
}

@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    // 请求地址
    String requestURI = this.getRequestURI(arg0);

    // 请求的目标Servlet
    ServletModel targetServeltModel = this.getRequestTargetServletModel(requestURI);

    // 目标Servlet响应请求
    try {
        HttpServlet targetServlet = this.getRequestTargetServlet(targetServeltModel);
        targetServlet.service(arg0, arg1);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getRequestURI(HttpServletRequest arg0) {
    return arg0.getRequestURI();
}

private ServletModel getRequestTargetServletModel(String requestURI) {
    ServletModel targetServeltModel = null;
    for (ServletModel servletModel : servletModels) {
        if (requestURI.endsWith(servletModel.urlParttern)) {
            targetServeltModel = servletModel;
            break;
        }
    }
    return targetServeltModel;
}

private HttpServlet getRequestTargetServlet(ServletModel targetServeltModel) {
    HttpServlet targetSevlet = null;
    try {
        targetSevlet = (HttpServlet) Class.forName(targetServeltModel.servletname).newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return targetSevlet;
}

class ServletModel {
    private String urlParttern;
    private String servletname;
    public ServletModel(String urlParttern, String servletname) {
        this.urlParttern = urlParttern;
        this.servletname = servletname;
    }
    // ..
}

}[/code]

目标Servlet
[code="java"]public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
this.service(arg0, arg1);
}

@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    arg1.getWriter().write("LSDLKSDKFJDSf");
}

}[/code]

测试使用的url
[url]http://localhost:8080/iwoo/tt/a[/url]

页面显示结果:
[quote]LSDLKSDKFJDSf[/quote]

上面的代码, 还需要去符合J2ee定义的Servlet生命周期.

比如: 去模拟 init(), destroy(). Servlet的单件.