2011-08-08 2 views
6

JBoss 버전 : 4.2.3GA. 이것은 아파치 바람둥이 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)를 사용 중입니다. "서블릿"참조 및 태그를 제거했습니다. 실제 서블릿이 실제로 무엇인지 배우려면 서블릿 wiki 페이지를 확인하십시오. – BalusC

+0

restlet 컨트롤러와 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에 전달할 수 있다면 어떨까요? 그런 다음이 메소드는 Response 또는 Viewable? 이것에 의해,이 메소드가 Object를 돌려 주도록 (듯이) 선언 할 필요가 있습니까? – 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)); 
    } 

} 
관련 문제