簡體   English   中英

管理來自同一servlet的兩個JSP輸出

[英]Managing two JSP outputs from the same servlet

在我的項目中,我有以下文件:

  • pole.jsp包含一個表單和一個提交
  • results.jsp,其中顯示結果(僅包含標題)
  • 一個PollServlet,在其中我同時在pole.jsp和results.jsp中設置標題

這是文件:poll.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Poll Page</title>
    </head>
    <body>
        <form action="/poll?action=pole" method="POST">
            <div>
                <a><h2><% out.print(request.getAttribute("oldTitle").toString());%>
                </h2></a><br>
            </div>  
           <br><br>
           <input type="submit" name = "submit"value="submit">
        </form>  
    </body

results.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Results</title>
    </head>
    <body >
        <form action="/poll?action=results" method="POST">
            <a><%  out.print(request.getAttribute("title"));%></a>
        </form>
    </body>
</html>

PollServlet.java

@WebServlet(name = "PollServlet", urlPatterns = {"/poll"})
public class PollServlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {

        }
    }

    @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String action = request.getParameter("action");
    if (action.equals("pole")) {
        request.setAttribute("oldTitle","new tile for poll.jsp ");
        getServletConfig().getServletContext().getRequestDispatcher(
            "/poll.jsp").forward(request, response);
    } else if (action.equals("results")) {

    /* set the title for results.jsp */
        request.setAttribute("title","title for results.jsp");
        getServletConfig().getServletContext().getRequestDispatcher(
            "/results.jsp").forward(request, response);  

        }
}
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, 
}

該問題似乎出現在servlet的doGet()方法中。 我只能設置第一項(poll.jsp)標題的值,而不能設置第二項(results.jsp)的值,這是我做錯了什么,如何正確實現? 謝謝!

您不能多次轉發相同的請求,因為一旦轉發了請求,便已提供響應。 看到這個問題。

但是,在forward()之后編寫的代碼仍將執行,但這是出於其他目的(例如記錄...),但是您無法再次轉發該請求。


編輯

您可以向網址/poll?action=pole/poll?action=results發送一個參數,這將幫助您確定此頁面是poll.jsp還是results.jsp ,類似這樣

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        String action = request.getParameter("action");

        if(action.equals("pole")) {

            /* set the title for pole.jsp */

            request.setAttribute("oldTitle","new tile for poll.jsp ");
            getServletConfig().getServletContext().getRequestDispatcher(
                    "/poll.jsp").forward(request, response);

        } else if(action.equals("results")){

            /* set the title for results.jsp */
            request.setAttribute("title","title for results.jsp");
            getServletConfig().getServletContext().getRequestDispatcher(
                "/results.jsp").forward(request, response);  

        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM