다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher 객체를구한다음 forward() 메서드를호출한다. - forward() 메서드를호출할때 request 객체와 response 객체를넘겨준다. - 이메서드를사용해서데이터를다른 JSP로전송할수있는데, request 객체에속성을정의한후 forward() 메서드를호출한다. 예 ) HEIGHT라는변수에 178을저장한후 HEIGHT 변수를다른 JSP로넘겨주는경우 request.setattribute("height", new Integer(178)); RequestDispatch dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위에서전달한데이터를전달받아서사용하려면, Integer height = (Integer)request.getAttribute("HEIGHT"); - height 변수에는 178이라는정수가저장된다. sendredirect() 메서드와 forward() 메서드의차이점 웹페이지 요청 웹서버 sendredirect() 다른웹페이지 - 위는 sendredirect() 메서드의기능으로웹페이지의 URL 주소가다른웹페이지주소로변경된다. - 1 -
웹페이지 요청 웹서버 forward() 그림다른웹페이지 10 - 위는 forward() 메서드의기능으로웹페이지의 URL은바뀌지않는다. - 따라서, 다음과같은차이가있다. 1 sendredirect() 메서드는간접적으로호출, forward() 메서드는직접적으로호출 2 sendredirect() 메서드는다른웹서버의자원을호출할수있지만, forward() 메서드는동일한웹서버의자원만호출할수있다. 3 sendredirect() 메서드는문자열데이터만전달할수있지만, forward() 메서드는객체형태의모든데이터를전달할수있다. forward() 메서드를이용한예제 - 두수를입력하고버튼을누르면, 두수에대한사칙연산을수행하는 JSP 페이지. - 버튼을누른후브라우저의 URL 주소를유심히관찰한다. 즉, forward() 메서드를사용하므로호출되는페이지의이름이 URL 창에출력되지않는다. - 사칙연산데이터입력 html : FourRulesInput.html <HTML> <HEAD> <META http-equiv="content-type" content="text/html;charset=euc-kr"> <TITLE> 사칙연산 </TITLE> </HEAD> <BODY> <FORM ACTION=FourRules.jsp> 첫번째수 : <INPUT TYPE=TEXT NAME=NUM1><BR> 두번째수 : <INPUT TYPE=TEXT NAME=NUM2><BR> <INPUT TYPE=SUBMIT VALUE=' 입력 '> </FORM> </BODY> </HTML> - 2 -
- 위의 html이호출한 JSP : FourRules.jsp String str1 = request.getparameter("num1"); String str2 = request.getparameter("num2"); int num1 = Integer.parseInt(str1); int num2 = Integer.parseInt(str2); request.setattribute("sum", new Integer(num1 + num2)); request.setattribute("difference", new Integer(num1 - num2)); request.setattribute("product", new Integer(num1 * num2)); request.setattribute("quotient", new Integer(num1 / num2)); RequestDispatcher dispatcher = request.getrequestdispatcher("fourrulesresult.jsp"); dispatcher.forward(request, response); - 위의 JSP에서 forward() 메서드로호출한 FourRulesResult.jsp @page contenttype="text/html; charset=euc-kr" <HTML> <HEAD><TITLE> 사칙연산 </TITLE></HEAD> <BODY> 덧셈의결과는? = request.getattribute("sum") <BR> 뺄셈의결과는? = request.getattribute("difference") <BR> 곱셈의결과는? = request.getattribute("product") <BR> 나눗셈의결과는? = request.getattribute("quotient") <BR> </BODY> </HTML> 도전과제 : 브라우저를통해서상품의수량, 크기, 색상을입력받은후입력된데이터를출력하는 JSP 를작성하세 요. forward() 메서드를이용해서데이터를전달하도록한다. - 3 -
에러처리 에러전용의페이지작성 - 에러가발생하면전체화면이에러에관련된정보들로채워진다. 이러한화면을사용자가접하게되면거부감을느끼게되므로, 여러가지예외나에러가발생하더라도에러화면대신에친절한안내페이지를출력하도록하는것이시스템에대한고객의신뢰도를향상시킨다. - 에러가발생하는경우사용자가작성한에러페이지를출력하도록별도의에러처리페이지를작성한다. - 에러처리페이지의예 (viewerrormessage.jsp) @ page contenttype = "text/html; charset = euc-kr" @ page iserrorpage = "true" 현재페이지가에러처리페이지임을지정한다. <html> <head><title> 오류발생 </title></head> <body> 요청을처리하는과정에서문제가발생했습니다.<br> 빠른시간내에문제를해결하도록하겠습니다. <p> 에러타입 : = exception.getclass().getname() <br> 에러메세지 : <b>= exception.getmessage() </b> </body> </html> - 위의예에서와같이 page 지시사를사용해서 iserrorpage 속성의값을 true로지정하면, 해당 JSP 페이지가에러처리페이지가되며, exception 객체를사용할수있게된다. 일반적인 JSP 페이지에서 errorpage 속성을위의 "viewerrormessage.jsp" 로설정하면해당페이지에서오류가발생하는경우위의페이지가호출이된다. - 다음은위에서작성한에러처리페이지를사용해서작성한 JSP이다. @ page contenttype = "text/html; charset = euc-kr" @ page errorpage = "viewerrormessage.jsp" 오류가발생하면 viewerrormessage.jsp를호출하도록함 <html> <head><title> 에러처리연습 </title></head> <body>... </body> </html> 에러코드별에러페이지지정하기 - 에러발생코드별로서로다른페이지를호출하도록설정할수있다. - 어플리케이션의환경설정파일은 web.xml 파일에서설정한다. - web.xml 파일의 부분에서에러코드별로에러처리페이지를설정한다. <error-code>404</error-code> <location>/error/error404.jsp</location> - 4 -
<error-code>500</error-code> <location>/error/error500.jsp</location> 예외종류별에러페이지지정하기 - 예외종류별로서로다른페이지를호출하도록설정할수있다. - 어플리케이션의환경설정파일은 web.xml 파일에서설정한다. - web.xml 파일의 부분에서에러코드별로에러처리페이지를설정한다. <exception-type>java.lang.nullpointerexception</error-code> <location>/error/errornullpointer.jsp</location> - 5 -