② 클래스 파일을 작성하고 나면 태그라이브러리에 대한 설정정보를 담고 있는 TLD 파일을 작성한다.
③ web.xml 파일에 TLD 파일을 사용할 수 있는 설정 정보를 추가한다.
④ 자바클래스의 메소드에 접근하는 JSP 페이지를 작성한다.
● 표현 언어(EL)에서 자바 클래스의 메소드에 접근하는 방법
자바 클래스 파일 ↔ TLD파일 ↔ web.xml ↔ JSP 페이지
● 사용 예
1) 클래스 작성
package com.jsp.test;
public class Compute {
public static int add(String x, String y) {
int a = 0;
int b = 0;
try {
a = Integer.parseInt(x);
b = Integer.parseInt(y);
}catch(Exception e) {}
return a + b;
}
}
2) "elFunctions.tld" 파일을 작성하여 "웹 루트\WEB-INF\tlds" 폴더에 저장한다.
EL에서 함수실행1.0ELfunctions/ELFunctions x와 y의 합addcom.jsp.test.Compute
int add(java.lang.String, java.lang.String)
2) 클라이언트가 *.action 으로 요청하면 DispatcherServlet이 처리를 담당한다.
2. MultiActionController을 이용한 스프링 컨트롤러 작성
- MultiActionController는 하나의 컨트롤러를 이용하여 여러 요청을 처리할수 있다. 예를 들어 게시판에서 글리스트, 글쓰기폼, 글저장, 글보기, 글수정폼, 글수정완료, 글삭제등의 여러 요청을 하나의 컨트롤러로 처리할수 있다.
- 클라이언트가 *.action 으로 요청할 경우 흐름
1) DispatcherServlet이 클라이언트의 요청을 받는다.
2) HandlerMapping이 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.
3) 결정된 컨트롤러는 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다.
4) ViewResolver는 처리 결과를 보여줄 View를 결정한다.
5) View는 처리 결과를 보여줄 응답을 생성한다.
- 프로그램 작성
1) service 클래스를 작성한다.(비지니즈 로직을 처리)
2) MultiActionController를 상속받은 controller를 작성 한다.
요청을 받아 처리할 메소드명은 프로그래머가 임의로 지정하며 다음의 형식을 따른다.
public [ModelAndView|Map|void] 메서드이름
(HttpServletRequest req, HttpServletResponse resp, [HttpSession|Command])
[throws Exception] {
...
...
}
(1) return type : ModelAndView, Map, void 중 하나
(2) argument :
1- HttpServletRequest
2- HttpServletResponse
3- 선택적이며 HttpSession 또는 Command
4- Command
(3) ModelAndView는 컨트롤러의 처리 결과를 보여줄 뷰와 뷰에 전달할 값을 저장할 용도로 사용된다.
- dispatcher-servlet.xml 에서 환경 설정
1) HandlerMapping 설정
bbs.boardController
클라이언트가 /bbs/*.action 형식으로 요청하면 bbs.boardController 라는 id를 가진 컨트롤러가 요청을 처리한다.
클라이언트의 요청을 전달받는다. Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴 한 결과 값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
- HandlerMapping
클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.
- Controller
클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다. 스트럿츠의 Action과 동일한 역할을 수행한다.
- ViewResolver
Commander의 처리 결과를 보여줄 View를 결정한다.
- View
Commander의 처리 결과를 보여줄 응답을 생성한다.
■ HandlerMapping
클라이언트의 요청을 Spring의 DispatcherServlet이 처리하도록 설정했다면, 다음으로 해야 할 작업은 어떤 HandlerMapping을 사용할지의 여부를 지정하는 것이다. HandlerMapping은 클라이언트의 요청을 어떤 Controller가 수행할 지의 여부를 결정해주는데, 구현 클래스는 다음과 같다.
- BeanNameUrlHandlerMapping : 요청 URI와 동일한 이름을 가진 Controller 빈을 매핑 한다.
- SimpleUrlHandlerMapping : 패턴과 컨트롤러의 이름을 비교 URI가 패턴에 매칭될 때 지정한 컨트롤러를 사용 한다.
- ControllerClassNameHandlerMapping : URI와 매칭 되는 클래스 이름을 갖는 빈을 컨트롤러로 사용 //잘 쓰지 않음
- DefaultAnnotationHandlerMapping : @RequestMapping 어노테이션을 이용하여 요청을 처리할 컨트롤러를 구한다. //annotation을 사용할 경우 핵심
ο BeanNameUrlHandlerMapping
BeanNameUrlHandlerMapping은 요청 URI와 동일한 이름을 갖는 Controller 빈으로 하여금 클라이언트의 요청을 처리하도록 한다. 예를 들어,http://host/hello.action 과 같은 요청 URL에 대해 "/hello.action" 라는 이름을 가진 Controller 빈이 해당 요청을 처리하도록 한다.
다음과 같이 alwaysUseFullPath를 true로 설정 하고 다음과 같이 빈을 설정 한 경우
이 경우 요청 URL을 처리하는 컨트롤 빈은 다음과 같이 매핑 된다.
- /content/**/*.action 빈
/content/1/test.action
/content/top/exam.action
- /hello/hello.action 빈
/hello/hello.action
- Ant 경로 패턴
Ant는 자바 기반의 빌드 도구로서 『?』, 『*』, 『**』를 이용하여 경로 패턴을 명시하고 있으며, BeanNameUrlHandlerMapping과 SimpleUrlHandlerMapping은 Ant의 경로 패턴을 이용하여 요청 URL과 컨트롤의 매핑을 처리 한다.
? : 1개의 문자와 매칭
* : 0개 이상의 문자와 매칭
** : 0개 이상의 디렉토리와 매칭
ο SimpleUrlHandlerMapping
SimpleUrlHandlerMapping은 가장 많이 사용되는 HandlerMapping으로 패턴 매칭을 이용해서 다양한 URL 경로를 컨트롤러에 매핑 시켜준다.
SimpleUrlHandlerMapping은 다음 처럼 mappings 프로퍼티를 이용하여 패턴과 컨트롤러 사이의 매핑을 지정한다.
contentControllerhelloController
SimpleUrlHandlerMapping의 mappings 프로퍼티는 java.util.Properties 타입이다. mappings 프로퍼티의 값에 전달되는 <prop>의 key는 요청 URL과 매칭 될 Ant 경로 패턴을 입력하며 <prop>의 값에는 매핑될 컨트롤러의 이름을 입력 한다.
■ MVC 관련 컨트롤러
ο Controller 종류
- Controller (interface)
- AbstractController
- MultiActionController
ο Controller 인터페이스
Controller를 구현하는 가장 간단한 방법은 Controller 인터페이스를 implements 하는 것이지만, Controller 인터페이스를 직접적 implements 하기 보다는, Controller 인터페이스를 implements 하고 몇 가지 추가적인 기능을 구현하고 있는 클래스들을 상속받아 Controller를 구현하는 것이 일반적이다.
org.springframework.web.servlet.mvc.Controller 인터페이스는 다음과 같이 정의되어 있다.
: JSP 액션 태그는 클라이언트 혹은 서버에게 어떠한 동작을 행하도록 명령을 내리는 태그로 JSP 페
이지 안에서 자바 빈즈를 사용할 수 있도록 하는 액션 태그와 페이지를 활용할 수 있도록 하는 액션
태그로 나눌 수 있다.
■ 형식
<jsp:액션태그 속성="값">태그에 들어 있는 내용</jsp:액션태그>
또는
<jsp:액션태그 속성="값" />
JSP 액션 태그는 JSP 태그 형식을 따르지 않고 XML형식을 따른다. 그러므로 시작 태그가
있으면 반드시 끝나는 태그가 있어야 한다. 그리고 액션 태그는 접두어 "jsp:"이 붙어서 "<jsp:"으로 시작해야 한다.
액션 태그에 속성 값만 지정하고 내용이 없을 경우에는, XML규칙에 의해 끝나는 태그를 따로
하지 않고 시작 태그의 마지막 부분을 "/>"으로 마무리 한다.
//useBean : 객체생성
//setProperty : 생성된 객체의 property 할당
//DemoVO vo = new DemoVO();
//int num1 = Integer.parseInt(request.getParameter("num1"));
//vo.setNum1(num1);
이름 : <%=vo.getName()%>
내용 : <%=vo.getContent()%>
<jsp:include page="포함시킬 문서 경로" /> //특정 문서를 현재 위치에 포함 시킨다.