2010-01-05 43 views
2

我學習HTML和sevlets,我寫小aplication但我沒有得到任何輸出,當我點擊從from.html頁面提交按鈕: 下面是我的代碼從HTML與Servlet

<html> 
<body> 
<h1 align="center>Color Selection Page</h1> 
<form method="POST" action="/SelectColor.do" > 
Select Color Charecterstics<p> 
Color: 
<select name="color" size="1"> 
<option>light 
<option>amber 
<option>brown 
<option>dark 
</select> 

<br><br> 

<center> 
<input type="submit" value="Submit"> 
</center> 

</form> 
</body> 
</html> 

web.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?> 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <servlet> 
    <servlet-name>ColorServlet</servlet-name> 
    <servlet-class>com.example.web.ColorServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>ColorServlet</servlet-name> 
    <url-pattern>/SelectColor.do</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
    <welcome-file>form.html</welcome-file> 
    </welcome-file-list> 

</web-app> 

的servlet

package com.example.web; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class ColorServlet extends HttpServlet { 
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{ 
     res.setContentType("text/html"); 
     try { 
      PrintWriter out = res.getWriter(); 
      out.println("Beer Selection ADvice<br>"); 
      String c=req.getParameter("color"); 
      out.println("<br>Got beer color "+c); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

您使用的是什麼服務器或servlet容器?服務器日誌中是否顯示任何內容? – glenatron 2010-01-05 10:17:23

+0

所有的選項都沒有結束,它應該是 valli 2010-01-05 10:24:40

+0

當你提交你會得到一個錯誤頁面?空白頁面?服務器消失,不回來?... – Paolo 2010-01-05 10:31:19

回答

6

我測試你的代碼,問題就來了FR OM這一行:

<h1 align="center>Color Selection Page</h1> 

align屬性沒有關閉,則需要加上一個雙引號將其關閉。

<h1 align="center">Color Selection Page</h1> 

這不會讓你的HTML有效 - Eclipse中仍抱怨「標籤(中心)的位置信息無效」 - 但,至少,你就可以提交表單。實際上,即使您的代碼工作正常,我也會建議您編寫有效的HTML或XHTML(請注意,根據Web應用程序的上下文路徑,您可能不得不使用action="SelectColor.do"而不是action="/SelectColor.do",但這是另一回事)。編寫「糟糕的」HTML會導致您出現怪異的渲染問題和意外錯誤。你應該學會用正確的方式寫HTML。

+0

感謝您的答案 – ranjana 2010-01-05 11:09:35

+0

哇,什麼一個趕上。雖然這並不明顯,但是;)。 +1 – 2010-01-05 11:17:18

+0

當我開始鍵入我的答案時,你根本沒有提到錯誤的表單操作。 *用大鱒魚拍打。 – BalusC 2010-01-05 11:36:47

4

相對錶單操作URL很可能是錯誤的。刪除前導斜線/,使之成爲:

<form method="POST" action="SelectColor.do"> 

否則,它會成爲相對於域根。初學者經常使用上下文名稱創建web項目,例如http://localhost:8080/contextname/page.jsp。該servlet將在http://localhost:8080/contextname/servleturlpattern之前提供。因此,從JSP的角度來看,表單操作應該是action="servleturlpattern"。但是,如果添加領先的/,那麼它實際上指向http://localhost:8080/servleturlpattern,根本不存在。

也就是說,我強烈建議您首先閱讀體面的HTML書籍/教程。您的HTML雜亂無章的語法錯誤,您還使用<center>元素棄用自1998年以來。有一個基本的HTML tutorial/reference at w3schools.com。有一個HTML validator at w3.org。還有關於寫作semantic HTML的許多文章。

關於JSP/Servlets,我知道你在學習,但實際上你不應該使用Servlets來輸出HTML。 JSP是爲了這個。您需要將請求轉發到某個結果JSP頁面,並在EL的幫助下訪問數據。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Do some business logic here? Then forward to some result JSP page. 
    request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response); 
} 

的JSP應該是這樣的:

<!doctype html> 
<html lang="en"> 
    <head><title>Result</title></head> 
    <body> 
     Beer Selection ADvice<br> 
     <br>Got beer color ${param.color} 
    </body> 
</html> 

${param.color}Expression Language和這一行做其實有點out.print(request.getParameter("color"))幕後。

如果你沒有做任何後期處理邏輯在所有的servlet(在DB存儲,做一些業務邏輯/驗證,等等),那麼你其實也並不需要一個servlet在所有的;)

要了解更多關於JSP/Servlets的信息,我可以推薦你Marty Hall's Coreservlets tutorials