实际上,我尝试创建我的第一个 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/