第一个servlet,但无法打开它

时间:2013-12-15 15:58:26

标签: java tomcat servlets

实际上我尝试创建我的第一个servlet并在浏览器中打开它。但我总是得到404错误。

tomcat目录中的webapps文件夹如下所示:

docs
examples
host-manageR
manager
ROOT
test
    index.htmL

    servlet
        bin
            test.class
        src
            test.java
    .classpath
    .project

    WEB-INF
        classes

我的index.html:

<html>
<body>
    <div style="width:500px;height:300px;margin:auto;background-color:#EEEEEE;padding:0px 10px 0px 10px;margin-top:50px;">
        <h1>Send Text</h1>
        <form action="servlet/bin/test" method="get" style="font-size:10px;">
            <textarea rows="10" cols="59" name="input"></textarea>
            <input type="submit" style="margin-top:20px;"></input>
        </form>
    </div>
</body>

这是我的测试类:

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

@WebServlet(urlPatterns={"/servlet/bin/test"})
public class test extends HttpServlet{

    public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{
        PrintWriter out = res.getWriter();
        res.setContentType("text/html");
        out.println("this is First servlet Example ");
    }
}

我知道它对html表单的输入没有任何作用,但此时我只想打开它并看到^^中的文本......但是当我打开时:

http://localhost:8080/test/index.html

,填写表格和计数或当我打开时:

http://localhost:8080/test/servlet/bin/test

直接,我总是得到404错误我尝试的一切。我更喜欢没有xml的解决方案,但我认为问题不存在。

3 个答案:

答案 0 :(得分:1)

此代码中存在几个问题。

您不尊重Java命名约定。类应始终以大写字母开头。它们永远不应该在默认包中。

您正在部署整个开发环境(来源等),而不是生成正确的war文件或爆炸的war文件,并且勉强这样做。您的网络应用程序的结构应该是

test
    any static file you want
    WEB-INF
        classes
            .class files, organized in directories strictly matching the package hierarchy
        lib
            jar files needed by your application

你对什么

感到困惑
@WebServlet(urlPatterns={"/servlet/bin/test"})

一样。 url模式是您要用于访问servlet的URL集。该值与磁盘上servlet类的实际位置无关。如果您希望servlet的URL为/hello,那么只需使用

即可
@WebServlet(urlPatterns={"/hello"})

或者,甚至更简单:

@WebServlet("/hello")

部署后,servlet的完整URL将为:

http://localhost:8080/test/hello

/test是您的webapp的上下文路径,默认情况下,是您放在tomcat / webapps下的爆炸war目录的war文件的名称。

答案 1 :(得分:0)

尝试按照Java-Brains中的这些教程来学习JSP&amp; Servlets非常简单,从头开始解释每一件事:)

答案 2 :(得分:0)

我认为在所有评论之后,问题就在于你的问题 web存档甚至没有在服务器中注册。

尝试将测试中的everthing打包为zip文件,并将其重命名为test.war。 war文件不再是一个zip文件,结尾为web存档“war” 表示服务器应将存档解析为Web应用程序。

如果你提取这个档案,它应该是这样的。

index.html
WEB-INF
   web.xml
     |- classes
          |- test.class   
     |- lib

使用tomcat的管理控制台部署此文件,并手动将其部署到您的服务器。

另外看看Webarchives“战争”。

如果servlet在服务器中正确注册,而不是使用它 您在@WebServlet批注中声明的指定模式。 上下文路径适用于war war archive的名称。

http://localhost:8080/<name of the warfile>/<urlPattern>
http://localhost:8080/test/servlet/bin/test // if the given example still applies