2012-10-02 131 views
1

我剛開始使用servlet,我是新手。 我已經開發了一個帶有下拉菜單的HTML頁面,用戶可以從中選擇啤酒的顏色,並有一個提交按鈕來調用servlet.Here是它的html代碼。未在瀏覽器中加載Servlet

<html> 
<head> 
<title>Beer Selection</title> 
</head> 
<body> 
<h2>Beer Selection Page</h2> 
<p>Select beer charecteristics:</p> 
<hr> 
<form method="POST" action="SelectBeer.do"> 
    <b>Color :</b><!--Keeping it outside the form unnecessarily creates a line break between color and Drop-down menu--> 
    <select name="color"> 
     <option>Light</option> 
     <option>Brown</option> 
     <option>Amber</option> 
     <option>Dark</option> 
    </select><br> 
    <input type="SUBMIT" value="SUBMIT"> 
</form> 
</body> 
</html> 

我創建了以下部署描述符

<?xml version="1.0" encoding="UTF-8"?> 
<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/web-app_2_5.xsd" 
version="2.5"> 
<servlet> 
<servlet-name>MyBeer</servlet-name> 
<servlet-class>com.example.web.BeerSelect</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>MyBeer</servlet-name> 
<url-pattern>/SelectBeer.do</url-pattern> 
</servlet-mapping> 
</web-app> 

我還成功地編譯BeerSelect.java servlet,它的代碼如下

package com.example.web; 

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

public class BeerSelect extends HttpServlet 
{ 
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out=response.getWriter(); 
    out.println("Beer Selection Advice<br>"); 
    String c=request.getParameter("color"); 
    out.println("<br>Got Beer color"+c); 
} 
} 

我使用Tomcat 7.0.21給出我創建瞭如下目錄: tomcat/webapps/learning/Beer-v1/form.html和
tomcat/weba pps/learning/Beer-v1/WEB-INF/web.xml和
tomcat/webapps/learning/Beer-v1/WEB-INF/classes/com/example/web/BeerSelect.class
(學習只是一個文件夾中我保留所有我的小servlet和jsp項目在webapps 內部學習我有我的不同的項目,如Beer-v1,DateDisplay,HotelMgmt等)

現在,當我運行form.html裏面的tomcat它是正確顯示,但當我點擊提交它顯示

HTTP Status 404 - /learning/Beer-v1/SelectBeer.do 

type Status report 

message /learning/Beer-v1/SelectBeer.do 

description The requested resource (/learning/Beer-v1/SelectBeer.do) is not available. 
Apache Tomcat/7.0.21 

我做錯了什麼。請幫助。

+0

我似乎無法看到任何錯誤。你有沒有嘗試重新啓動你的服務器?編輯配置文件並創建新類時,您需要重新啓動服務器。 –

+0

我已經重啓了將近6-7次,但仍然收到相同的錯誤信息 –

回答

1

如果您將Beer-v1作爲Tomcat的webapp文件夾的直接子文件夾,它應該可以正常工作。
然後嘗試訪問[tomcaturl]/Beer-v1/[yourhtmlform] .html。

由於您將servlet映射到上下文根(即/),因此沒有映射/learning/Beer-v1/SelectBeer.do

恕我直言,你的工作空間文件夾結構裏面的 Tomcat的webapp文件夾不是一個好主意。這是部署webapps的特殊文件夾,Tomcat正在期待這種文件夾的一種標準結構(例如,根目錄中的WEB-INF)。

我認爲最好是使用Eclipse或將應用程序(從文件系統)部署到Tomcat的東西。這樣,您可以讓您的工作區得到管理,但不受限制。

Eclipse維護一個所謂的「工作空間」,它存儲您使用它創建的所有項目。第一次啓動Eclipse時,它會問你使用哪個文件夾作爲工作區。當你使用它時,你可以命名你的'學習'文件夾。

向Eclipse添加服務器執行環境(例如Tomcat安裝)時,您可以配置Eclipse部署的方式。默認配置是將webapp複製到Eclipse特定的工作區子文件夾。

+0

eclipse如何工作? 我們創建了一個工作空間來保存我們的文件。它是否永久地部署了應用程序(因此在工作區創建2個副本,在tomcat/webapps創建2個副本),還是暫時部署它們(因此保留一個副本)? OR是否能夠維護文件夾層次結構,因爲我試圖做? 只需要一個小的概述。 –

+0

請參閱我的更新。 – Zeemee

1

嘗試在您添加斜線形成動作

action="SelectBeer.do" 

action="/SelectBeer.do" 
+0

嘿羅素古鐵雷斯,你建議的方法沒有工作,但令人驚訝的是,現在我沒有收到任何錯誤消息,但相反,我得到一個空白頁。 Mulmoth提出了一種可行的方法,但如果可能的話仍想讓「學習」文件夾保持運行狀態。我可以在部署描述符web.xml中做什麼更改 –

+0

@Naveen,請查看我的答案的更新。 – Zeemee

相關問題