Servlets初学者

时间:2013-09-01 03:34:04

标签: java servlets netbeans

我目前正在学习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
   }   
}

如果有人可以运行此代码,请帮助我这样做。

3 个答案:

答案 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">