갈림길 이정표

[JSP] *연구* jsp 로 alert창 띄우고 이동시키기 본문

Programming Language/Servlet & JSP

[JSP] *연구* jsp 로 alert창 띄우고 이동시키기

이몽뇽 2020. 9. 5. 00:14

이전 글을 보다가 문득 의문점이 하나 생겼다.

[editsave.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="bean" class="kr.shop.board.BoardBean"/>
<jsp:setProperty property="*" name="bean"/>
<jsp:useBean id="boardMgr" class="kr.shop.board.BoardMgr"/>

<%
String spage = request.getParameter("page");

boolean b = boardMgr.checkPass(bean.getNum(), bean.getPass());
if(b){
	boardMgr.saveEdit(bean);
	response.sendRedirect("boardlist.jsp?page=" + spage);
}else{
%>
	<script>
	alert("비밀번호 불일치!");
	history.back();
	</script>	
<%
}
%>

b가 false 일 경우에는 alert창으로 "비밀 번호 불일치!"라는 메세지를 띄우지만,

b가 true 일 경우에는 어떠한 메세지도 없이 바로 DB에 저장 시키고 목록으로 돌아간다.

뭔가 사용자들에게 "저장되었습니다."라는 메세지를 주어 직관적으로 DB에 저장 되었다는 것을 확인시켜준 후에 목록으로 돌아가는 것이 나을 것 같다는 생각이 들어 false일 경우와 똑같은 방식으로 적용시켜 보았다.

<%
if(b){
	boardMgr.saveEdit(bean);
%>
	<script>
	alert("저장되셨습니다");
	</script>	
<%
	response.sendRedirect("boardlist.jsp?page=" + spage);
}
%>

하지만 alert 창이 뜨지 않고 바로 sendRedirect하여 목록 보기로 넘어갔다. 이게 무슨 일이지🤔

혹시나 해서 //response.sendRedirect( ); 부분을 주석 처리 했더니 alert 창이 떳다!

여기서 알 수 있는 사실!

JSP파일에서 우선 순위: jsp 태그 (<% %>) > HTML 태그 (<script></script>)

처리과정에 우선순위가 있었기 때문에 HTML 태그의 코드들이 수행 되기도 전에 response.sendRedirect( ); 되어 진 것.

 

그렇다면 해결 방법은?

 

해결 방법 1: HTML 태그 안에 jsp 태그 선언

해결 방법 2: jsp 태그 안에 HTML 태그 선언

해결 방법 1: HTML 태그 안에 jsp 태그 선언

<%
if(b){
	boardMgr.saveEdit(bean);
%>
	<script>
	alert("저장되셨습니다");
 	location.href= "boardlist.jsp?page=" + <%=spage %>;
	</script>	
<%
}
%>

 

해결 방법 2: jsp 태그 안에 HTML 태그 선언

<%
if(b){
	boardMgr.saveEdit(bean);
	out.println("<script>alert('저장되셨습니다');</script>");
	response.sendRedirect("boardlist.jsp?page=" + spage);
    또는 out.println("<script>location.href='boardlist.jsp?page=" + spage + "'</script>");
}
%>

※ 웹 프로그래밍 언어에서 다른 파일 호출(페이지 이동) 방법

<script>location.href=""</script>	→ HTML(<head> tag)
<body><a href=""/></body>		→ HTML(<body> tag - 클릭 시 이동)

<% response.sendRedirect();%>		→ JSP
<% out.println("<script>location.href=''</script>"); %>	→ JSP(HTML tag를 통해)

문제가 또 생겼다.

if(id == null){
	out.println("<script>alert('로그인 후 사용해주세요');</script>");	//???왜 안돼!!!
	//response.sendRedirect("../member/login2.jsp");	//로그인 안하고 왔으면 로그인 하고 오라고
	out.println("<script>location.href='../member/login2.jsp';</script>");
}
Comments