繁体   English   中英

Java Servlet:将请求传递回默认处理

[英]Java Servlet: pass a request back to default processing

我希望Servlet根据前缀和扩展名来处理对文件的请求,例如

前缀_ *。xml的

由于无法在请求路径的开头和结尾进行映射,因此我已将所有* .xml请求映射到我的Servlet。 现在的问题是:如何针对非以“ prefix_”开头的XML文件退出servlet,以便像处理XML文件的“普通”请求一样处理请求?

这可能很简单,但我似乎无法找到...:-/

提前谢谢

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

希望这可以帮助。 大卫。

不是很清楚,但是一旦捕获了所有* .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
        }
    }

(代码未经测试,只是一个主意...)

我强烈建议为此使用适当的MVC框架。 正如您所发现的,在请求分派时,标准Servlet API的灵活性非常有限。

理想情况下,您将能够将现有的Servlet代码与MVC框架结合使用,该框架基于路径模式进行透彻,而Servlet则进行业务逻辑。 幸运的是,Spring MVC允许您使用ServletForwardingController做到这一点。 这将是一个非常轻量级的spring配置。

因此,您的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 / spring-servlet.xml文件,如下所示:

<beans>
    <bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController">
       <property name="servletName" value="myServlet"/>
    </bean>
</beans>

那就差不多了。 对/prefix*.xml的所有请求都将发送到myServlet,而所有其他请求将落入容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM