我正在使用Jersey作为我的REST应用程序。但是,我的一个方法必须返回一个可以是简单HTML文件的Viewable。我已经阅读了一些教程,并完成了使用JSP模板。 当我使用Jetty在本地运行时,一切都运行良好。但是,使用Tomcat 8,我得到以下异常:
HTTP状态500 - org.glassfish.jersey.server.ContainerException:javax.servlet.ServletException:java.lang.LinkageError:加载器约束违规:解析方法时“org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax) / servlet的/的ServletConfig)Lorg /阿帕奇/ Tomcat的/ InstanceManager;”当前类的类加载器(org / apache / jasper / servlet / JasperLoader的实例),org / apache / jsp / WEB_002dINF / jsp / confirmacao_jsp,以及方法定义的类加载器(java / net / URLClassLoader的实例) class,org / apache / jasper / runtime / InstanceManagerFactory,为签名中使用的org / apache / tomcat / InstanceManager类型提供不同的Class对象
输入例外报告
消息org.glassfish.jersey.server.ContainerException: javax.servlet.ServletException:java.lang.LinkageError:loader 约束违规:解析方法时 “org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax / servlet的/的ServletConfig)Lorg /阿帕奇/ Tomcat的/ InstanceManager;” 类加载器(org / apache / jasper / servlet / JasperLoader的实例) 当前类的组织,org / apache / jsp / WEB_002dINF / jsp / confirmacao_jsp, 和类加载器(java / net / URLClassLoader的实例)的 方法的定义类, org / apache / jasper / runtime / InstanceManagerFactory,有不同的Class 对象类型为org / apache / tomcat / InstanceManager中使用的 签名
description服务器遇到阻止它的内部错误 完成此请求。
例外
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: javax.servlet.ServletException:java.lang.LinkageError:loader 约束违规:解析方法时 “org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax / servlet的/的ServletConfig)Lorg /阿帕奇/ Tomcat的/ InstanceManager;” 类加载器(org / apache / jasper / servlet / JasperLoader的实例) 当前类的组织,org / apache / jsp / WEB_002dINF / jsp / confirmacao_jsp, 和类加载器(java / net / URLClassLoader的实例)的 方法的定义类, org / apache / jasper / runtime / InstanceManagerFactory,有不同的Class 对象类型为org / apache / tomcat / InstanceManager中使用的 签名
我的Servlet配置是:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>gs.relferreira.corporativo.rest;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>gs.relferreira.corporativo.rest.RelferreiraApplication</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
<param-value>/WEB-INF/jsp/</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.servlet.filter.staticContentRegex</param-name>
<param-value>/resources/(images|css)/. </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
返回视图的方法如下:
@GET
@Path("confirmar/{idUsuario}/{token}")
@Produces(MediaType.TEXT_HTML)
public Viewable validarEmail(@PathParam("idUsuario") int idUsuario, @PathParam("token") String token){
if(m_Controlador.validarEmail(idUsuario, token))
return new Viewable("/confirmacao.jsp", null);
else
return new Viewable("/erro.jsp", null);
}