簡體   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