2장 변수와 프로시저 작성하기

Similar documents
혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

14-Servlet

뇌를 자극하는 JSP & Servlet 슬라이드

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet

JavaGeneralProgramming.PDF

뇌를 자극하는 JSP & Servlet 슬라이드

KYO_SCCD.PDF

J2EE Concepts

Data Provisioning Services for mobile clients

뇌를 자극하는 JSP & Servlet 슬라이드

본 강의에 들어가기 전

gnu-lee-oop-kor-lec06-3-chap7

웹 개발자를 위한 서블릿/JSP

Microsoft PowerPoint - aj-lecture7.ppt [호환 모드]

뇌를 자극하는 JSP & Servlet 슬라이드

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

JAVA PROGRAMMING 실습 08.다형성

04장

제11장 프로세스와 쓰레드

Microsoft PowerPoint - 4강.pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

IBM blue-and-white template

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E >

쉽게 풀어쓴 C 프로그래밍

JavaServletProgramming.PDF

Microsoft PowerPoint - 04-UDP Programming.ppt

Spring Boot

Cluster management software

<4D F736F F D20C0DAB9D9C0A5BDBAC5B8C6AE2E646F63>

PowerPoint Presentation

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Microsoft PowerPoint - 7강.pptx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밊

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Microsoft PowerPoint - CSharp-10-예외처리

C++ Programming

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Network Programming

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

2장 변수와 프로시저 작성하기

BEA_WebLogic.hwp

Interstage

chapter3.doc

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 03-TCP Programming.ppt

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

중간고사

PowerPoint Presentation

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

PowerPoint Presentation

슬라이드 1

Data Provisioning Services for mobile clients

[Brochure] KOR_TunA

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

01....b

00목차

(291)본문7

2007백서-001-특집

뇌를 자극하는 JSP & Servlet 슬라이드

TCP/IP Model

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

chapter1,2.doc

쉽게 풀어쓴 C 프로그래밍

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Microsoft PowerPoint - 2강

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

쉽게

<C4FBC1EEB7CE20C1A4B8AEC7D5BDC3B4D95FC1A4B4E42E687770>

JVM 메모리구조

쉽게 풀어쓴 C 프로그래밍

유니버설미들웨어프레임워크 - OSGi OSGi 개발환경구현 2 - OSGi Bundle 구현 지난시간에는 OSGi 개발환경구축에앞서 OSGi 애플리케이션구현을위한실행과개발환경에대해살펴봤다. 그흐름을이어서이번시간에는 OSGi 애플리케이션 (Bundle) 을직접구현하고 O

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

뇌를 자극하는 JSP & Servlet 슬라이드

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

PowerPoint 프레젠테이션

뇌를 자극하는 JSP & Servlet 슬라이드

Data Provisioning Services for mobile clients

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Microsoft PowerPoint - JasperReports 개발자 매뉴얼.ppt

PowerPoint Presentation

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

12-file.key

PowerPoint 프레젠테이션

오버라이딩 (Overriding)

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Transcription:

Chapter. RequestDispatcher 활용 요청재지정이란? RequestDispatcher 활용 요청재지정구현예제

Chapter.9 : RequestDispatcher 활용 1. 요청재지정이란? 클라이언트로부터요청받은 Servlet 프로그램이응답을하지않고다른자원에수행흐름을넘겨다른자원의처리결과를대신응답하는것또는다른자원의수행결과를포함하여응답하는것을요청재지정이라고한다. 이때요청재지정되는다른자원은 HTML, 이미지, Servlet 그리고 JSP 등 Web Application 을구성하는어떤파일이든대상이될수있다. HTML Servlet 이미지 JSP 다른자원의대상이 될수있음 요청재지정기능구현에사용되는 API 는 javax.servlet 패키지의 RequestDispatcher 이다. 2. RequestDispatcher 활용 1) RequestDispatcher 객체생성 RequestDespatcher 는클라이언트로부터요청받은정보를서버의다른자원즉, HTML, JSP 또는 Servlet 등의자원에보내는역할을하는인터페이스이다. 인터페이스인 RequestDispatcher 의객체를생성할때에는다음과같은메서드들을사용한다. 이렇게 일반메서드이면서다른 API 의객체생성을대신하는메서들을팩토리메서드라고한다. ServletContext 에서제공되는 getrequestdispatcher(string path) ServletContext 에서제공되는 getnameddispatcher(string name) ServletRequest 에서제공되는 getrequestdispatcher(string path) 요청이재지정될대상에대한정보를 path 형식, name 등어떤것으로지정하는가만다를뿐대상을지정하면서 RequestDispatcher 객체를추출하는기능은동일하다. 세개모두동일하다. getnameddispatcher() 는대상을지정할때재정의된이름을사용해야하며 getrequestdispatcher() 는패스형식으로지정해야한다. 일반적으로 ServletContext 와 2/13

