2011-08-08 37 views
6

Phiên bản JBoss: 4.2.3GA. Điều này làm việc trong apache tomcat 6.0. Trong JBoss, tôi phải thêm các thiết lập sau đây: -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false để có được chuyển tiếp để làm việc, nhưng bây giờ khi tôi tải trang tôi nhận được lỗi dưới đây. Nó cảm thấy như tôi đang làm điều này một cách JBoss không thích, nhưng tôi đã không nhìn thấy bất kỳ ví dụ khác. Có ai biết một cách để có được điều này để làm việc?Cách chuyển tiếp từ dịch vụ JAX-RS sang 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 ""; 
} 

Trường hợp ngoại lệ:

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

Bạn không sử dụng servlets trực tiếp. Bạn đang sử dụng JAX-WS (dịch vụ web). Tôi đã xóa thẻ và tham chiếu "servlet". Để tìm hiểu một servlet thực sự là gì, hãy kiểm tra trang servlet wiki của chúng tôi http://stackoverflow.com/tags/servlets/info – BalusC

+0

Tôi đang làm MVC với một bộ điều khiển phục hồi và một khung nhìn jsp. Điều này có lẽ trông rất buồn cười trong ví dụ của tôi bởi vì tôi không nên chuyển tiếp các yêu cầu như thế. –

Trả lời

14

Sau khi nhận được sự giúp đỡ từ một vị trí khác, tôi nhận ra rằng tôi đã kết nối JSP và Restlet tôi theo một cách hài hước, và những gì tôi thực sự muốn làm là sử dụng một Có thể xem được. Điều này cũng hoạt động tốt hơn trong JBoss. Dưới đây là một bản tóm tắt về những gì tôi đã kết thúc với:

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

Cảm ơn câu trả lời này. Điều gì sẽ xảy ra nếu phương pháp này có thể viết phản hồi hoặc chuyển tiếp tới một URI khác? Sau đó, phương pháp này có thể trả về một phản hồi hoặc một có thể xem được? Điều này có yêu cầu chúng ta khai báo phương thức này để trả về một đối tượng không? – onejigtwojig

+0

Cảm ơn bạn đã trả lời. Nó đã giúp đỡ tôi. – user

+0

Cảm ơn bạn đã giúp. Thách thức tiếp theo là làm thế nào để buộc một chuyển hướng-khôi phục một chuyển tiếp đến một trang JSP. –

2

Nếu bạn không sử dụng Jersey, bạn có thể muốn làm điều này:

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

} 
Các vấn đề liên quan