2016-09-23 29 views
0

私は単純なサーブレットアプリケーションを持っています。サーブレットクラスでは、doPost()doGet()は基本的にモデルクラスから同じデータを取得しますが、doGet()はデータを取得できません。doGet()はモデルからデータを取得できません

public class ClickerServlet extends HttpServlet { 

    ClickerModel clickerModel = new ClickerModel(); 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String servletPath = request.getServletPath(); 

     if (servletPath.equals("/submit")) { 
      doPost(request, response); 
     } else if (servletPath.equals("/getResults")) { 
      doGet(request, response); 
     } 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String answer = request.getParameter("answer"); 
     clickerModel.addAnswer(answer); 

     request.setAttribute("recentAnswer", clickerModel.getRecentAnswer()); 
     request.getRequestDispatcher("submit.jsp").forward(request, response); 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     System.out.println("ok" + clickerModel.getRecentAnswer()); 
     request.setAttribute("clickerModel", clickerModel); 
     request.getRequestDispatcher("results.jsp").forward(request, response); 
    } 
} 

マイClickerModelクラス:私はdoGet()を使用してモデルから任意のデータを得ることができない理由

public class ClickerModel { 

    private String recentAnswer; 
    private HashMap<String, Integer> answers; 

    public ClickerModel() { 
     recentAnswer = ""; 
     answers = new HashMap<>(); 
    } 

    public void addAnswer(String answer) { 
     recentAnswer = answer; 

     if (answers.containsKey(answer)) { 
      answers.put(answer, answers.get(answer) + 1); 
     } else { 
      answers.put(answer, 1); 
     } 
    } 

    public void clearAnswers() { 
     answers = new HashMap<>(); 
    } 

    public HashMap<String, Integer> getAnswers() { 
     return answers; 
    } 

    public String getRecentAnswer() { 
     return recentAnswer; 
    } 
} 

誰もが知っていますか?ありがとう!詳細については

doPost()は、フォームの送信から呼び出されます。

<form action="submit" method="post"> 
    <input type="radio" name="answer" value="A"> A<br> 
    <input type="radio" name="answer" value="B"> B<br> 
    <input type="radio" name="answer" value="C"> C<br> 
    <input type="radio" name="answer" value="D"> D<br> 
    <br><input type="submit" value="submit"> 
</form> 

doGet()私が直接貼り付けるときに呼び出され、ブラウザでURL(localhost:something/getResults)がヒットしました。

そして、私のweb.xmlファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 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_3_0.xsd"> 
    <welcome-file-list> 
     <welcome-file>home.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Results</servlet-name> 
     <servlet-class>Clicker.ClickerServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Results</servlet-name> 
     <url-pattern>/getResults</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>Submit</servlet-name> 
     <servlet-class>Clicker.ClickerServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Submit</servlet-name> 
     <url-pattern>/submit</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

は、サーブレットを送信しますか? – Jens

+0

@Jens質問を更新しました。ありがとうございます。 – NMSL

答えて

0

私あなたがいずれかを提出していないと同じ結果サーブレットでのdoGet()メソッドを、置くことを私の理解、。

@Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String answer = request.getParameter("answer"); 
     clickerModel.addAnswer(answer); 

     request.setAttribute("recentAnswer", clickerModel.getRecentAnswer()); 
     //request.getRequestDispatcher("submit.jsp").forward(request, response); 
    response.sendRedirect("getResults"); // <---After submit will go to this page. 
    } 

結果サーブレット:あなたはあなたのサーブレットを呼び出すにはどうすればよい

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("ok" + clickerModel.getRecentAnswer()); 
    request.setAttribute("clickerModel", clickerModel); 
    request.getRequestDispatcher("results.jsp").forward(request, response); 
} 
関連する問題