How redirect request from jsp to a servlet

我只是一个虾纸丫 提交于 2019-12-25 16:39:31

问题


Thank you for your help in advance. I am trying to get the answer from a jsp using a radio button object and after sending to a servlet which will manage the request and send to specific servlet to impact the database. I have problems in the servlet that manages the request. I am not able to resend the petition to the final servlet. The parts of the source code are the next:

PolicyManager.jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h1>Change the current policy</h1>
     <form action="ManageRequest" method="Post">
        Which action would you like to apply?<br><br>
        <input type="radio" name="policy" value="add">Add<br>
        <input type="radio" name="policy" value="delete">Delete
        <br><br>
        <input type="submit" value="submit"/>       
     </form>

</body>
</html>

ManageRequest.java:

import java.io.IOException;
import java.io.PrintWriter;    
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ManageRequest
 */
@WebServlet("/ManageRequest")
public class ManageRequest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManageRequest() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter printWriter = response.getWriter();
        printWriter.print("doGet method");
        String policy=request.getParameter("policy");

        if (policy.equals("add") ) {
            printWriter.println("<html><body>Redirecting to Add servlet section..."+"<br>");
            RequestDispatcher dispatcher = request.getRequestDispatcher("/AddPolicy");
            dispatcher.forward(request, response);

        } else if (policy.equals("delete")) {
            printWriter.println("<html><body>Redirectin to Delete servlet section..."+"<br>");
            RequestDispatcher dispatcher = request.getRequestDispatcher("/DeletePolicy");
            dispatcher.forward(request, response);

        }
        else{
            printWriter.println("<html><body>A different option..."+"<br>");
        }
        printWriter.println("</body></html>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter printWriter = response.getWriter();
        String policy=request.getParameter("policy");
        printWriter.print("doPost method");

        if (policy.equals("add") ) {
            printWriter.println("<html><body>Redirecting to Add servlet section..."+"<br>");
            RequestDispatcher dispatcher = request.getRequestDispatcher("/AddPolicy");
            dispatcher.forward(request, response);

        } else if (policy.equals("delete")) {
            printWriter.println("<html><body>Redirectin to Delete servlet section..."+"<br>");
            RequestDispatcher dispatcher = request.getRequestDispatcher("/DeletePolicy");
            dispatcher.forward(request, response);

        }
        else{
            printWriter.println("<html><body>A different option..."+"<br>");
        }
        printWriter.println("</body></html>");

    }

}

AddPolicy.java:

package PolicyManager;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddPolicy
 */
@WebServlet("/AddPolicy")
public class AddPolicy extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddPolicy() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter printWriter = response.getWriter();
        printWriter.println("<h1>Add Policy</h1>");
        printWriter.println("Add Policy");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

DeletePolicy.java:

package PolicyManager;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DeletePolicy
 */
@WebServlet("/DeletePolicy")
public class DeletePolicy extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeletePolicy() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter printWriter = response.getWriter();
        printWriter.println("<h1>Delete Policy</h1>");
        printWriter.println("Delete Policy");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

The web.xml:

<servlet>
    <servlet-name>ManageRequest</servlet-name>
    <servlet-class>PolicyManager</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ManageRequest</servlet-name>
    <url-pattern>/PolicyManager</url-pattern>
  </servlet-mapping>

The problem is that only I can get the manager servlet that has to redirect the petition to the final servlet.

Thank you for your help.

Cheers


回答1:


You should try to understand the difference between RequestDispatcher.include() and RequestDispatcher.forward().

RequestDispatcher.forward() means the complete control for request processing is forwarded to another servlet. The forwarding servlet should not do anything like writing response or committing response. If the response got committed in the calling servlet before the forward, then an IllegalStateException is thrown. IF the response is not yet committed, then the response will be cleared.

Whatever, it is not valid to write something to response when you are forwarding to another servlet.

If you have a requirement to do write something to response from various servlets, you should use RequestDispatcher.include().

In your case, you are writing below thing before forward() which may be the issue.

printWriter.println("<html><body>Redirecting to Add servlet section..."+"<br>



回答2:


You have to add: response.sendRedirect("http://localhost:8080/clientLibrary/DeletePolicy");

Instead of : RequestDispatcher dispatcher = request.getRequestDispatcher("/DeletePolicy"); dispatcher.forward(request, response);

The same for AddPolicy.

Cheers



来源:https://stackoverflow.com/questions/31190828/how-redirect-request-from-jsp-to-a-servlet

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!