2011-06-01 75 views
1

我有2個servlet,「HomeController」和「SearchController」。在針對home.jsp我有了一個搜索框,並提交行動「搜索」Java servlet不派發到另一個servlet

<form action="Search" method="post" name="searchForm"> 

當所以SearchController做的第一件事是一個表格:

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    if (!validator.isValidAlphaOnly(request.getParameter("breed"))) { 
     request.setAttribute("error", "Breed search term invalid. Enter only letters"); 
     RequestDispatcher requestVar = request.getRequestDispatcher("/Home"); 
     requestVar.forward(request, response); 
    } else { 
     processRequest(request, response); 
    } 
} 

不同的是不去到/ home,即使我有映射如下:

<servlet> 
    <servlet-name>HomeController</servlet-name> 
    <servlet-class>Controllers.HomeController</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>SearchController</servlet-name> 
    <servlet-class>Controllers.SearchController</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>DogController</servlet-name> 
    <servlet-class>Controllers.DogController</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>LogoutController</servlet-name> 
    <servlet-class>Controllers.LogoutController</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>UpdateController</servlet-name> 
    <servlet-class>Controllers.UpdateController</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>AddController</servlet-name> 
    <servlet-class>Controllers.AddController</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SearchController</servlet-name> 
    <url-pattern>/Search</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>LogoutController</servlet-name> 
    <url-pattern>/Logout</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>UpdateController</servlet-name> 
    <url-pattern>/Update</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>AddController</servlet-name> 
    <url-pattern>/Add</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>DogController</servlet-name> 
    <url-pattern>/Dog/View/*</url-pattern> 
    <url-pattern>/Dog/Edit/*</url-pattern> 
    <url-pattern>/Dog/Add</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>HomeController</servlet-name> 
    <url-pattern>/Home</url-pattern> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
+0

你的if條件執行了嗎?它只有在搜索詞不是純字母表時纔會執行。 – asgs 2011-06-01 19:15:42

+0

是的條件執行 – Sara 2011-06-01 19:21:05

+0

爲什麼不遠程調試應用程序,因爲它在應用程序服務器上運行,並檢查post方法中發生了什麼(例如,是否真的在執行應該執行調度程序的代碼塊?認爲它應該這樣做...等)? – 2011-10-17 10:27:22

回答

2

您可以使用getNamedDispatcher:

ServletContext context = getServletContext(); 
RequestDispatcher requestVar = context.getNamedDispatcher("HomeController"); 
0

那麼,對於一個你的servlet映射配置並不完全看的權利:你有這樣的:

<servlet-mapping> 
    <servlet-name>SearchController</servlet-name> 
    <url-pattern>/Search</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
<servlet-mapping> 
    <servlet-name>HomeController</servlet-name> 

請注意2 servlet-mapping行嗎?

我希望你的web.xml文件中只有一個錯誤:你的代碼看起來很好。

+0

對不起,這是寫在一個錯誤。 :) - 更正! – Sara 2011-06-01 19:11:17

+0

但是,我不知道這是否在啓動時沒有提供XML解析錯誤。 @薩拉:它仍然看起來不正確。 – BalusC 2011-06-01 19:11:20

+0

嗯,好吧然後:你在使用什麼應用程序服務器? – Femi 2011-06-01 19:12:37

0
  1. 檢查它是否是進入的條件。
  2. 檢查在轉發之前是否收到響應。是的,那麼前鋒將會失敗。
  3. 最糟糕的情況是,它可能是您的應用服務器的問題。
  4. 嘗試使用ServletContext.getNamedDispatcher(「HomeController」);作爲備選。
0

我想我找到了你的問題,你的代碼實際上是好的,web.xml中是有問題的一個:

<servlet-mapping> 
    <servlet-name>HomeController</servlet-name> 
    <url-pattern>/Home</url-pattern> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

你必須有多個URL的模式在servlet映射。 試試這個

<servlet-mapping> 
    <servlet-name>HomeController</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>HomeController</servlet-name> 
    <url-pattern>/Home</url-pattern> 
</servlet-mapping> 

它可能會解決您的問題,Web容器有時也很挑剔的這些細節。

來源:http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd

的XSD指定爲servlet映射類型:

<xsd:sequence> 
    <xsd:element name="servlet-name" 
      type="j2ee:servlet-nameType"/> 
    <xsd:element name="url-pattern" 
      type="j2ee:url-patternType"/> 
</xsd:sequence> 

沒有多個URL圖案那裏。

相關問題