Servlet: HelloServlet 404错误

来源:互联网 发布:免费留学国家知乎 编辑:程序博客网 时间:2024/05/22 07:00


刚开始学习Servlet 时,开始写一个HelloWorld小程序测试Servlet程序是否能够Tomcat服务器下正常工作。可是在浏览器输入URL时就出现404错误,在网上找了好多答案,但并没有正确解决问题。在stackoverflow上终于得到一个提示,最终解决了404错误。以下是个人解决问题的方案:具体也可以参考:stackoverflow


问题的关键是该测试类不能为裸体类,必须加包名作为URL唯一标识符。

(本文只是提供一种解决方案,不必模仿路径名)

文件目录:

Tomcatwebapps建立一个测试目录:testdemo

testdemo

|-----WEB-INF

|-----web.xml

|-----classes

|-----com

|-----examle

|-----HelloServlet.class


java文件:

最主要为该java文件添加包名,作为URL的标识符。作为测试,我只是简单添加:package com.example。

本人遇到的错误是直接使用裸体类,并没有为Java文件添加package,故出现了404错误(Tomcat 7.0.33)。

package com.example;

/**

 * 2012-12-08

 * HelloServlet.java

 *

 * test tomcat setting

 */

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class HelloServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse

        response) throws IOException {

        

        PrintWriter out = response.getWriter();

        

        java.util.Date d = new java.util.Date();

        out.println("<html>" +

            "<body>"+"<h1 align=center>Hello Servlet!</h1>"+"<br />"+

            "</body>" + "</html>" 

        );

    }

}

(对于不知怎样得到.class 文件,在Tomcat目录下的lib目录把相应的servlet jar包添加到环境变量,直接javac编译该java文件,同时把.class文件复制到自己的classes目录下)


web.xml文件配置:<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0">

  

  

  <servlet>

        <servlet-name>Hello Servlet</servlet-name>

        <servlet-class>com.example.HelloServlet</servlet-class>

    </servlet>

  

  <servlet-mapping>

        <servlet-name>Hello Servlet</servlet-name>

        <url-pattern>/hello</url-pattern>

  </servlet-mapping>

  

</web-app>

该文件的分析:在web.xml中通过映射找到Servlet类。客户端通过公共名称即<url-pattern>/hello</url-pattern>中的hello找到<servlet-name>Hello Servlet</servlet-name>,最终找到<servlet-class>com.example.HelloServlet</servlet-class>Servlet类。在第一步中写什么都可以,但必须为用户知道的名称,同时不能漏掉/,因为是在你的工程名字下访问的;在第三步中,必须写完整的路径名,但不必加.class


访问该Servlet类: http://localhost:8080/testdemo/hello

(提示一下:改变了.class部署文件,有必要重起Tomcat服务器)


好吧,就写到这里,我的解决方法可能并不能适合你的,我只是提供一种解决方法,如不能解决你的问题,请继续搜索答案。


原创粉丝点击