实际上我尝试创建我的第一个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的解决方案,但我认为问题不存在。
答案 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