Summary
我的任务是编写一个 Java Web 服务来集成企业环境中的两个不同的系统。由于我实际上是一名经验丰富的 C#.NET MVC 开发人员,并且只认为自己在 Java 方面处于中级水平,因此我首先搜索“Java Web Service 教程”。我正在尝试跑步这个通用教程, but 由于 HTTP 404 错误,我无法运行教程服务。
Process
我正在使用 Java Web 应用程序模板网豆8.0.2。我用了JDK 1.6.0.25编译本教程(因为我需要编写的最终服务需要此 Java 版本与我将使用的其他一些 JAR 兼容)。一切都可以编译成 WAR 文件。
然后,我通过加载服务器的 Tomcat Manager GUI 并使用要部署的 WAR 文件特征。当我这样做时,WAR 文件被复制,并且应用程序启动。但是,当我尝试通过链接“访问该服务时http://localhost:8080/HelloWorld/你好“ 来自tutorial,服务返回 404 错误。
服务器环境
- Oracle Enterprise Linux 发行版,版本 3.8.13-44.1.1.el6uek.x86_64
- 阿帕奇汤姆猫 6.0.24
- JVM 1.7.0_75-mockbuild_2015_01_20_16_42-b00
如果建议是我需要更改 Java 或 Tomcat 版本或平台,我也需要知道这一点,因为我对这些技术缺乏经验。但是,由于我的 Linux 发行版的限制(根据我的服务器管理员),我可能无法更改所有因素。
我尝试过的事情(按顺序):
在 Windows 上设置本地 Tomcat 服务器
我在 Windows 7 笔记本电脑上安装了本地 Tomcat 服务器。由于Linux服务器运行的是Java 1.7.0.75,因此我安装了匹配的Windows版本JRE 1.7.0.75 from Oracle 的支持页面。然后我下载了Apache Tomcat 6.0.24 Windows 服务 from 他们的档案并使用 JRE 1.7.0.75 和本地端口 1985 成功安装它(将其与 Netbeans 中使用的 GlassFish 本地服务器分开)。
就像在 Linux 服务器上一样,我的本地 Tomcat 服务器无法启动该教程。手动单击start命令链接给我消息“失败 - 上下文路径 /com.mkyong.ws 处的应用程序无法启动”。我的本地服务器的日志也没有显示有关该应用程序无法启动的任何信息。
将 JAX-WS RI JAR 文件添加到 {$Tomcat}/lib
根据第 5 条上面提到的教程,然后我将指示的 JAR 文件添加到服务器的 {$Tomcat}/lib 文件夹中并重新启动服务器。这次,应用程序已启动,但我仍然无法访问该服务。链接 ”http://localhost:8080/HelloWorld/你好“ 来自tutorial返回 404 错误。我什至尝试将整个 JAX-WS RI/lib 文件夹复制到 {$Tomcat}/lib 目录而不进行任何更改,因此我取消了此更改。
作为参考,这里是我复制的文件列表:
- gmbal-api-only.jar
- ha-api.jar
- jaxb-core.jar
- jaxb-impl.jar
- jaxws-api.jar
- jaxws-rt.jar
- 管理-api.jar
- 策略.jar
- stax-ex.jar
- 流缓冲区.jar
在本地 Tomcat 服务器中启用 DEBUG 模式
我取消部署了 WAR 文件。使用Apache Tomcat 监视器,我停止了服务,删除了现有日志,启用了 DEBUG 日志记录级别,然后重新启动了服务。然后我重新部署了教程 WAR 文件。我再次看到它没有启动,然后我打开了所有日志文件。甚至没有提及访问服务失败,但也许 404 错误没有被记录。
使用 Netbeans 嵌入式 Glassfish 服务器运行服务
当我第一次创建 Web 应用程序时,Netbeans 提出为我设置本地 Glassfish 服务器。我接受了,并将一切设置为默认值。当我尝试针对该服务器运行教程时,我无法访问该服务。链接 ”http://localhost:8080/HelloWorld/你好“ 来自tutorial仍然返回 404 错误。
研究其他帖子和教程
以下是我查看过但未找到解决方案的其他一些 StackOverflow 帖子和网站:
-
Tomcat 服务器上的 JAX-WS(不适用)
-
在 Apache Tomcat 中将 JAX-WS Web 服务部署为 War(类似于tutorial建议复制额外的 JAR 文件)
-
Apache Tomcat 中的 JAX-RPC / JAX-WS 运行时(仅供参考)
-
如何将jax-ws服务部署到eclipse或tomcat?(类似于tutorial建议复制额外的 JAR 文件)
-
https://myarch.com/create-jax-ws-service-in-5-minutes/(类似于tutorial但没有部署帮助)
我正在思考的问题
- 教程中的代码有问题吗? (似乎不太可能,因为从其他人已经取得成功的评论来看。)
- 他在教程中使用的 Java 或 Tomcat 版本有显着差异吗? (他没有提供 Java 或 Tomcat 的版本。)
- 我应该针对 JDK 而不是 JRE 运行本地 Tomcat 吗?
- 本教程是否应该针对 Tomcat 使用的同一 JDK 进行编译? (我希望不会,因为这看起来非常有限......)
- 我什至可以在 Tomcat 中运行 JAX-WS 吗? (基于类似的页面http://tomee.apache.org/apache-tomee.html,似乎基础 TOmcat 甚至可能不支持 JAX-WS?再说一遍,只是我有限的经验。)
我很感激任何人都可以提供的任何故障排除指导。预先感谢您的帮助!
更新#1
根据 @NIKETBHANDARY 的请求,我停止了服务,删除了日志,重新启动了服务,并在 Chrome 中浏览到 localhost:1985/helloworld/hello - 仍然收到 404 错误。然后我打开了卡塔琳娜日志文件,但它完全是空的。仅有的jakarta_service.log有任何日志条目,并且所有日志条目都与服务启动有关。我还验证了日志记录级别设置为debug。我还可以更改哪些内容来获取更多日志消息?
我还在整个 Tomcat 目录中搜索了“com.mkyong”。仅 webapp WAR 文件、webapps/../META-INF/context.xml、webapps/../WEB-INF/sun-jaxws.xml 和 /conf/cataline/localhost/com.mkyong.we.xml 文件返回任何点击。任何日志中都没有任何内容。这是否表明这是一个配置问题?
更新#2
显然,Tomcat 不会完全刷新其日志消息,直到线程随着服务关闭而关闭(可能是由于日志记录配置)。因此,我停止了刷新日志文件的服务。以下是该文的全部内容卡塔琳娜日志文件(其中包含对 com.mkyong 的引用):
Aug 17, 2015 9:51:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.19.
Aug 17, 2015 9:51:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Aug 17, 2015 9:51:19 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-1985
Aug 17, 2015 9:51:19 PM org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
Aug 17, 2015 9:51:19 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2121 ms
Aug 17, 2015 9:51:19 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Aug 17, 2015 9:51:19 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.24
Aug 17, 2015 9:51:19 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor com.mkyong.ws.xml
Aug 17, 2015 9:51:20 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
INFO: WSSERVLET12: JAX-WS context listener initializing
Aug 17, 2015 9:51:22 PM com.sun.xml.ws.transport.http.servlet.WSServletDelegate <init>
INFO: WSSERVLET14: JAX-WS servlet initializing
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor host-manager.xml
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
Aug 17, 2015 9:51:22 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-1985
Aug 17, 2015 9:51:22 PM org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3895 ms
更新#3
我越来越确信某个地方存在配置问题。凭直觉,我研究并安装了适用于 Windows 的 Apache TomEE 1.7.2,指向与常规 Tomcat 相同的 JRE。学习完之后running.txt
文件并试验属性和设置,我终于能够启动 TomEE 的本地版本。我部署了与之前相同的 WAR 文件,发现由于以下错误,它无法加载 WAR 应用程序:
java.lang.ClassNotFoundException:com.sun.xml.ws.transport.http.servlet.WSServletContextListener
谷歌搜索这个错误(再次)到 MKYong 的博客寻求修复(复制jaxws-rt.jar
文件到{$tomcat}/lib文件夹。我重新部署了 WAR 文件,管理器加载了该应用程序。然而,就像在常规 Tomcat 上一样,URL“http://localhost:8080/HelloWorld/你好“ 来自tutorial仍然返回 404 错误。所以,结果是完全一样的。
缺少编译tutorial与其他版本的 JDK 相比,我很快就没有想法了……:-)
更新#4
根据下面的另一个请求,这里是所有 JAR 文件的列表{$Tomcat}\lib folder:
- 注释-api.jar
- 卡塔琳娜.jar
- catalina-ant.jar
- catalina-ha.jar
- catalina-tribes.jar
- el-api.jar
- gmbal-api-only.jar
- ha-api.jar
- 贾斯珀.jar
- jasper-el.jar
- jasper-jdt.jar
- jaxb-core.jar
- jaxb-impl.jar
- jaxws-api.jar
- jaxws-rt.jar
- jsp-api.jar
- 管理-api.jar
- 策略.jar
- servlet-api.jar
- stax-ex.jar
- 流缓冲区.jar
- tomcat-coyote.jar
- tomcat-dbcp.jar
- tomcat-i18n-es.jar
- tomcat-i18n-fr.jar
- tomcat-i18n-ja.jar
The {$Tomcat}\webapps文件夹包含以下内容:
- ..\com.mkyong.ws
- ..\docs
- ..\例子
- ..\主机管理器
- ..\经理
- ..\ROOT
- ..\com.mkyong.ws.war
更新#5
The {$Tomcat}\webapps\com.mkyong.ws目录包含以下内容:
以下是 Tomcat 管理器 GUI 的屏幕截图:
以下是我收到的 HTTP 404 错误的屏幕截图以及 URL:
我还确认了 WAR 中的文件与tutorial.