【问题标题】:How redirect request from jsp to a servlet如何将请求从 jsp 重定向到 servlet
【发布时间】:2015-07-02 17:18:12
【问题描述】:

提前感谢您的帮助。我正在尝试使用单选按钮对象从 jsp 中获取答案,并在发送到将管理请求并发送到特定 servlet 以影响数据库的 servlet 之后。我在管理请求的 servlet 中有问题。我无法将请愿书重新发送到最终的 servlet。部分源码如下:

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
    }

}

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>

问题是只有我才能获得必须将请求重定向到最终 servlet 的管理器 servlet。

感谢您的帮助。

干杯

【问题讨论】:

标签: java jsp servlets


【解决方案1】:

你应该试着理解RequestDispatcher.include()RequestDispatcher.forward().之间的区别

RequestDispatcher.forward() 表示请求处理的完整控制权被转发给另一个 servlet。转发 servlet 不应该做任何事情,比如写响应或提交响应。如果响应在转发之前在调用 servlet 中提交,则抛出 IllegalStateException。如果响应尚未提交,则响应将被清除。

无论如何,当您转发到另一个 servlet 时,写一些东西来响应是无效的。

如果你需要写一些东西来响应各种 servlet,你应该使用RequestDispatcher.include().

在你的情况下,你在 forward() 之前写下面的东西,这可能是问题。

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

【讨论】:

    【解决方案2】:

    您必须添加: response.sendRedirect("http://localhost:8080/clientLibrary/DeletePolicy");

    而不是: RequestDispatcher 调度程序 = request.getRequestDispatcher("/DeletePolicy"); dispatcher.forward(request, response);

    AddPolicy 也是如此。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多