我有一个使用Spring的完美工作的演示服务器/客户端应用程序对(仅限!) - 不涉及CXF或WSDL。它在Apache Tomcat 7.0.34的帮助下运行。
我很想知道是否可以在浏览器(http://localhost:8080/
)上看到它的存在迹象,但我找不到源代码中的URL的任何提示(从教程中逐字复制)。
然后我发现this thread提供了获取端点URL的方法:
TransportContext tc = TransportContextHolder.getTransportContext();
WebServiceConnection wc = tc.getConnection();
URI uri = wc.getUri();
我将此添加到我的demo / tutorial 客户端的代码中,而第一个语句(getTransportContext()
)没有抛出任何异常,返回null ,所以第二个(getConnection()
)抛出一个NullPointerException。
为什么?
“纯粹的”基于Spring的servlet是否缺少端点URL?
如果没有,我错过了什么?检索服务URL的方法是什么?
我知道客户端通过上下文路径和 bean id (在共享的 beans.xml中定义)了解服务器):
ClassPathXmlApplicationContext appContext =
new ClassPathXmlApplicationContext( new String[] {"/sample/spring/beans.xml" } );
但是没有相当于此的URL吗?像WSDL一样吗?
答案 0 :(得分:1)
我同意@ GreyBeardedGeek的评论,Spring web-app上没有端点URL的概念(一般来说是java servlet web-app)。
如果确实需要运行时查找用户用于访问应用程序的URL,可以使用ServletRequest / HttpServletRequest方法,如getRemoteAddr(),getRemoteHost(),getURL(),getContextPath()等。例如:
@RequestMapping("/home")
public String home(HttpServletRequest req) {
String host = req.getRemoteHost();
// ...
}
但请记住,多个URL可以指向同一个tomcat服务器,例如,如果设置了反向代理/ DNS CName。这可能(或不会)为您提供不同的URL。