我希望Servlet根据前缀和扩展名处理对文件的请求,例如,Java Servlet:将请求传递回默认处理
前缀_ *。xml的
由于在开始和请求路径的末端作图是不可能的,我制订的所有* .XML请求我的servlet。 现在的问题是:如何从我的servlet中删除不以“prefix_”开头的XML文件,以便将请求处理为对xml文件的“正常”请求?
这可能是很简单,但我似乎并没有能够找到这一点...: -/
感谢很多提前
我希望Servlet根据前缀和扩展名处理对文件的请求,例如,Java Servlet:将请求传递回默认处理
前缀_ *。xml的
由于在开始和请求路径的末端作图是不可能的,我制订的所有* .XML请求我的servlet。 现在的问题是:如何从我的servlet中删除不以“prefix_”开头的XML文件,以便将请求处理为对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,其他所有请求都会发送到容器。
不舒尔,但一旦你捕获所有的*。 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
}
}
(代码没有测试,只在一念......)
另一个解决方案(可能适合你)是,如果您正在使用/计划在该Web容器实例前使用Apache,则可以使用apache的重写模块。将URL重写为Webapp容器更容易处理的内容。
希望这会有所帮助。 David。
嘿,谢谢......这看起来很容易。 Spring让我感到惊讶:)其实,我们已经使用swing作为MVC框架 - 我会检查一下。 – PeterP 2009-07-07 09:07:30