jsp와 servlet을 처음 사용합니다. 내 시나리오는 다음과 같습니다.servlet에서 sendRedirect를 사용할 때 jsp 페이지에서 요청 속성을 사용할 수 없음
여기에 양식이있는 JSP 페이지가 있습니다. 두 개의 필드가 있습니다. jsp 페이지의 코드 스 니펫은 다음과 같습니다.
MyFirstJSP.jsp 파일
<body>
<h1> This is my first jsp and servlet project</h1>
<%
//System.out.println(request.getAttribute("fname"));
if(request.getAttribute("fname")!=null){
System.out.println(request.getAttribute("fname"));
}else{
System.out.println("No request ");
}
%>
<form action="MyFirstServlet" method="get">
First Name<input type="text" name="fname" value= ${fname}><br>
Last Name<input type="text" name="lname" value= ${lname}>
<input type="submit" value="Send">
</form>
</body>
나는 사용자가 입력 한 이름을 확인하는 MyFirstServlet가 호출이 양식을 제출
. 첫 번째 이름이 "abc"와 같으면 서블릿은 객체를 요청하도록 속성을 설정하고이를 호출 JSP 페이지 즉 위 페이지로 재전송합니다. 요청 개체로부터 값을 가져 와서 양식의 해당 필드에 채 웁니다. 동일한 효과를 내기 위해 Java 표현식 언어도 사용하고 있습니다.다음은 MyFirstServlet.java 서블릿 파일
/**
* Servlet implementation class MyFirstServlet
*/
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyFirstServlet() {
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 firstname=request.getParameter("fname");
if(firstname.equalsIgnoreCase("abc")){
System.out.println("Setting attributes");
request.setAttribute("fname",firstname);
request.setAttribute("lname",request.getParameter("lname"));
response.sendRedirect("MyFirstJSP.jsp");
}else{
System.out.Println("No problem");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter p=response.getWriter();
p.println("Success!");
doGet(request,response);
}
}
의 내 코드 snipet입니다하지만이 코드를 실행하면 서블릿은 JSP 페이지로 리디렉션하지만 각각의 값으로 양식 필드를 채 웁니다. 원인을 알아 내기 위해 원인을 알기 위해 if-else-block을 추가했으며 여기서는 요청 개체 속성을 사용할 수 없다는 것을 알게되었습니다.
이 경우 요청 발송자를 사용하면 값을 사용할 수 있으며 양식은 값으로 채워지지만 주소 표시 줄의 URL은 변경되지 않으며 항상 서블릿에 대한 URL을 표시합니다.
그래서 내 질문은 요청 객체 대해 sendRedirect를 사용하여 JSP 페이지에 사용할 수없는 이유는
** 1).
2) 사용자가 입력 한 값으로 채워져 JSP 페이지 내 폼을 표시하는 다른 방법 THRE되어있는 경우 호출 JSP와 서블릿 sendredirects 그래서이 사용자는 양식에 데이터를 다시 입력 할 필요가 없다. **
을이 문제로 친구를 안내하십시오. 감사합니다! 요청 속성이 소실 (위치 헤더 1 체크 아웃)는 클라이언트 측 조치입니다 리디렉션으로
BalusC의 답변 읽기 : http://stackoverflow.com/questions/2047122/requestdispatcher-interface-vs-sendredirect –