2011-08-08 17 views
6

JBoss Versiyon: 4.2.3GA. Bu apache tomcat 6.0'da çalışır. JBoss'ta, aşağıdaki iletiyi eklemek zorunda kaldım: iletmeyi çalışmak için -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false, ancak şimdi sayfayı yüklediğimde aşağıdaki hatayı alıyorum. Bunu, JBoss'un hoşuna gitmeyeceği bir şekilde yapıyormuşum gibi geliyor, ama başka bir örnek görmedim. Bunu işe almak için bir yol bilen var mı?JAX-RS hizmetinden JSP'ye nasıl iletilir?

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 ""; 
} 

istisna:

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

doğrudan servlet kullanmıyorsunuz İşte ben ile sona şeyin bir özetidir. JAX-WS (webservices) kullanıyorsunuz. "Servlet" referansını ve etiketini kaldırdım. Gerçek bir sunucu gerçekte ne olduğunu öğrenmek için, bizim servlet wiki sayfasını kontrol edin http://stackoverflow.com/tags/servlets/info – BalusC

+0

Bir restlet denetleyicisi ve jsp görünümü ile MVC yapıyorum. Bu muhtemelen benim örneğimde komik görünüyordu çünkü talepleri böyle iletmemeliydim. –

cevap

14

başka bir yerden biraz yardım aldıktan sonra, ben komik bir şekilde benim JSP ve Restlet bağlayan fark ettim, ve neye gerçekten yapmak istediğim bir kullanmaktı Görülebilir. Bu ayrıca JBoss'ta daha iyi çalışır.

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

Bu cevap için teşekkürler. Ya bu yöntem bir yanıt yazabilir veya başka bir URI'ye yönlendirebilirse ne olur? Sonra bu yöntem bir Yanıt veya Görüntülenebilir mi dönebilir? Bu, bir nesne döndürmek için bu yöntemi bildirmemizi gerektirir mi? – onejigtwojig

+0

Cevabınız için teşekkür ederiz. Bana yardımcı oldu. – user

+0

Teşekkürler, bu yardımcı oldu. Bir sonraki zorluk, bir yönlendirmenin bir JSP sayfasına yönlendirilmesinin nasıl zorlanacağıdır. –

2

Eğer Jersey kullanmıyorsanız, bunu yapmak isteyebilirsiniz:

@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)); 
    } 

} 
İlgili konular