繁体   English   中英

JAX-RS休息服务运行正常。 如何添加JSP页面? 卡住配置

[英]JAX-RS rest services working fine. How to add JSP pages? Stuck with configuration

我已经使用cxf-rt-frontend-jaxrs 2.7.7运行了一些休息服务

/myservice/customers
/myservice/items

我的休息服务提供2个端点:

@Component
public class CustomerService {
    @GET
    @Path("customers")
    @Produces({MediaType.APPLICATION_JSON})
    public ... getCustomers() { ... }

    @GET
    @Path("items")
    @Produces({MediaType.APPLICATION_JSON})
    public ... getItems() { ... }
}

这很好用,现在我想添加一些jsp页面。

我已经阅读了有关重定向请求和提供静态内容的信息 ,但是我无法使其正常运行,并且对web.xmlapplicationContext.xml的配置感到困惑。

这是我到目前为止的内容:

web.xml

<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

applicationContext.xml中

<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>

JSP页面

我已将名为item.jsp的jsp网页放入webapp / WEB-INF。

<%@ page import="com.company.domain.Item" %>
<%
    Item item = (Item) request.getAttribute("item");
%>
<html>
  <head></head>
  <body>
    Item: <%= item.getEnglishName() %>.
  </body>
</html>

错误

如果我打开/customerservice/items则会从rest服务收到有效的JSON响应。

但是,如果我打开/customerservice/admin/item.jsp收到以下消息:

[10:34:45.791] [qtp104543434-33] WARN JAXRSUtils-找不到与请求路径“ /customerservice/admin/item.jsp”匹配的操作,相对路径:/admin/item.jsp,HTTP方法:GET,ContentType: / ,接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8,。 请启用FINE / TRACE日志级别以获取更多详细信息。 [10:34:45.796] [qtp104543434-33]错误DefaultExceptionMapper-DefaultExceptionMapper返回了响应:内部服务器错误javax.ws.rs.ClientErrorException: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.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:227)〜[cxf-rt-frontend -jaxrs-2.7.7.jar:2.7.7],位于org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:103)〜[cxf-rt-frontend-jaxrs-2.7.7.jar: 2.7.7] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)[cxf-api-2.7.7.jar:2.7.7] at org.apache.cxf.transport.ChainInitiationObserver.onMessage (ChainInitiationObserver.java:121)[cxf-api-2.7.7.jar:2.7.7] at 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.inv okeDestination(ServletController.java:248)[cxf-rt-transports-http-2.7.7.jar:2.7.7] at 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网址格式更改为/ rest / *

<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

我的休息网址现在是/customerservice/rest/items/customerservice/rest/customers

现在,当我将jsp页面放在webapp / admin(不是webapp / WEB-INF / admin)下时,我得到对url /customerservice/admin/item.jsp的响应,我认为这是正确的。

似乎该请求“落入”了默认的apache jasper JspServlet(我没有以任何方式进行配置)。

响应:

Hello World

太好了,感谢Lutz的初步评论!

现在,我需要将一些bean注入jsp页面中,也许这里可以使用诸如exposeContextBeansAsAttributes东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM