3

我正在使用 Jersey 实现一个 Restful Web 服务。我想将 index.jsp 显示为欢迎页面。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Rest Page</title>
    </head>
    <body>
        <h1>Rest is working!</h1>
    </body>
</html>

当我在 web.xml 中使用此代码时,它工作正常:

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

  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

问题是当用户模式是这样的:

<url-pattern>/*</url-pattern>

除了欢迎页面,一切正常。我很感激任何帮助。

4

2 回答 2

5

我找到了另一种方法来做到这一点。而不是使用 index.jsp,我可以使用如下类:

@Path("/")
public class Hello {

    // This method is called if HTML is request
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHtmlHello() {
       return "<html> " + "<title>" + "Rest Page" + "</title>"
          + "<body><h1>" + "REST is Working!" + "</body></h1>" + "</html> ";
}

在 web.xml 我不需要使用:

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

它适用于:

<url-pattern>/*</url-pattern>
于 2012-07-09T15:41:45.870 回答
3

那么servlet映射调用你的servlet。如果要创建主页,则不应将 /* 提供给 servlet,因为它会重叠。

当您的 url 模式是/whatever您的 servlet 时,您的 servlet 将在localhost:8080/myApp/whatever并且主页将具有Localhost:8080/myApp. 但是,当您将 url 模式定义为/*您的 servlet 和主页具有相同的位置时。所以删除你的 servlet 映射或给它一个不同的地方/*

于 2012-07-09T14:36:07.067 回答