4

我有一个使用 Spring 的完美运行的演示服务器/客户端应用程序对(仅!)——不涉及 CXF 或 WSDL。它在 Apache Tomcat 7.0.34 的帮助下运行。

我很想知道是否可以在浏览器上看到它存在的任何痕迹http://localhost:8080/

然后我找到了这个线程,它提供了一种获取端点 URL 的方法:

TransportContext tc = TransportContextHolder.getTransportContext();
WebServiceConnection wc = tc.getConnection();
URI uri = wc.getUri();

我将此添加到我的演示/教程客户端的代码中,虽然第一个语句 ( getTransportContext()) 没有引发任何异常,但它返回 null,因此第二个语句 ( getConnection()) 引发 NullPointerException。

为什么?

“纯”基于 Spring 的 servlet 是否缺少端点 URL?

如果没有,我错过了什么?检索服务 URL 的方法是什么?

我知道客户端通过上下文路径bean id(在共享beans.xml中定义)了解服务器:

ClassPathXmlApplicationContext appContext = 
      new ClassPathXmlApplicationContext( new String[] {"/sample/spring/beans.xml" } );

但是没有与此等效的URL吗?像 WSDL 一样吗?

4

1 回答 1

1

我同意@GreyBeardedGeek 的评论,Spring web-app(一般是java servlet web-app)上没有端点URL 的概念。

如果您确实需要运行时查找用户用于访问您的应用程序的 URL,您可以使用 ServletRequest / HttpServletRequest 方法,例如 getRemoteAddr()、getRemoteHost()、getURL()、getContextPath() 等。例如:

@RequestMapping("/home")
public String home(HttpServletRequest req) {
  String host =  req.getRemoteHost();
  // ...
}

但是请记住,多个 URL 可以指向同一个 tomcat 服务器,例如,如果设置了反向代理/DNS CName。这可能(或不会)为您产生不同的 URL。

于 2013-06-03T06:54:20.460 回答