ServletRequest 의 getrequestdispatcher() 를사용한다. 다음은 ServletContext 의 getrequestdispatcher() 를사용하여객체를생성하는예이다. getservletcontext() 를호출하여먼저 ServletContext 객체를생성한후에요청이 재지정될대상파일에대한패스를지정하여 getrequestdispatcher() 를호출한다. 이때 주의할사항은 패스지정시에현재 Web 어플리케이션의최상의디렉토리 (docbase 디렉토리 ) 를기준으로하여 / 기호로시작해야한다는것이다. ServletContext context = getservletcontext(); RequestDispatcher rd = context.getrequestdispatcher("/servlet/forwardservlet2") 다음은 ServletRequest 의 getrequestdispatcher() 를사용하여객체를생성하는예이다. doget() 이나 dopost() 메서드의첫번째매개변수로전달되는 HttpServletRequest 객체를사용한다. 요청이재지정될대상파일에대한패스를지정하여 getrequestdispatcher() 를호출하며 / 기호로시작하는절대패스형식을사용해도되고현재디렉토리를기준으로하는상대패스형식을사용해도된다. public void doget (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { : req.getrequestdispatcher("/servlet/forwardservlet2"); // req.getrequestdispatcher("forwardservlet2"); 도가능 RequestDispatcher rd = context.getrequestdispatcher("/servlet/forwardservlet2"); RequestDispatcher 인터페이스에는다음과같이두개의메서드를지원한다. public void forward(servletrequest req, ServletResponse res) public void include(servletrequest req, ServletResponse res) 2) forward() 메서드 forward() 메서드는클라이언트에서수행요청을받는 Servlet 에서다른 Servlet, JSP 또는 3/13

HTML 파일등으로수행권한을넘겨서다른자원의수행결과가대신클라이언트로응답하는기능을지원한다. 그러므로클라이언트는요청한 Servlet 프로그램의수행결과대신다른파일즉, Servlet,JSP 그리고 HTML 등의수행결과를보게되지만이사실을알수없다. forward 되는대상은동일한서버에존재하는자원으로제한되며다른 Web Site 의 자원으로는 forward 될수없다. forward 될대상을찾을수없는경우에는 404 응답 코드를사용하여파일을찾을수없다는오류화면을클라이언트로출력한다. 다음은 forward() 메서드의기능을쉽게이해할수있도록처리과정을소개하는그림이다. 2) include() 메서드 include() 메서드는다른자원의수행결과내용을클라이언트로부터요청된 Servlet 안에포함시켜응답하는기능을지원한다. 그러므로클라이언트는요청한 Servlet 프로그램의수행결과대신다른파일즉, Servlet,JSP 그리고 HTML 등의수행결과를보게되지만이사실을알수없다. include 되는대상은동일한서버에존재하는자원으로제한되며다른 Web Site 의자원으로는 forward 될수없다. 또한 include 기능으로요청재지정을처리할때대상을찾을수없는경우에는 include 처리는무시되고클라이언트에서요청한 Servlet 의수행결과만응답됩다. forward 와같이오류화면이출력되지는않는다. 다음은 include() 메서드의기능을쉽게이해할수있도록처리과정을소개하는그림이다. 4/13

4) 다른 Web Application 으로의요청재지정 WAS 에의해인식되는 Web Application 단위로 ServletContext 객체가생성된다는것은 이미학습한바있다. 그러므로클라이언트로부터요청되는파일이속한 ServletContext 객체에의해생성되는 RequestDispatcher 객체로는동일한 Web Application 에존재하는파일들만을요청 재지정의대상이될수있다. 만일다른 Web Application 에존재하는파일을요청재지정의대상으로하려는경우에는해당 Web Application 의 ServletContext 객체를추출한후에 RequestDispatcher 객체를생성해야한다. 다음은다른 Web Application 에존재하는파일을요청재지정의대상으로처리하는것을소개하는그림이다. /exam 을컨텍스트패스로사용하는 Web Application exam ROOT / 를컨텍스트패 스로 사용하는 5/13 Web Application

다음은 webapps/root 디렉토리로구성되는 Web Application 에대한 ServletContext 객체를생성하여 index.jsp 를요청재지정의대상으로처리하는부분예제이다. 현재 Web Application 에대한 ServletContext 객체를추출한후에 getcontext( / ) 를호출하여 / 를컨텍스트패스로사용하는 Web Application 디렉토리에대한 ServletContext 객체를추출한후에 RequestDispatcher 객체를생성하고있다. ServletContext context = getservletcontext().getcontext("/"); RequestDispatcher rd = context.getrequestdispatcher("/index.jsp"); rd.forward(req, res); 다른 Web Application 에존재하는파일로요청재지정을처리하려는경우에는서로다른 Web Application 간에 ServletContext 객체를추출할수있도록하는환경설정이되어있어야한다. 톰캣이설치된디렉토리의 conf/context.xml 파일에서 <Context> 태그에 crosscontext= true 속성을추가한다. RequestDispatcher 를활용하는요청재지정은동일서버에존재하는자원만대상이될 수있다. 다른서버에존재하는자원으로 forward 를처리하고자하는경우에는 HttpServletResponse 의 sendredirect() 를호출하여처리할수있다. 3. 요청재지정구현예제 1) forward 기능을테스트하는예제 다음은클라이언트로부터요청된 ForwardTestServlet1 이 ForwardTestServlet2 로요청을 forward 하는예제이다. 서블릿예제 (ForwardTestServlet1.java) 6/13

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // 파일명 : ForwardTestServlet1.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ForwardTestServlet1 extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html; charset=euc-kr"); PrintWriter out = res.getwriter(); out.println("<html><head><title>forward 예제 </TITLE>"); out.println("</head><body><h3>forwardtestservlet1의수행결과 </H3>"); out.println("</body></html>"); ServletContext context = getservletcontext(); RequestDispatcher rd = context.getrequestdispatcher("/servlet/forwardtestservlet2"); rd.forward(req, res); out.close(); 클라이언트로부터요청을받으면바로 /servlet/forwardtestservlet2 로 forward 기능을처리하는 Servlet 소스이다. 다음에제시된내용을위주로점검한다. 15 행 : HttpServlet 에서상속받은 getservletcontext() 메서드를호출하여 ServletContext 객체를추출한다. 16-17 행 : /servlet/forwardtestservlet2 을매개변수로지정하여 RequestDispatcher 객체를생성한다. /servlet/forwardtestservlet2 에서맨앞에있는 / 는현재 Web Application 을기반으로하여인식되므로 ForwardTestServlet2 를찾을때실제로는 /exam/servlet/forwardtestservlet2 을찾게되는결과가된다. 18 행 : HttpServletRequest 객체와 HttpServletResponse 객체를전달하면서 forward() 메서드를호출한다. 7/13

