2014-09-28 87 views
-1

我已經到了這個基本上與大腦鎖,用戶點擊後提交它去一個空白頁,它甚至沒有得到的servlet。我把一個System.out.println來測試它是否到達了servlet,但它沒有。 這裏是web.xml中Java Servlet空白頁後按鈕提交

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 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"> 
    <servlet> 
     <servlet-name>servlet03</servlet-name> 
     <servlet-class>servlets.Week01_03</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>servlet03</servlet-name> 
     <url-pattern>/week01_03servlet</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

這裏是servlet

package servlets; 

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

public class Week01_03 extends HttpServlet 
{ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
    { 
     System.out.println("Hello"); 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 
     String userString = request.getParameter("userString"); 
     out.close(); 

     char[] vowel = {'a', 'e', 'i', 'o', 'u'}; 
     int[] count = {0, 0, 0, 0, 0}; 

     for (int i = 0; i < userString.length(); i++) 
     { 
      switch (userString.charAt(i)) 
      { 
       case 'a': 
       case 'A': 
        count[0]++; 
        break; 
       case 'e': 
       case 'E': 
        count[1]++; 
        break; 
       case 'i': 
       case 'I': 
        count[2]++; 
        break; 
       case 'o': 
       case 'O': 
        count[3]++; 
        break; 
       case 'u': 
       case 'U': 
        count[4]++; 
        break; 
       default: 
        break; 
      } 
     } 

     try 
     { 
      out.println("<html>"); 
      out.println("<head>"); 
      out.println("<title>Servlet Week01_03</title>"); 
      out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"Week01_02.css\">"); 
      out.println("</head>"); 
      out.println("<body>"); 
      out.println("<h1>Servlet Week 01, Exercise 03</h1>"); 
      out.println("<p class=\"inline\">You typed: '<pre class=\"inline\">" + 
         userString + "</pre>'</p>"); 
      out.println("<h3>Vowel usage:</h3>"); 
      out.println("<table>"); 
      for (int i = 0; i < vowel.length; i++) 
      { 
       out.println("<tr" + (i%2==0 ? " class=\"shaded\"" : "") + ">" + 
          "<td>'" + vowel[i] + 
          "'</td><td>" + count[i] + 
          "</td></tr>"); 
      } 

      out.println("</table>"); 
      out.println("</body>"); 
      out.println("</html>"); 
     } 
     finally 
     { 
      out.close(); 
     } 
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
    /** 
    * Handles the HTTP <code>GET</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws javax.servlet.ServletException 
    * @throws java.io.IOException 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
    { 
     processRequest(request, response); 
    } 

    /** 
    * Handles the HTTP <code>POST</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws javax.servlet.ServletException 
    * @throws java.io.IOException 
    */ 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
    { 
     processRequest(request, response); 
    } 

    /** 
    * Returns a short description of the servlet. 
    */ 
    public String getServletInfo() 
    { 
     return "Short description"; 
    }// </editor-fold> 
} 

下面是HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Week 01, Exercise 03</title> 
     <link rel="stylesheet" type="text/css" href="Week01_03.css"> 
    </head> 
    <body> 
     <h1>Week 01, Exercise 03</h1> 
     <form action="week01_03servlet" method="post"> 
      <p>Type some text in the box: 
      <input type="text" name="userString"></p> 

      <p>and then click the button, 
       and I'll tell you the frequency of vowel usage: 
      <input type="submit" value="Submit"></p> 
     </form> 
    </body> 
</html> 

感謝任何答覆。

+3

'out.close();'是什麼意思? – A4L 2014-09-28 20:00:52

+0

你用什麼鏈接的HTML頁面的形式?您是否嘗試直接鏈接到您的servlet? – 2014-09-28 20:01:55

+0

嗯,我以爲我確實鏈接到了表單'action =「week01_03servlet」' – user3805878 2014-09-28 20:50:13

回答

1

此servlet無法工作的原因是方法開始時的out.close()指令。

System.out.println("Hello"); 
response.setContentType("text/html;charset=UTF-8"); 
PrintWriter out = response.getWriter(); 
String userString = request.getParameter("userString"); 
**out.close();** 

它過早關閉用於向客戶端發送響應的PrintWriter。所以客戶端只能得到一個HTTP header content-type: "text/html;charset=UTF-8"的響應,但是一個空的主體。

0

我與菲利普摹同意,這個問題很可能過早out.close()

你打印一個消息,在此之前,控制檯,但可能不會看到它。由於日誌配置的原因,輸出可能不是你想要的,並且System.out可能會被緩衝,直到稍後纔會被寫出。

通常你應該切換這種的System.out.println的使用通信System.err.println代替,並確保輸出不會掉的地方到任何一個日誌文件,或由容器完全丟棄