9

我有一个 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>
4

8 回答 8

10
<?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。它工作并在服务器启动时显示欢迎文件。

于 2013-10-10T06:55:39.243 回答
7

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

不会被重定向到 jersey servlet。

针对相同场景的项目托管在https://github.com/skohli0302/jims

于 2013-10-10T08:33:03.047 回答
3

In web.xml:

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

instead of

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
于 2014-10-12T01:46:38.433 回答
1

你可以有类似的东西

<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>
于 2016-12-18T20:45:07.683 回答
0

我只是想知道,下面的例子会起作用吗?

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

于 2013-10-10T04:55:32.667 回答
0

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

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/welcome.jsp");
于 2013-10-09T16:47:33.677 回答
0
<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>
于 2019-10-15T10:52:55.873 回答
0

您可以创建“API”类,并在您的项目中插入注释。类应用程序配置...

@ApplicationPath("api") //注解

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

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

类 UserApi

@Path("users")//注解页面User.

公共类用户API {

.... 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 的“邮递员”修改来发送您的数据

于 2018-07-21T15:16:40.540 回答