Pfl*_*ugs 5 java tomcat web-services jax-ws
我的任务是编写 Java Web 服务以在我们的企业环境中集成两个不同的系统。由于我实际上是一名经验丰富的 C#.NET MVC 开发人员并且只认为自己是 Java 中级,因此我开始搜索“Java Web 服务教程”。我正在尝试运行此通用教程,但由于 HTTP 404 错误,我无法运行教程服务。
我在Netbeans 8.0.2 中使用 Java Web 应用程序模板。我使用JDK 1.6.0.25来编译教程(因为我需要编写的最终服务需要这个 Java 版本与我将使用的其他一些 JAR 兼容)。一切都编译成 WAR 文件就好了。
然后,我通过加载服务器的 Tomcat 管理器 GUI 并使用WAR 文件部署功能来部署 WAR 文件。当我这样做时,WAR 文件被复制,应用程序启动。但是,当我尝试通过教程中的链接“ http://localhost:8080/HelloWorld/hello ”访问该服务时,该服务返回 404 错误。
如果建议我需要更改 Java 或 Tomcat 版本或平台,我也需要知道这一点,因为我对这些技术几乎没有经验。但是,由于 Linux 发行版的限制(根据我的服务器管理员),我可能无法更改所有因素。
我在 Windows 7 笔记本电脑上安装了本地 Tomcat 服务器。由于 Linux 服务器运行的是 Java 1.7.0.75,我从Oracle 的支持页面安装了JRE 1.7.0.75的匹配 Windows 版本。然后我从他们的档案中下载了Apache Tomcat 6.0.24 Windows 服务并成功安装,使用 JRE 1.7.0.75 和本地端口 1985(将它与 Netbeans 中使用的 GlassFish 本地服务器分开)。
就像在 Linux 服务器上一样,我的本地 Tomcat 服务器无法启动教程。手动单击启动命令链接会显示消息“失败 - 上下文路径 /com.mkyong.ws 上的应用程序无法启动”。我的本地服务器的日志也没有显示有关该应用程序无法启动的任何信息。
根据上述教程的第 5 部分,我将指定的 JAR 文件添加到服务器的 {$Tomcat}/lib 文件夹并重新启动服务器。这一次,应用程序启动了,但我仍然无法访问该服务。教程中的链接“ http://localhost:8080/HelloWorld/hello ”返回 404 错误。我什至尝试将整个 JAX-WS RI/lib 文件夹复制到 {$Tomcat}/lib 目录而不做任何更改,因此我取消了此更改。
作为参考,这是我复制的文件列表:
我取消了 WAR 文件的部署。使用Apache Tomcat Monitor,我停止了该服务,删除了现有日志,启用了 DEBUG 日志记录级别,然后重新启动了该服务。然后我重新部署了教程 WAR 文件。我再次看到它没有启动,然后我打开了所有日志文件。甚至没有提到访问服务失败,但可能没有记录 404 错误。
当我第一次创建 Web 应用程序时,Netbeans 提出为我设置本地 Glassfish 服务器。我接受了,我用默认值设置了一切。当我尝试针对此服务器运行教程时,我无法访问该服务。教程中的链接“ http://localhost:8080/HelloWorld/hello ”仍然返回 404 错误。
以下是我在没有找到解决方案的情况下查看的其他一些 StackOverflow 帖子和网站:
我很感激任何人都可以提供的任何故障排除指导。 预先感谢您的帮助!
根据@NIKETBHANDARY 的请求,我停止了服务,删除了日志,重新启动了服务,并在 Chrome 中浏览到 localhost:1985/helloworld/hello - 仍然收到 404 错误。然后我打开了catalina.log文件,但它完全是空的。只有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 文件返回任何点击。任何日志中都没有。这是否表明这是一个配置问题?
显然,在服务关闭时线程关闭之前,Tomcat 不会完全刷新其日志消息(可能是由于日志记录配置)。因此,我停止了刷新日志文件的服务。这是catalina.log文件的全部内容(其中确实包含对 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
Run Code Online (Sandbox Code Playgroud)
我越来越确信某处存在配置问题。凭直觉,我研究并安装了适用于 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/hello ”仍然返回404错误。因此,结果完全相同。
由于没有针对其他版本的 JDK编译教程,我很快就没有想法了... :-)
根据下面的另一个请求,这是{$Tomcat}\lib文件夹中所有 JAR 文件的列表:
该{$ Tomcat的} \ web应用文件夹包含以下内容:
该{$ Tomcat的} \的webapps \ com.mkyong.ws目录包含以下内容:
这是 Tomcat 管理器 GUI 的屏幕截图:
这是我与 URL 一起收到的 HTTP 404 错误的屏幕截图:
我还确认 WAR 中的文件与教程完全匹配。
您的 ws 模块部署存在问题。您刚刚从 MKyoung 示例中复制了整个文件夹。我不这样工作。
不仅如此,现在显示 ws 模块内的所有文件夹和文件结构,删除帖子中的其余模块。我只想要 ws 模块的结构。
模块名称必须为 Sample 而不是 com.mkyoung.ws 并且其结构必须为
**sample**
------WEB-INF
------index.jsp
WEB-INF
----classes
----web.xml
----sun-jaxws.xml
classes
----com
--------mkyoung
-----------ws
ws
-----Helloworld.class
-----HeloworldIMPL.class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8539 次 |
| 最近记录: |