2015-12-10 132 views
0

在SO上有这样的问题,但没有一个解决了我的问题,我想不出任何可能导致此错误的问题。Tomcat servlet - 状态404请求的资源不可用

我试图写一个简单的servlet,只输出“Hello World”:

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class PrintServlet extends HttpServlet { 


    public void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("Hello World"); 
    } 
} 

我所做的就是编译java文件,编译后的文件移动到/usr/local/apache-tomcat-7.0.65/webapps/examples/WEB-INF/classes,再加入这些到网上位于/usr/local/apache-tomcat-7.0.65/webapps/examples/WEB-INF .xml文件:

<servlet> 
    <serlet-name>PrintServlet</servlet-name> 
    <servlet-class>PrintServlet</servlet-name> 
</servlet> 

<servlet-mappinng> 
<servlet-name>PrintServlet</servlet-name> 
<url-pattern>/servlet/PrintServlet</url-pattern> 
</servlet-mapping> 

并试图访问使用http://localhost:8080/servlet/PrintServlet该servlet。

我收到错误消息:状态404请求的资源不可用。

我没有看到可能出现错误的地方,我只是简单地跟随教程。有人可以帮我吗?

编辑:在catalina.out的

日志文件(通过调用尾-f catalina.out的得到了这个,不知道怎么回事打开此文件)。

Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/examples has finished in 130 ms 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/host-manager 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/host-manager has finished in 80 ms 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/manager 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/manager has finished in 96 ms 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/ROOT 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/ROOT has finished in 62 ms 
Dec 10, 2015 4:46:02 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Dec 10, 2015 4:46:02 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 918 ms 

启动消息调用./startup.sh时:

Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.65 
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.65 
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.65/temp 
Using JRE_HOME:  /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home 
Using CLASSPATH:  /usr/local/apache-tomcat-7.0.65/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.65/bin/tomcat-juli.jar 
Tomcat started. 
+0

- >'http:// localhost:8080/examples/servlet/PrintServlet' – Mil4n

+0

不幸的是,我得到了同样的错误。 – eager2learn

+0

尝试使用示例/ servlet/PrintServlet –

回答

2

在web.xml你说你有这样的:

<servlet> 
    <serlet-name>PrintServlet</servlet-name> 
    <servlet-class>PrintServlet</servlet-name> 
</servlet> 

<的servlet类> PrintServlet </servlet-name>区别?

它应该是这样的:

<servlet> 
    <serlet-name>test.PrintServlet</servlet-name> 
    <servlet-class>PrintServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

解决这个问题,重新启动和报告,如果它工作;-)

如果不工作:

我想你做的映射更简单:

<servlet-mappinng> 
    <servlet-name>PrintServlet</servlet-name> 
    <url-pattern>/print</url-pattern> 
</servlet-mapping> 

应该解析为http://localhost:8080/examples/print

而一些调试输出添加到您的servlet:

package test; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class PrintServlet extends HttpServlet { 

    static { 
     System.out.println("STACKOVERFLOW:> I've been loaded!"); 
    } 

    public void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("Hello World"); 
    } 
} 

重新编译,放在例子/ WEB-INF/classes下,重新启动Tomcat并观察行出现。或者日志显示错误消息?

+0

这是一个人眼! :)或好的IDE – Mil4n

+0

感谢您的帮助,但不幸的是,即使纠正后,我仍然得到相同的错误信息。也许问题出在指定的url-pattern中。在浏览器中编写/servlet/PrintServlet然后调用“localhost:8080/examples/servlet/PrintServlet”是否正确? – eager2learn

+0

看到我的编辑 - 希望这有助于 – Jan

相关问题