병갈이 블록

서블릿을 기점으로 페이지 포워딩. 본문

IT(Old)/JSP 실습 과정 기록

서블릿을 기점으로 페이지 포워딩.

woojang 2017. 7. 13. 15:05

기본적인 서블릿 접속 및 포워딩 경로.

1. 특정 확장자로 접속 시 서블릿으로 접속됨. - web.xml에 uri-pattern으로 설정.

2. doGet이나 doPost메서드에서 처리될 함수 실행.

1) 접속한 경로의 내용을 확인한다. -> req.getServletPath()메서드로 루트경로 이 후의 경로를 문자열로 반환.

2) 경로내용에 매칭된 핸들러를 지정하고 핸들러에서 코드 수행 후 결과에 따라 적절한 실제 파일 경로를 반환한다.

3) 서블릿은 핸들러의 메서드수행으로 받은 경로를 가지고 결과 페이지로 포워딩을 수행.



1. properties파일 작성 및 읽어들이기 작업.

1) properties파일의 전체경로 얻기.

1> 루트폴더를 기준으로한 파일경로 입력시.

getServletContext().getRealPath(경로) 메서드로 실제 경로를 얻는다. (HttpServlet클래스를 상속받을 경우 사용가능한 메서드)

2>FileReader = new FileReader(실제경로) 형태로 파일을 읽어들인다.

3>미리 생성해둔 Properties 변수에서 .load(FileReader)메서드로 properties파일을 Properties변수에 로드한다.

이제 파일내용이 <key, value>형태로 Properties변수에 저장된다.

4>이제 생성해둔 Map<String, CommandHandler> 변수에  키와 핸들러 클래스들을 저장하기 위한 반복작업을 해야한다.

그래서 위 Properties파일의 키값을 Iterator형태로 변환해준다. Iterator변수로 바꾸기 위해서는 

Properties.KeySet().iterator() 메서드를 사용한다.(꼭 중간에 KeySet()메서드를 사용해야 iterator로 변환이 가능하다.)

5>iterator.hasNext()함수를 이용하여 while함수를 수행한다.


2) web.xml 초기화 파라미터 사용시.

1> getServletContext().getInitParameter("init-parameter이름") 메서드로 문자열 변수에 값을 반환한다.

2> 파라미터 내용이 여러개일 경우 web.xml파일에 value태그 안에 엔터로 구분하여 값을 넣는다.

3> 1)번의 3>부터 동일하게 사용하면 된다. 단, FileReader 위치에 StringReader을 넣고 값으로 위에서 얻은 문자열 변수를 넣는다.


위 작업을 초기화때 수행해두어야 한다.

서블릿 초기화 작업은 init()메서드를 수행함으로써 이루어진다.

**서블릿 클래스 호출 후 init()메서드가 존재하면 init()메서드를 수행함으로써 초기화를 수행한다.


2. Handler 매칭작업.

1) 서블릿에서 미리 만들어둔 변수의 메서드를 사용하게 하고 중간에 요청에 따라 변수의 인스턴스만 변경해준다.

그러기 위해서는 하나의 최상위 인터페이스핸들러들이 구현하여 동일한 메서드를 만들도록 작업해야한다.

즉, 서블릿에서는 핸들러인터페이스 변수만 생성을 해두고 Map변수에는 값으로 핸들러인터페이스를 구현한 클래스의 

인스턴스들을 저장해둔 뒤 필요에 따라 인터페이스 변수에 핸들러 클래스들의 인스턴스만 교체해주는 것이다.


** 서블릿을 구성하는게 상당히 중요한 작업으로 느껴진다.

** 메인 플랫폼이어서 그런지, 잘 구상하고 잘 구현해야될 필요성을 많이 느끼게 된다.

오늘의 작업은 test.do로 접속시 main.jsp로 포워딩하고 파라미터값으로 success문구를 받아 jsp페이지에서 출력하는 것이다.

test.do는 TestHandler클래스로 매칭시켜두고 그 매칭작업은 서블릿에서 일어난다.

main.jsp의 주소파라미터값TestHandler에서 리턴해주는 값이다. 

즉, success문구가 나타난다면 test.do로 접속시 TestHandler클래스를 거쳤다는 뜻이고 

TestHandler를 거쳤다는것은 서블릿에서 "test.do"라는 서블릿패스를 정상적으로 읽어와서 

그 값에 맞는 핸들러 인스턴스로 교체했다는 뜻이고 

핸들러가 잘 교체되었다는 것은 properties파일의 목록을 읽어와 Map형태로 저장되는 과정이 잘 이루어 졌다( 1.1)의 글)는 뜻이다.


Comments