1

我目前正在学习 Java EE 课程,并且正在学习 servlet 模块。

课程中包括简单的示例 servlet。

这可能听起来很愚蠢,但我无法让它们中的任何一个单独工作或在 glassfish 服务器上的 netbeans 中工作。我已经尝试将它们放在项目的网页文件夹中,并且我将 index.jsp 文件的内容替换为 WelcomeServlet.html 内容。我将使用她的例子是第一个也是最简单的,叫做 WelcomeServlet。

servlet 的功能是当用户按下“获取 html 文档”按钮时,程序应该从 .java 文件中检索文档。但是,当我按下按钮时,出现此错误

HTTP 状态 404 - 未找到类型状态报告

未找到信息

描述请求的资源不可用。

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
   }   
}

如果那里的任何人都可以运行此代码,请帮助我做同样的事情。

4

3 回答 3

1

在您的 Web 应用程序项目中,您应该有一个名为的文件夹WEB-INF,其中应该有一个名为web.xml. 如果不这样做,请创建它并将其放在那里。这称为 Deploymenet 描述符。你可以在这里阅读。

它至少应包含以下内容

<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,您也可以使用 annotations执行上述操作。

于 2013-09-01T04:02:50.333 回答
0

我试过你的代码。java代码确实没有错。可能只是不正确的行动路径。

完整项目:

项目名称:TestServlet

WelcomeServlet.html:

 <form action = "MyWelcomeServlet" method = "get">

网页.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    

(我在 servlet url-pattern 之前添加了“My”前缀,这样您就不会混淆 servlet 和 html 链接)。通常给 servlet 和 html/jsp 文件赋予相同的名称是不好的做法。

于 2013-09-02T03:33:45.667 回答
-1

你得到一个 404 not found 因为表单指向了一个不正确的路径。所以它找不到要提交的servlet。

您的 servlet 类是 com.deitel.advjhtp1.servlets 包中的“WelcomeServlet.java”

所以在 HTML 中,路径应该是:

< form action = "com.deitel.advjhtp1.servlets.WelcomeServlet" method = "get">
于 2013-09-01T03:52:15.043 回答