我想要一个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
        }
    }

(代码没有测试,只有一个想法...)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top