서블릿예제 (ForwardTestServlet2.java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 파일명 : ForwardTestServlet2.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ForwardTestServlet2 extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html; charset=euc-kr"); PrintWriter out = res.getwriter(); out.println("<html><head><title>forward 예제 </TITLE>"); out.println("</head><body><font color=blue><h3>forwardtestservlet2 의수행결과입니다.</H3></font>"); out.println("</body></html>"); out.close(); 클라이언트로부터요청되는 ForwardTestServlet1 에의해 forward 되는소스로서 브라우저에서보게되는결과화면은이클래스의수행결과이다. 다음결과화면에서클라이언트에서는 ForwardTestServlet1 을요청하였는데 ForwardTestServlet2 의수행결과가대신응답된것을볼수있다. ForwardTestServlet1 대신 ForwardTestServlet2 의수행결과가대신응답되었지만주소필드가바뀌지않으므로브라우저사용자는요청이재지정된사실을알수없다. 8/13

2) forward 기능을테스트하는예제 다음은클라이언트로부터요청된 ForwardTestServlet1 이 ForwardTestServlet2 로 요청을 forward 하는예제이다. 서블릿예제 (IncludeTestServlet1.java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // 파일명 : IncludeTestServlet1.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class IncludeTestServlet1 extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html; charset=euc-kr"); PrintWriter out = res.getwriter(); out.println("<html><head><title>include 예제1</TITLE>"); out.println("</head><body><h3>includetestservlet1의수행결과 </H3>"); out.println("</body></html>"); ServletContext context = getservletcontext(); RequestDispatcher rd = context.getrequestdispatcher("/servlet/includetestservlet2"); out.println("<hr>"); rd.include(req, res); out.println("<hr>"); rd.include(req, res); out.close(); 클라이언트로부터요청을받으면 /servlet/includetestservlet2 의수행결과를두번포함하여응답하는기능의 Servlet 소스이다. 다음에제시된내용을위주로점검한다. 15 행 : HttpServlet 에서상속받은 getservletcontext() 메서드를호출하여 ServletContext 객체를추출한다. 9/13

16-17 행 : /servlet/includetestservlet2 을매개변수로지정하여 RequestDispatcher 객체를생성한다. /servlet/includetestservlet2 에서맨앞에있는 / 는현재 Web Application 을기반으로하여인식되므로 IncludeTestServlet2 를찾을때실제로는 /exam/servlet/includetestservlet2 을찾게되는결과가된다. 19 행, 21 : HttpServletRequest 객체와 HttpServletResponse 객체를전달하면서 include() 메서드를호출한다. 두번호출하고있으므로수행결과가두번포함되어클라이언트로응답된다. 서블릿예제 (IncludeTestServlet2.java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 파일명 : IncludeTestServlet2.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class IncludeTestServlet2 extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getwriter(); out.println("<font color=red><h3>includetestservlet2의수행결과 </H3></font>"); out.println("<br>"); 클라이언트로부터요청되는 IncludeTestServlet1 에의해수행결과가두번 include 되는 소스로서브라우저에서보게되는결과화면에이클래스의수행결과가포함된다. 다음결과화면에서클라이언트에서요청한 IncludeTestServlet1 의수행결과안에 IncludeTestServlet2 의수행결과가두번포함되어응답된것을볼수있다. 검은색으로 출력된내용은 IncludeTestServlet1 의수행결과이고빨간색으로출력된내용은포함된 IncludeTestServlet2 의수행결과이다. 10/13

3) 다른 Web Application 의자원으로의요청재지정을테스트하는예제 다음은클라이언트로부터요청된 ForwardTestServlet3 다른 Web Application 에존재하는 파일로요청을 forward 하는예제이다. 서블릿예제 (IncludeTestServlet1.java) 11/13

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 파일명 : ForwardTestServlet3.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ForwardTestServlet3 extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html; charset=euc-kr"); PrintWriter out = res.getwriter(); out.println("<html><head><title>forward 예제 </TITLE>"); out.println("</head><body><h3>forwardtestservlet1의수행결과 </H3>"); out.println("</body></html>"); ServletContext context = getservletcontext().getcontext("/"); RequestDispatcher rd = context.getrequestdispatcher("/index.jsp"); rd.forward(req, res); out.close(); 클라이언트로부터요청을받으면바로 /index.jsp 로 forward 기능을처리하는소스이다. 다음에제시된내용을위주로점검한다. 15 행 : HttpServlet 에서상속받은 getservletcontext() 메서드를호출하여 ServletContext 객체를추출한다음 getcontext( / ) 를호출하여컨텍스트패스를 / 로사용하는 Web Application 디렉토리에대하여 ServletContext 객체를추출한다. 16 행 : /index.jsp 을매개변수로지정하여 RequestDispatcher 객체를생성한다. /index.jsp 에서앞에있는 / 는컨텍스트패스를 / 로사용하는 Web Application 의컨텍스트루트디렉토리를의미하므로 webapps/root/index.jsp 을찾게된다. 17 행 : HttpServletRequest 객체와 HttpServletResponse 객체를전달하면서 forward() 메서드를호출한다. 다음결과화면에서클라이언트에서는 ForwardTestServlet3 를요청하였는데 /index.jsp 의 수행결과가대신응답된것을볼수있다. ForwardTestServlet3 대신 /index.jsp 의수행 12/13

결과가대신응답되었지만주소필드가바뀌지않으므로브라우저사용자는요청이재지정된 사실을알수없다. 13/13