java - 第一个 servlet,但无法打开它

标签 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 的解决方案,但我认为问题不存在。

最佳答案

这段代码有几个问题。

您没有遵守 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 下的 exploded war 目录的 war 文件的名称。

关于java - 第一个 servlet,但无法打开它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596458/

相关文章:

Java自定义注解/装饰器@Testing

java - 在 Tomcat webapps 目录中部署 war 文件未在浏览器上运行

database - 使用连接池或 session 管理数据库连接。如何?

Java在线程中解析和更新xml值

java - MySQL JDBC java 项目上出现 "AWT-EventQueue-0"java.lang.NullPointerException 错误

java - 在sql中查找上个月最后一天的数据

apache - 在同一个 Apache 上运行 htdocs 和 clusterd tomcat webapp

java - 在 tomcat 6 中部署的应用程序的短 url 或别名

android - 从 WebService 加载 ListView

java - 破译JSP中的对象数组