当前位置 : 主页 > 编程语言 > java >

如何从JAX-RS服务转发到JSP?

来源:互联网 收集:自由互联 发布时间:2021-06-25
JBoss版本:4.2.3GA.这适用于apache tomcat 6.0.在JBoss中,我不得不添加以下设置:-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE = false以使前进工作,但现在当我加载页面时,我得到以下错误.感觉就像我这
JBoss版本:4.2.3GA.这适用于apache tomcat 6.0.在JBoss中,我不得不添加以下设置:-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE = false以使前进工作,但现在当我加载页面时,我得到以下错误.感觉就像我这样做是以JBoss不喜欢的方式,但我还没有看到任何其他的例子.有谁知道让这个工作的方法?

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

...


@GET
@Path("/forward")
public String forward(
    @Context final HttpServletRequest request,
    @Context final HttpServletResponse response) throws Exception
{
  RequestDispatcher dispatcher = request.getRequestDispatcher("/index.html");
  dispatcher.forward(request, response);
  return "";
}

例外:

java.lang.ClassCastException: $Proxy114 cannot be cast to javax.servlet.ServletRequestWrapper
    com.itt.scout.server.servlet.admin.config.ConfigController.forward(ConfigController.java:46)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:151)
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:86)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1357)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1289)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:684)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
在从其他位置获得一些帮助之后,我意识到我正在以一种有趣的方式连接我的JSP和restlet,而我真正想要做的就是使用Viewable.这在JBoss中也更好用.以下是我最终得到的摘要:

import javax.ws.rs.core.Context;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import com.sun.jersey.api.view.Viewable;


@GET
@Path("/index")
public Viewable index(
    @Context HttpServletRequest request,
    @Context HttpServletResponse response) throws Exception
{
  request.setAttribute("key", "value");
  return new Viewable("/jsps/someJsp.jsp", null);
}
网友评论