How to switch from JAX-RS service to JSP?

JBoss Version: 4.2.3GA. This works in apache tomcat 6.0. In JBoss, I had to add the following parameter: -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false to make the work work, but now when I load the page, I get the following error. It seems to me that I do it the way JBoss does not like it, but I have not seen other examples. Does anyone know a way to make this work?

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

An exception:

 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) 
+6
source share
2 answers

After getting some help from another place, I realized that I am connecting my JSP and wrestling in a funny way, and what I really wanted to do was use Viewable. It also improves performance in JBoss. Here is a brief description of what I got:

 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); } 
+14
source

If you are not using a jersey, you can do this:

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

Source: https://habr.com/ru/post/894553/


All Articles