Java Servlet的:传递一个请求到默认处理
-
11-09-2019 - |
题
我想要一个Servlet来处理请求的文件根据前缀和扩展,e.g。
前缀_ *。XML
由于在开始和请求路径的末端作图是不可能的,我制订的所有* .XML请求我的servlet。 现在的问题是:我怎么能退出我的servlet的XML文件不能与“prefix_”开始的,因此,请求像一个“正常”的要求,一个xml文件来处理
这可能是很简单,但我似乎并没有能够找到这一点...: - /
非常感谢预先
解决方案
我会强烈建议使用这一个适当的MVC框架。正如你已经发现,标准的servlet API的灵活性是非常有限的,当谈到请求分配。
在理想情况下,你将能够结合的MVC框架使用现有的servlet代码,与框架做diapcthing基于路径模式,和你的servlet做的业务逻辑。幸运的是,Spring MVC的可以让你做到这一点,使用ServletForwardingController。这将会是一个非常轻量级的弹簧配置。
所以你必须在你的web.xml是这样的:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>foo.MyServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<url-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*</url-pattern>
</url-mapping>
您会然后有一个这样的WEB-INF /弹簧-servlet.xml文件:
<beans>
<bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController">
<property name="servletName" value="myServlet"/>
</bean>
</beans>
这将是相当多了。对于/prefix*.xml所有请求都会去myServlet,和所有其他人将通过落到容器。
其他提示
另一种解决办法(也许适合你)是如果使用的是/计划使用一个Apache在于Web容器实例的前可以使用的apache的重写模块。重写的URL的东西更容易处理为web应用程序的容器中。
希望这有助于。 大卫。
不舒尔,但一旦你捕获所有的* .xml请求您可以再次检查请求在你的代码通过HttpServletRequest.getRequestURI()
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri =req.getRequestURI();
int i = uri.lastIndexOf('/');
int j = uri.lastIndexOf('.', i);
if (uri.substring(i+1, j).startsWith("prefix_")) {
// your code
}
}
(代码没有测试,只有一个想法...)
不隶属于 StackOverflow