java - servlet初学者

  显示原文与译文双语对照的内容

我现在正在学习一个 Java EE课程,我在一个带有servlet的模块。

包含在本课程中的简单示例 servlet 。

这可以能听起来很笨,但是我不能让它的中任何一个人通过自己或者在sdl服务器上工作。 我在项目的网页文件夹中尝试了 dropiing,而且我还用 WelcomeServlet.html 内容替换了 index.jsp 文件的内容。 我将使用她的例子是第一个,最简单的叫做 WelcomeServlet 。

servlet的功能是当用户按下"获取html文档"按钮时,程序应该从. java 文件中检索文档。 但是当我按下按钮时,我会

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

找不到

descriptionThe请求的资源不可用。

GlassFish服务器开源版 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
 } 
}

如果有人能得到这个代码运行,请帮助我做同样的事情。

时间:

我尝试了你的代码。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 

( 在 servlet url模式之前,我前缀"我的",这样你就不会混淆servlet和html链接) 。 通常,给servlet和 html/jsp文件命名是不正确的做法。

在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.

因为简单的路径指向错误的路径,所以你得到了 404. 所以它找不到要提交的servlet 。

你的servlet类在包 com.deitel.advjhtp1.servlets 中是" welcomeservlet.java"

因此在HTML中,路径应该是:


 <form action ="com.deitel.advjhtp1.servlets.WelcomeServlet" method ="get">

...