我的任务是编写一个Java Web服务,在我们的企业环境中集成两个不同的系统。由于我实际上是一位经验丰富的C#.NET MVC开发人员,并且只考虑自己是Java的中间人,所以我开始搜索" Java Web服务教程"。我正在尝试运行this common tutorial,但由于HTTP 404错误,我无法运行教程服务。
我在 Netbeans 8.0.2 中使用Java Web应用程序模板。我使用 JDK 1.6.0.25 来编译教程(因为我需要编写的最终服务需要这个Java版本与我将要使用的其他JAR兼容)。一切都可以编译成WAR文件。
然后我通过加载服务器的Tomcat Manager GUI并使用 WAR文件部署功能来部署WAR文件。当我这样做时,将复制WAR文件,并启动应用程序。但是,当我尝试通过链接" http://localhost:8080/HelloWorld/hello"从tutorial开始,服务返回404错误。
如果建议是我需要更改Java或Tomcat版本或平台,我需要知道这一点,因为我对这些技术的经验很少。但是,由于Linux发行版的限制(我的服务器管理员),我可能无法更改所有因素。
我在Windows 7笔记本电脑上安装了本地Tomcat服务器。由于Linux服务器运行的是Java 1.7.0.75,因此我从JRE 1.7.0.75安装了匹配的Windows版Oracle's support page。然后我从Apache Tomcat 6.0.24 Windows Service下载their archives并使用JRE 1.7.0.75和本地端口1985成功安装它(将其与Netbeans中使用的GlassFish本地服务器分开)。
就像在Linux服务器上一样,我的本地Tomcat服务器无法启动教程。手动单击开始命令链接会向我显示消息" FAIL - 上下文路径/com.mkyong.ws上的应用程序无法启动"。我的本地服务器日志不会显示该应用程序无法启动的任何内容。
根据tutorial mentioned above的第5部分,我将指示的JAR文件添加到服务器的{$ Tomcat} / lib文件夹中,然后重新启动服务器。这次,应用程序已启动,但我仍然无法访问该服务。链接" http://localhost:8080/HelloWorld/hello"从tutorial返回404错误。我甚至尝试将整个JAX-WS RI / lib文件夹复制到{$ Tomcat} / lib目录而没有任何更改,所以我撤销了这一更改。
作为参考,这里列出了我复制过的文件:
我取消部署了WAR文件。使用 Apache Tomcat Monitor ,我停止了服务,删除了现有日志,启用了DEBUG日志记录级别,并重新启动了服务。然后我重新部署了教程WAR文件。我再次看到它没有启动,然后我打开了所有日志文件。甚至没有提到无法访问该服务,但可能没有记录404错误。
当我第一次创建Web应用程序时,Netbeans提供了一个本地Glassfish服务器。我接受了,我用默认设置了一切。当我尝试针对此服务器运行教程时,我无法访问该服务。链接" http://localhost:8080/HelloWorld/hello"来自tutorial仍会返回404错误。
以下是我在未找到解决方案的情况下审核过的其他一些StackOverflow帖子和网站:
我很感激任何人都可以提供的任何故障排除指导。 提前感谢您的帮助!
根据@NIKETBHANDARY的请求,我停止了服务,删除了日志,重新启动了服务,并在Chrome浏览器中浏览到localhost:1985 / helloworld / hello - 仍然收到404错误。然后我打开了 catalina.log 文件,但它完全是空的。只有 jakarta_service.log 有任何日志条目,并且所有日志条目都与服务启动有关。我还验证了日志记录级别设置为 debug 。还有什么可以更改以获取其他日志消息?
我还搜索了" com.mkyong"在整个Tomcat目录中。只有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
我越来越相信某处存在配置问题。在预感中,我研究并安装了Apache TomEE 1.7.2 for Windows,指向与常规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上一样,来自http://localhost:8080/HelloWorld/hello的URL&#34; tutorial&#34;仍然会返回404错误。因此,结果是完全一样。
如果没有针对其他版本的JDK编译tutorial,我很快就会想到......: - )
根据下面的另一个请求,此处列出了 {$ Tomcat} \ lib 文件夹中的所有JAR文件:
{$ Tomcat} \ webapps 文件夹包含以下内容:
{$ Tomcat} \ webapps \ com.mkyong.ws 目录包含以下内容:
这是Tomcat Manager GUI的屏幕截图:
以下是我收到的HTTP 404错误的屏幕截图:&/ p>
我还确认WAR中的文件与tutorial完全匹配。
答案 0 :(得分:3)
部署ws模块时出现问题。 你刚刚从MKyoung样本中复制了整个文件夹。 我不这样做。
现在不仅显示ws模块中的所有文件夹和文件结构,还要删除帖子中的其余模块。我只想要ws模块的结构。
模块名称必须采样而不是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
答案 1 :(得分:3)
@NIKETBHANDARY帮助我了解错误以及如何快速纠正错误。我还想准确发布我做错了什么,以及我如何永久修复它,以便将来的编码员可以从我五天的经验中受益。 : - )
当我最初使用Netbeans构建教程时,我使用了 Java Web - &gt; Web应用程序模板(安装 Java EE Base 插件后可通过 Netbeans - &gt;工具 - &gt;插件访问):
我按照the tutorial精确构建了所有文件,但我没有真正阅读第5步,特别是这一行:
<jar jarfile="${dist}/war/HelloWorld-${DSTAMP}.war" basedir="${dist}/war/build/"/>
经过进一步审查,我发现构建脚本正在生成一个名为 HelloWorld.war 的WAR文件。然后,当该文件部署到Tomcat时,Web应用程序在Tomcat管理器中被称为 HelloWorld 。这就是服务端点设置为http://localhost:8080/HelloWorld/hello的原因。 &#34; HelloWorld&#34;字面意思是Tomcat应用程序的名称,&#34; / hello&#34; part与 sun-jaxws.xml 文件中的端点对应。 (回想一下,鉴于典型的网络托管组织,它完全有道理.IIS几乎以同样的方式工作。)
因此,为了解决这个问题,我需要修改Netbeans项目以生成名为 HelloWorld.war 的WAR文件。在the tutorial中,他包含一个实际的Ant构建脚本。在这种情况下,我需要采取以下步骤: