2009-07-07 42 views
0

我希望Servlet根据前缀和扩展名处理对文件的请求,例如,Java Servlet:将请求传递回默认处理

前缀_ *。xml的

由于在开始和请求路径的末端作图是不可能的,我制订的所有* .XML请求我的servlet。 现在的问题是:如何从我的servlet中删除不以“prefix_”开头的XML文件,以便将请求处理为对xml文件的“正常”请求?

这可能是很简单,但我似乎并没有能够找到这一点...: -/

感谢很多提前

回答

0

我会强烈建议使用一个适当的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,其他所有请求都会发送到容器。

+0

嘿,谢谢......这看起来很容易。 Spring让我感到惊讶:)其实,我们已经使用swing作为MVC框架 - 我会检查一下。 – PeterP 2009-07-07 09:07:30

0

不舒尔,但一旦你捕获所有的*。 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 
     } 
    } 

(代码没有测试,只在一念......)

+0

这并没有回答这个问题:在这种情况下如何退回到默认处理。 – Avi 2009-07-07 08:34:22

+0

谢谢......我一直这么做。正如Avi指出的那样,(或者希望在几分钟内:是)缺少的是“其他”部分。 – PeterP 2009-07-07 09:08:48

2

另一个解决方案(可能适合你)是,如果您正在使用/计划在该Web容器实例前使用Apache,则可以使用apache的重写模块。将URL重写为Webapp容器更容易处理的内容。

希望这会有所帮助。 David。