【问题标题】:How to configure welcome file (HTML/JSP) in Jersey container如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)
【发布时间】:2013-10-17 03:47:17
【问题描述】:

我有一个 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 配置后如何使欢迎文件工作? 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>

【问题讨论】:

  • 您是否尝试将welcome-file-list 标签添加到web.xml。它应该工作。如下所示.. index.htmlindex.htmindex.jsp欢迎文件> 欢迎文件列表>
  • 请同时分享您的 web.xml 配置
  • 已发布 web.xml,我也将欢迎文件添加到列表中。

标签: java rest servlets jersey welcome-file


【解决方案1】:
<?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。当服务器启动时,它会工作并显示欢迎文件。

【讨论】:

  • 是的,我已经改变了。所有的 REST 服务请求都将在 http:////service 路径中处理,欢迎文件将以正常方式访问。它工作正常。在 REST 容器中保留 /* 会使欢迎页面成为不可用的资源。所有请求都将转到 Jersey 容器。
【解决方案2】:

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

【讨论】:

    【解决方案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>
    

    【讨论】:

      【解决方案4】:

      你可以有类似的东西

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

      【讨论】:

        【解决方案5】:

        当您使用 jersey 时,所有请求都被定向到 jersey servlet,即 ServletContainer。因此,如果任何请求与任何映射的 rest 类不匹配,它就会抛出 404。但您始终可以添加 servlet 过滤器来拦截传入的请求。根据传入的 HTTP 请求 URL(默认/欢迎等),您可以决定将其重定向到 weclome 页面:

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

        【讨论】:

          【解决方案6】:

          我只是想知道,下面的示例是否有效?

          HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendRedirect("/welcome.jsp"); 如果会的话,这个sendRedirect() 会在哪里被调用?在一个servlet中,所以如果我没记错的话,应该有一个servlet,它只是redirectsfirst/default页面的请求,对吧?

          【讨论】:

            【解决方案7】:

            您可以创建“API”类,并在您的项目中插入注释。 类 ApplicationConfig...

            @ApplicationPath("api") //注解

            公共类 ApplicationConfig 扩展应用程序 { }

            之后,我创建了保留的“用户”类......

            类 UserApi

            @Path("users")//注解页面用户。

            公共类 UserApi {

            ....我的代码补充页面....

            @GET

            @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 来发送您的数据

            【讨论】:

              【解决方案8】:
              <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>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-01-16
                • 2011-06-24
                • 2015-03-21
                • 2020-12-17
                • 2020-03-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多