我目前正在学习Java EE课程,而且我正在使用servlet的模块。
课程中包含简单的样本servlet。
这可能听起来很愚蠢但我不能让他们自己或者在glassfish服务器上的netbeans中工作。 我尝试在项目的网页文件夹中删除它们,并且还用WelcomeServlet.html内容替换了index.jsp文件的内容。 我将使用她的示例是第一个,也是最简单的称为WelcomeServlet。
servlet的功能是当用户按下“获取html文档”按钮时,程序应该从.java文件中检索文档。 但是,当我按下按钮时,我收到此错误
HTTP状态404 - 未找到 类型状态报告
消息未找到
description请求的资源不可用。
GlassFish Server开源版4.0
以下是相关代码。 WelcomeServlet.html 的
<?xml version = "1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Fig. 17.6: WelcomeServlet.html -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Handling an HTTP Get Request</title>
</head>
<body>
<form action = "/advjhtp1/welcome1" method = "get">
<p><label>Click the button to invoke the servlet
<input type = "submit" value = "Get HTML Document" />
</label></p>
</form>
</body>
</html>
WelcomeServlet.java
// Fig. 16.5: WelcomeServlet.java
// A simple servlet to process get requests.
package com.deitel.advjhtp1.servlets;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class WelcomeServlet extends HttpServlet {
// process "get" requests from clients
protected void doGet( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType( "text/html" );
PrintWriter out = response.getWriter();
// send XHTML page to client
// start XHTML document
out.println( "<?xml version = \"1.0\"?>" );
out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +
"XHTML 1.0 Strict//EN\" \"http://www.w3.org" +
"/TR/xhtml1/DTD/xhtml1-strict.dtd\">" );
out.println(
"<html xmlns = \"http://www.w3.org/1999/xhtml\">" );
// head section of document
out.println( "<head>" );
out.println( "<title>A Simple Servlet Example</title>" );
out.println( "</head>" );
// body section of document
out.println( "<body>" );
out.println( "<h1>Welcome to Servlets!</h1>" );
out.println( "</body>" );
// end XHTML document
out.println( "</html>" );
out.close(); // close stream to complete the page
}
}
如果有人可以运行此代码,请帮助我这样做。
答案 0 :(得分:1)
在您的Web应用程序项目中,您应该有一个名为WEB-INF
的文件夹,其中应该有一个名为web.xml
的文件。如果不这样做,请创建它并将其放在那里。这称为Deploymenet描述符。你可以阅读它here。
至少应包含以下内容
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> // or another version
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>com.deitel.advjhtp1.servlets.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
然后您应该导航到
localhost:XXXX/welcome
其中XXXX是Glassfish端口,用于查看您的页面。
如果您的容器支持servlet 3.0,您也可以执行上述with annotations。
答案 1 :(得分:0)
我尝试了你的代码。确实在java代码中没有错。可能只是错误的行动路径。
完整项目:
项目名称:TestServlet
WelcomeServlet.html:
<form action = "MyWelcomeServlet" method = "get">
的web.xml:
<servlet>
<description>Welcome Servlet</description>
<display-name>Welcome Servlet</display-name>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>com.deitel.advjhtp1.servlets.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/MyWelcomeServlet</url-pattern>
</servlet-mapping>
运行它:
http://localhost:8080/TestServlet/WelcomeServlet.html
单击按钮,它将运行servlet(您可以尝试运行指向servlet的直接链接),这是:
http://localhost:8080/TestServlet/MyWelcomeServlet
(我在前缀&#34;我的&#34;在servlet url-pattern之前,这样你就不会在servlet和html链接之间混淆)。通常,为servlet和html / jsp文件指定相同的名称是不好的做法。
答案 2 :(得分:-1)
您找不到404,因为只是表单指向错误的路径。所以它找不到要提交的servlet。
您的servlet类是com.deitel.advjhtp1.servlets包中的“WelcomeServlet.java”
所以在HTML中,路径应该是:
< form action = "com.deitel.advjhtp1.servlets.WelcomeServlet" method = "get">