2013-10-09 62 views
7

我有一個澤西島REST風格的Web服務項目。我已經在web.xml中配置了Jersey容器,並且一切正常。如何在澤西容器中配置歡迎文件(HTML/JSP)

在同一個項目中,我引入了一個HTML頁面,幷包含在<welcome-file-list>中以處理其他一些非REST請求。但是當我訪問URL時,不顯示歡迎文件。

在我評論了澤西容器配置web.xml並部署了應用程序之後,這次我能夠訪問該歡迎文件。

我正在使用Tomcat 7,JDK 7,Jersey 2.2和Eclipse Juno。澤西島配置時如何使歡迎文件工作?澤西島是否有任何限制,或者我需要以不同的方式進行配置以實現此目的?

web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com /xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>My Service</display-name> 
    <servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.my.rest.service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup>  
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping>  
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    </welcome-file-list> 
</web-app> 
+1

有無你嘗試添加welcome-file-list標籤到web.xml。它應該工作。類似下面.. \t <歡迎文件列表><歡迎文件>的index.html \t \t <歡迎文件> index.htm的 \t \t <歡迎-file> index.jsp \t

+1

請同時分享您的web.xml配置 – Jk1

+0

發佈web.xml,我也在列表中添加了歡迎文件。 – Murugesh

回答

9
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>com.webservice.services</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.webservice.services</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/service/*</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 


嘗試URL模式與REST像上面給出的不同路徑(/服務/ *)。它在服務器啓動時工作並歡迎文件顯示。

+0

是的,我改變了。所有REST服務請求將在路徑http:// //service中處理,歡迎文件將以正常方式訪問。它工作正常。在REST容器中保留/ *會將歡迎頁面視爲不可用的資源。並且所有請求都將轉到澤西容器。 – Murugesh

0

當您使用的球衣,所有的請求定向到球衣的servlet即ServletContainer。因此,如果有任何請求與任何映射的休息類不匹配,則它將引發404。但是,您始終可以添加servlet篩選器來攔截傳入的請求。根據傳入的HTTP請求的URL(defualt /迎賓等),您可以決定它重定向到weclome頁:

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.sendRedirect("/welcome.jsp"); 
0

我只是想知道,將下面的示例工作?

HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendRedirect("/welcome.jsp"); 如果會的話,這個sendRedirect()在哪裏被調用?在一個servlet中,所以如果我沒有錯,應該有一個servlet,其中只有redirects的請求到頁面,對不對?

5

當前的servlet映射是

<servlet-mapping> 
<servlet-name>Jersey REST Service</servlet-name> 
<url-pattern>/*</url-pattern> 

其中每個請求重定向球衣。這樣做的歡迎頁面看到你需要像

<servlet-mapping> 
<servlet-name>Jersey REST Service</servlet-name> 
<url-pattern>/rest</url-pattern> 

這種模式的進入將調用球衣只爲網址像

http://localhost:8080/rest/

,從而網址

http://localhost:8080/index.html

不會被重定向到澤西servlet。

一期工程靶向相同的情況下是在https://github.com/skohli0302/jims

+0

是的,我已經完全做到了。謝謝 – Murugesh

3

託管在web.xml:

<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/somethinghere/*</url-pattern> 
</servlet-mapping> 

,而不是

<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
0

您可以像

<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/index.html</url-pattern> 
</servlet-mapping>