繁体   English   中英

RequestDispatcher不在Java Servlet中重定向到JSP

[英]RequestDispatcher not redirecting in java servlet to JSP

我正在尝试从我的servlet重定向到另一个页面,其中字符串值为null。 当我运行代码时,它停留在同一页面上,而不是重定向到我的错误页面。 这是我的代码:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
  response.setContentType("text/html");
  String emp = request.getParameter("emp")!=null ? request.getParameter("emp"): "";
  MCenter mCenter = new MCenter();
  mCenter = mCenterDAO.getMCenterPocByEmp(emp);
  mCenter = mCenterDAO.getMCenterByObject(mCenter);

  PrintWriter pw = response.getWriter();
  String mPocName = mCenter.getMCenterPocName();
  String mCenter = mCenter.getMCenterName();
     if(mPocName == null || mCenter == null) {
        request.getRequestDispacher("error.jsp").forward(request, response);
     System.out.println("Null or not name " + mPocName + "center " + mCenter);
     }
   String json = getMCenterPoc(emp);
   pw.print(json);
   pw.close();
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
   doPost(request, response); 
}

我没有任何错误,打印输出会根据是否有值向我提供null或值。

您必须在代码中进行以下更改。 Request Dispatcher不适用于Ajax post。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
 String emp = request.getParameter("emp") != null ? request.getParameter("emp") : "";
 MCenter mCenter = new MCenter();
 mCenter = mCenterDAO.getMCenterPocByEmp(emp);
 mCenter = mCenterDAO.getMCenterByObject(mCenter);
 String mPocName = mCenter.getMCenterPocName();
 String mCenter = mCenter.getMCenterName();
 if (mPocName == null || mCenter == null) {
  request.sendRedirect("error.jsp");
  System.out.println("Null or not name " + mPocName + "center " + mCenter);
 } else {
  response.setContentType("text/html");
  PrintWriter pw = response.getWriter();
  String json = getMCenterPoc(emp);
  pw.print(json);
  pw.close();
 }
}

或者,您可以使Ajax成功。 这样,您无需将代码更改为我的代码。 如果要使用Ajax。

var emp = $('#emp').val();
$.ajax({
    type: "POST",
    url: "yourServletName",
    data: 'emp='+emp+'',
    success: function(response) {
        if(response='error'){
              window.location.href='error.jsp';
        }else{
              //What you want
        }
    }
});

当然,您的servlet必须更改为以下内容。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
 response.setContentType("text/html");
 PrintWriter pw = response.getWriter();
 String emp = request.getParameter("emp") != null ? request.getParameter("emp") : "";
 MCenter mCenter = new MCenter();
 mCenter = mCenterDAO.getMCenterPocByEmp(emp);
 mCenter = mCenterDAO.getMCenterByObject(mCenter);
 String mPocName = mCenter.getMCenterPocName();
 String mCenter = mCenter.getMCenterName();
 if (mPocName == null || mCenter == null) {
  String json = "error";
 } else {
  String json = getMCenterPoc(emp);
 }
 pw.print(json);
 pw.close();
}

您在UI中什么都看不到,因为error.jsp文件中没有任何内容没有文本内容 )。

您需要在error.jsp页面中添加如下文本:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Error page</title>
</head>
<body>
   <p>Error has occurred!!!</p>
</body>

向前

当您的请求转发到jsp / servlet / html时,这并不意味着您的浏览器URL将被更改,只是您的请求将转发到另一个资源以生成将发送回给您的响应。 URL将保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM