2016-09-23 3 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 класс:

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; 
    } 
} 

Любой знает, почему я не могу получить какие-либо данные из модели с помощью doGet()? Благодаря!

Для получения дополнительной информации:

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() в результатах сервлета, а не такой же, как один Submit.

Отправить Servlet:

@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. 
    } 

Результаты Servlet:

@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); 
} 
Смежные вопросы