2014-09-28 4 views
-1

Я пришел в мозговой замок с этим в основном, после того, как пользователь нажимает кнопку «Отправить», он переходит на пустую страницу, даже не доходит до сервлета. Я положил System.out.println, чтобы проверить, достигает ли он сервлета, но это не так. Вот web.xmlJava Servlet Blank Страница после кнопки Отправить

<?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> 

Вот сервлет

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

+0

Какую ссылку вы использовали на странице html с формой? Вы попробовали прямую ссылку на ваш сервлет? –

+0

Ну, я думал, что сделал ссылку на сервлет с формой «action =» week01_03servlet « – user3805878

ответ

1

Причина, по которой этот сервлет не работает, объясняется инструкцией out.close(), которая находится в начале метода processRequest().

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

Я согласен с Филиппом G, проблема, вероятно, преждевременно out.close()

Вы напечатали сообщение на консоль до этого, но не может когда-либо видеть. Вывод может не быть gong, где вы ожидаете из-за конфигурации регистрации, а также System.out может быть буферизирован и не выписываться до некоторого времени позже.

Вы вообще должны переключить этот вид System.out.println использовать System.err.println вместо этого, и убедитесь, что выход не собирается куда-то либо лог-файл, или отбрасывается полностью контейнер

Смежные вопросы