【发布时间】:2015-01-26 04:20:30
【问题描述】:
首先我有一个通用的 http servlet,我想在特定的上下文中运行它取决于 URL 映射(所以我切换到 HttpRequestHandler 实现)。请考虑简化示例。在 web.xml 我有以下配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>testServlet1</servlet-name>
<servlet-class>local.TestServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>local.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet1</servlet-name>
<url-pattern>/test1/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/test2/*</url-pattern>
</servlet-mapping>
我的 servlet 是 HttpRequestHandler 的实现,如下所示:
public class TestRequestHandler implements HttpRequestHandler {
private Counter counter;
public void setCounter(Counter counter) {
this.counter = counter;
}
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.write("<h1>Hello World</h1>");
writer.write("<h1>" + counter.getName() + ": " + counter.getValue() + "</h1>");
}
}
所以我想用不同的 Counters bean 初始化两个 servlet bean(testServlet1 和 testServlet2),并有一个用于公共 bean 的根上下文(applicationContext.xml)和两个可以扩展和覆盖的 单独 servlet 上下文根上下文(testServlet1-servlet.xml 和 testServlet2-servlet.xml)。所以配置应该是这样的:
<bean id="counter" class="local.Counter">
<property name="name" value="CounterA"/>
</bean>
<bean id="testServlet1" class="local.TestRequestHandler">
<property name="counter" ref="counter"/>
</bean>
和
<bean id="counter" class="local.Counter">
<property name="name" value="CounterB"/>
</bean>
<bean id="testServlet2" class="local.TestRequestHandler">
<property name="counter" ref="counter"/>
</bean>
是否有可能以及如何实现这样的配置?我考虑过 DispatcherServlet,但不明白如何使用 HttpRequestHandler 的实现来配置它。
【问题讨论】:
标签: java spring servlets applicationcontext