簡単な投稿 - リダイレクト - JSP を使用して取得したい。これが私がやった方法です。重要なサーブレットは次のとおりです。
public class PostRedirectGet extends HttpServlet {
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
getServletContext().getRequestDispatcher("/WEB-INF/getInformation.jsp")
.forward(httpServletRequest,httpServletResponse);
}
public void doPost(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)
throws IOException {
String firstName = httpServletRequest.getParameter("firstName");
HttpSession httpSession = httpServletRequest.getSession();
httpSession.setAttribute("firstName",firstName);
httpServletResponse.sendRedirect(getServletContext().getContextPath()+"/getFormData");
}
}
したがって、このサーブレット ( /index ) に対してget 要求が行われると、フォームが存在するgetInformation.jspのみが表示されます。
フォームは同じ URL ( /index ) に対して投稿要求を行い、今回は doPost が呼び出されます。ここでは、次のように firstName を保持します。
String firstName = httpServletRequest.getParameter("firstName");
次に、ユーザーを /getFormData にリダイレクトします。担当のサーブレットは次のとおりです。
public class Get extends HttpServlet {
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
String firstName = (String) httpServletRequest.getSession().getAttribute("firstName");
httpServletRequest.setAttribute("firstName",firstName);
getServletContext().getRequestDispatcher("/WEB-INF/showInformation.jsp")
.forward(httpServletRequest, httpServletResponse);
}
}
だからここで変数を取得します
String firstName = (String) httpServletRequest.getSession().getAttribute("firstName");
私の最初の質問は次のとおりです。1) この方法では、すべてのセッションで firstName を使用できますが、これは望ましくありません。では、2 つのサーブレット間で情報を渡すにはどうすればよいでしょうか。または、この値をどのようにクリアする必要がありますか?
次に、リクエストを次のような showInformation.jsp に転送します。
Hello, your first name is: <%= request.getAttribute("firstName") %>
2 番目の質問は次のとおりです。2) 「;」がないのはなぜですか。ここでrequest.getAttribute("firstName)の後? このように正常に動作しますが、セミコロン (";") が必要になると思います。
セミコロンを置くと、jsp ファイルで次の例外が発生します。
Syntax error on token ";", delete this token