簡體   English   中英

如何在Jersey容器中配置歡迎文件(HTML / JSP)

[英]How to configure welcome file (HTML/JSP) in Jersey container

我有一個Jersey RESTful Web服務項目。 我已經在web.xml中配置了Jersey容器,並且一切正常。

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

在評論了web.xml中的Jersey容器配置並部署了應用程序之后,這次我可以訪問歡迎文件了。

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

我的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>
<?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模式(/ service / *)用於REST。 它可以工作,並且在服務器啟動時會顯示歡迎文件。

您當前的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>

這種模式只會將url稱為jersey

http://localhost:8080/rest/

因此網址

http://localhost:8080/index.html

不會重定向到jersey servlet。

針對相同場景的項目托管在https://github.com/skohli0302/jims上

在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>

你可以有類似的東西

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

使用jersey時,所有請求都定向到jersey Servlet,即ServletContainer。 因此,如果任何請求與任何映射的Rest類都不匹配,則拋出404。但是您始終可以添加Servlet過濾器來攔截傳入的請求。 根據傳入的HTTP請求URL(defualt / welcome等),您可以決定將其重定向到weclome頁面:

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

我只是想知道,下面的示例可以工作嗎?

HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendRedirect("/welcome.jsp"); 如果可以的話,在何處調用此sendRedirect() 在servlet中,所以如果我沒有記錯的話,應該有一個servlet,它將請求redirects到首頁first/default頁面,對嗎?

您可以創建類“ API”,然后在項目中插入一個注釋。 類ApplicationConfig ...

@ApplicationPath(“ api”)//注釋

公共類ApplicationConfig擴展應用程序{}

之后,我創建類“ Users”保留下來...

類UserApi

@Path(“ users”)//注釋頁面用戶。

公共類UserApi {

.... mycode補充頁面....

@得到

@Path("list")

@Produces("application/json")

public String getUsuarios() throws Exception {

    String json = new Gson().toJson(this.userD.listar());

    return (json);

}

請記住,您的根項目留在了... http://yourprojectpatc.com.br/api/users/list

使用“郵遞員”修改讓Json發送您的數據

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM