Java JAX-RS rest服务工作正常。如何添加JSP页面?被配置卡住了
我已经使用Java JAX-RS rest服务工作正常。如何添加JSP页面?被配置卡住了,java,jsp,rest,cxf,jax-rs,Java,Jsp,Rest,Cxf,Jax Rs,我已经使用cxf-rt前端jaxrs2.7.7运行了一些rest服务 /myservice/customers /myservice/items 我的rest服务提供两个端点: @Component public class CustomerService { @GET @Path("customers") @Produces({MediaType.APPLICATION_JSON}) public ... getCustomers() { ... }
cxf-rt前端jaxrs
2.7.7运行了一些rest服务
/myservice/customers
/myservice/items
我的rest服务提供两个端点:
@Component
public class CustomerService {
@GET
@Path("customers")
@Produces({MediaType.APPLICATION_JSON})
public ... getCustomers() { ... }
@GET
@Path("items")
@Produces({MediaType.APPLICATION_JSON})
public ... getItems() { ... }
}
这非常有效,现在我想添加一些jsp页面
我已经读过,但是我无法让它工作,我对web.xml
和applicationContext.xml
中的配置感到困惑
以下是我目前掌握的情况:
web.xml
错误
如果我打开/customerservice/items
,我将从rest服务收到一个有效的JSON响应
但是,如果我打开/customerservice/admin/item.jsp
,我会收到以下信息:
[10:34:45.791][qtp104543434-33]警告JAXRSUtils-找不到与请求路径“/customerservice/admin/item.jsp”匹配的操作,相对路径:/admin/item.jsp,HTTP方法:GET,ContentType:/,Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8,。有关详细信息,请启用精细/跟踪日志级别。
[10:34:45.796][qtp104543434-33]错误DefaultExceptionMapper-DefaultExceptionMapper返回的响应:内部服务器错误
javax.ws.rs.ClientErrorException:null
在org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:503)~[cxf-rt-frontend-jaxrs-2.7.7.jar:2.7.7]
在org.apache.cxf.jaxrs.interceptor.jaxrsinterceptor.processRequest(jaxrsinterceptor.java:227)~[cxf-rt-frontend-jaxrs-2.7.7.jar:2.7.7]
在org.apache.cxf.jaxrs.interceptor.jaxrsinterceptor.handleMessage(jaxrsinterceptor.java:103)~[cxf-rt-frontend-jaxrs-2.7.7.jar:2.7.7]
在org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)[cxf-api-2.7.7.jar:2.7.7]
在org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)[cxf-api-2.7.7.jar:2.7.7]
在org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)[cxf-rt-transports-http-2.7.7.jar:2.7.7]
在org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)[cxf-rt-transports-http-2.7.7.jar:2.7.7]
在org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)[cxf-rt-transports-http-2.7.7.jar:2.7.7]
在org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)[cxf-rt-transports-http-2.7.7.jar:2.7.7]
我做错了什么
我的web.xml中是否需要单独的servlet和url映射
我的请求调度器是否需要进一步配置(例如dispatcherName
属性)
非常感谢您的指导。我将CXFServlet url模式更改为/rest/*
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
CXF服务器
/休息/*
我的rest URL现在是/customerservice/rest/items
和/customerservice/rest/customers
现在,当我的jsp页面放在webapp/admin(不是webapp/WEB-INF/admin)下时,我得到了url/customerservice/admin/item.jsp的响应,我认为这是正确的
似乎请求“通过”了默认的ApacheJasperJSPServlet(我没有以任何方式配置)
答复如下:
你好,世界
太好了,感谢Lutz的最初评论
现在我需要向jsp页面中注入一些bean,也许我可以在这里使用类似于ExposeContextBeanSatributes的东西。尝试映射您的JAX-RS应用程序,而不是在/
,而是在下面。@LutzHorn谢谢,现在我得到一个不同的错误。现在我必须在web.xml中配置一个JSPServlet(如果是哪种类型,是否有cxf类型?),我的RESTURL不起作用,但我发现它是由于相对路径发生了变化。所以也许我应该使用/customerservice/rest/items/*
etc@LutzHorn如果你把你的评论写得很简短,我愿意接受你的回答。这只是一个猜测:)你可以用你所发现的回答你自己的问题。
<jaxrs:server id="rest" address="/">
<jaxrs:serviceBeans>
<ref bean="customerWebService" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
<ref bean="dispatchProvider"/>
</jaxrs:providers>
</jaxrs:server>
<bean id="dispatchProvider" class="org.apache.cxf.jaxrs.provider.RequestDispatcherProvider">
<property name="dispatcherName" value="jsp"/>
<property name="resourcePath" value="/admin/item.jsp"/>
<property name="beanNames">
<map>
<entry key="com.company.domain.Item" value="item"/>
</map>
</property>
</bean>
<%@ page import="com.company.domain.Item" %>
<%
Item item = (Item) request.getAttribute("item");
%>
<html>
<head></head>
<body>
Item: <%= item.getEnglishName() %>.
</body>
</html>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>