Gee
Gee

Reputation: 165

RequestDispatcher not redirecting in java servlet to JSP

I'm trying to redirect to another page from my servlet where string value is null. When I run the code it stays on the same page instead of redirecting to my error page. Here is my code:

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); 
}

I get no error, and the print out give me null or value depending on whether or not there is value or not.

Upvotes: 0

Views: 1341

Answers (2)

Afsun Khammadli
Afsun Khammadli

Reputation: 2068

You must do following changes in your code. Request Dispatcher doesn't work with 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();
 }
}

Or you can do with Ajax success. In this way you don't need to change code to mine. If you want to do with 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
        }
    }
});

Of course your servlet must change to following.

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();
}

Upvotes: 1

Rohit Gaikwad
Rohit Gaikwad

Reputation: 3914

You are seeing nothing in UI because there is nothing(no text content) in your error.jsp file.

You need to add some text as below in error.jsp page:

<!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>

Forward

When your request is forwarded to a jsp/servlet/html it does not mean that your browser url will be changed, just your request will be forwarded to another resource to generate a response that will be sent back to you. The URL will remain same.

Upvotes: 0

Related Questions