2011-08-08 10 views
6

JBossバージョン:4.2.3GA。これはapache tomcat 6.0で動作します。 JBossでは、私は次の設定を追加する必要がありました:-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=falseが機能していますが、今はページをロードするときにエラーが発生します。 JBossが好きではない方法でこれをやっているように感じますが、他の例は見ていません。誰かがこれを働かせる方法を知っていますか?JAX-RSサービスからJSPに転送する方法は?

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) 
+0

あなたが直接サーブレットを使用していないここに私がなってしまったかの概要です。あなたはJAX-WS(webservices)を使用しています。私は "サーブレット"リファレンスとタグを削除しました。実際のサーブレットが実際にどのようなものかを知るには、servlet wikiページをチェックしてください。 – BalusC

+0

私は、Restlet ControllerとJSPビューでMVCをやっています。私の例では、このような要求を転送してはならないので、これはおそらく面白く見えました。 –

答えて

14

別の場所からいくつかの助けを取得した後、私は私が面白い方法で私のJSPとのRestletを接続したことに気づいて、私が本当にやりたいことは使用しました表示可能です。これは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); 
} 
+0

この回答をありがとう。このメソッドがレスポンスを書き込むか、別のURIに転送することができる場合はどうなりますか?次に、このメソッドは、レスポンスまたはViewableを返すことができますか?これは、オブジェクトを返すためにこのメソッドを宣言する必要がありますか? – onejigtwojig

+0

あなたの答えをありがとう。それは私を助けた。 – user

+0

ありがとうございました。次の課題は、JSPページへの転送の代わりに強制的にリダイレクトする方法です。 –

2

@Path("") 
@ApplicationPath("blog") 
@Stateless 
public class BlogApplication extends Application { 

    @EJB private PostEJB postEJB; 

    @GET 
    public void getHome(@Context HttpServletRequest request, 
         @Context HttpServletResponse response) { 
     request.setAttribute("posts", postEJB.getPosts()); 
     request.getRequestDispatcher("/WEB-INF/pages/blog/home.jsp") 
       .forward(request, response); 
    } 

    @Override 
    public Set<Class<?>> getClasses() { 
     return new HashSet<Class<?>>(Arrays.asList(BlogApplication.class)); 
    } 

} 
関連する問題