gpt4 book ai didi

java - JAX-RS 休息服务工作正常。如何添加JSP页面?被配置卡住了

转载 作者:行者123 更新时间:2023-12-01 13:50:47 27 4
gpt4 key购买 nike

我已经使用 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 页面。

我读过Redirecting requests and serving static content ,但我无法让它工作,并且我对 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,我会收到来自其余服务的有效 JSON 响应。

但是,如果我打开 /customerservice/admin/item.jsp 我会收到以下内容:

[10:34:45.791] [qtp104543434-33] WARN JAXRSUtils - No operation matching request path "/customerservice/admin/item.jsp" is found, Relative Path: /admin/item.jsp, HTTP Method: GET, ContentType: /, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8,. Please enable FINE/TRACE log level for more details. [10:34:45.796] [qtp104543434-33] ERROR DefaultExceptionMapper - DefaultExceptionMapper returned response: Internal Server Error javax.ws.rs.ClientErrorException: null at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:503) ~[cxf-rt-frontend-jaxrs-2.7.7.jar:2.7.7] at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:227) ~[cxf-rt-frontend-jaxrs-2.7.7.jar:2.7.7] at 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] at org.apache.cxf.transport.servlet.ServletController.invokeDestination(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] at 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-pattern 更改为/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注入(inject)到jsp页面中,也许有像exposeContextBeansAsAttributes这样的东西我可以在这里使用。

关于java - JAX-RS 休息服务工作正常。如何添加JSP页面?被配置卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19974191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com