2016-12-04 4 views
-1

서블릿 JSP 코드로 작업하고있었습니다. jsp에서 하나의 레코드를 데이터베이스에 추가했습니다. 삽입 된 레코드를 보여주기 위해 나는 requestdispacther를 사용했다. 그러나 레코드는 계속 추가됩니다 (무한 루프처럼). 그런 다음 코드를 sendredirect로 바꾸고 올바르게 작동합니다.왜 우리는 dopost에 요청 디스패처를 사용하지 않아야합니까?

response.sendRedirect("AddNewProductOnRent?action=currentOnRentlist"); 

내가 사용했다 : 이 코드의 insted

RequestDispatcher rs = request.getrequestDispatcher("AddNewProductOnRent?action=currentOnRentlist"); 
forward(request,response) 

......하지만 내 오류가 해결

오류

있어하지만 난 이유

을 알고 싶어요

내 서블릿 코드 :

package com.twd.rent.servlet; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

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

import com.twd.rent.bean.RentBean; 
import com.twd.rent.controller.Controller; 



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

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public AddNewProductOnRent() { 
    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 

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

    if(action.equalsIgnoreCase("addnewproductonrent")){ 

     RequestDispatcher rs = request.getRequestDispatcher("addnewproductonrent.jsp"); 
     rs.forward(request, response); 

    }else if (action.equalsIgnoreCase("currentOnRentlist")) { 
     System.out.println("in current on rent list"); 
     List<RentBean>list=new ArrayList<RentBean>(); 
     list = new Controller().getListOfCurrentOnRent(); 

     System.out.println(list); 
     request.setAttribute("plist",list); 
     String forword = "rentlist.jsp";  

     RequestDispatcher rs = request.getRequestDispatcher(forword); 
     rs.forward(request, response); 
     } 
} 

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



    String trid = request.getParameter("trid"); 
    String customertname = request.getParameter("customertname"); 
    String contact = request.getParameter("contact"); 
    String date = request.getParameter("date"); 
    String address = request.getParameter("address"); 

    RentBean rb = new RentBean(); 
    rb.setCustomer_name(new String(customertname.getBytes("ISO-8859-1"),"UTF-8")); 
    rb.setContact(contact); 
    rb.setDateofissue(date); 
    rb.setAddress(new String(address.getBytes("ISO-8859-1"),"UTF-8")); 
    System.out.println(rb.getCustomer_name()); 

    if(trid.isEmpty()){ 
     System.out.println("In add"); 

     Controller c = new Controller(); 
     c.addproductonrent(rb); 
     response.sendRedirect("AddNewProductOnRent?action=currentOnRentlist"); 
    } 
    else{ 
     System.out.println("in update"); 
    } 
} 

}

답변

0

동일한 서블릿으로 전달 중이고 요청에 여전히 동일한 메소드 (POST)가 있으므로 동일한 doPost() 메소드를 다시 실행합니다.

대신보기로 전달할 수 있지만, 그렇다하더라도, 리디렉션이 더 나은 선택 :

  • 브라우저 오히려 POST하는 데 사용되는 URL보다 상세 URL을 표시하고 있습니다 따라서 북마크, 새로 고침, 또는

https://en.wikipedia.org/wiki/Post/Redirect/Get

+0

덕분에 삭제 표시 다시 게시하지 않고 URL

  • 사용자가 새로 고칠 수 있습니다를 보내 :) –