我有一个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>
答案 0 :(得分: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模式,如上面给出的(/ service / *)REST。服务器启动时,它可以工作并欢迎文件显示。
答案 1 :(得分:6)
您当前的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/
因此url
http://localhost:8080/index.html
不会被重定向到泽西servlet。
目标相同方案的项目托管在https://github.com/skohli0302/jims
上答案 2 :(得分: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>
答案 3 :(得分: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>
答案 4 :(得分:0)
当你使用球衣时,所有的请求都被引导到球衣servlet,即ServletContainer。因此,如果任何请求与任何映射的rest类不匹配,它将抛出404.但是您始终可以添加servlet过滤器来拦截传入的请求。根据传入的HTTP请求URL(defualt / welcome等),您可以决定将其重定向到weclome页面:
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/welcome.jsp");
答案 5 :(得分:0)
我很想知道,下面的例子会起作用吗?
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/welcome.jsp");
如果它会,这个sendRedirect()
被调用?在servlet中,所以如果我没有错,那么应该有一个servlet,只有redirects
对first/default
页面的请求,对吗?
答案 6 :(得分:0)
您可以创建类“ API”,并在项目中插入一个注释。 类ApplicationConfig ...
@ApplicationPath(“ api”)//注释
公共类ApplicationConfig扩展了Application { }
UserApi类
@Path(“ users”)//注释页面用户。
公共类UserApi {
.... mycode补充页面....
@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发送您的数据
答案 7 :(得分: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>