Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS rest服务工作正常。如何添加JSP页面?被配置卡住了_Java_Jsp_Rest_Cxf_Jax Rs - Fatal编程技术网

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>