■ JSP Standard Tag Library


JSP 표준 태그 라이브러리로서 자주 사용하는 기능 중 반복, 조건, 데이터 포멧을 구현해 놓은 태그 라이브러리이다. 이러한 기능들을 해당 태그를 선언해서 간편하게 사용할 수 있다. 


  pom.xml 에서 Dependency 추가


1
2
3
4
5
6
7
8
9
10
<dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>
<dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
 </dependency>
cs


■ 자주 사용되는 라이브러리


코어 라이브러리 - 일반 프로그램 언어에서 제공하는 변수선언, 조건, 제어, 반복 기능을 제공한다.


url식별자 - http://java.sun.com/jsp/jstl/core











'Spring' 카테고리의 다른 글

MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ MVC 패턴


JSP / Servlet 기반의 어플리케이션을 spring으로 wrapping하여 추상화한 것을 말한다. JSP와 자바로직이 주고 받는 데이터를 모델이라고 하는데 뷰에서 모델을 만들고 컨트롤러에게 주고 컨트롤러는 그 모델을 서비스에 전달하는 일련의 과정은 통틀어서 MVC 패턴이라고 한다.


원래는 HTML 코드안에 JAVA코드가 존재 했었다. 하지만 이러한 패턴은 매우 비효율적이다. 퍼블리셔가 디자인을 할 때 개발자와 같이 하지 않으면 작업이 진행이 안되는 지경까지 이르렀다. 기존의 이러한 문제점을 개선하여 작업을 분리하였다. 



MVC패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.


1. Model - JSP에 전달될 데이터들 / Controller와 JSP 사이에서 서로 주고 받는 데이터

2. View - 사용자에게 제공할 화면을 포함 / 사용자가 보는 JSP

3. Controller - 모델과 뷰 사이의 상호작용을 관리 / 클라이언트에게 요청과 응답


주 목적은 비즈니스 로직과 프래젠테이션 로직을 분리하기 위해서이다.


■ @Controller


컨트롤러가 전달하는 데이터타입은 2가지가 존재한다 

1. view만 전달한다

2. view와 함께 데이터도 전달한다.


1번 같은 경우에는 데이터타입이 String이다. 사용자에게 보여줄 view 이름을 Dispatcher Servlet에게 전달하면 viewResolver가 받아서 자동으로 뷰페이지를 만든다.


2번 같은 경우에는 view와 함께 데이터를 보낸다. 이때 데이터를 model이라고 한다. 사용자에게 보여질 data set 이다. view로 전달된 model은 JSP의 EL문법을 통해서 출력할 수 있다.


■ ModelAndView 생성






detail.jsp 생성











'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ 프로세스



그림을 보면 알겠지만 Dispatcher Servlet 이하 DS는 모든 영역에서의 중간 역할을 하기 때문에 매우 핵심적이다. 그래서 DS를 이해하는 것은 필수적인 요소라고 할 수 있겠다. 


클라이언트가 요청을 하면 DS가 그 요청을 받는다. 그 요청을 HandlerMapping에게 전달해서 매핑되는 url을 검색하도록 시킨다. 검색된 결과를 다시 받아서 HandlerAdapter에게 전달해서 실행하라고 지시한다. HandlerAdpater는 Controller를 통해 실행된 결과 값을 반환하고 DS는 다시 viewResolver에게 전달한다.

viewResolver는 결과 값에다가 prefix 접두사와 suffix 접미사를 붙이는 작업을 하게 되면 그 이하는 자동적으로 JSP파일을 클라이언트에게 응답하는 과정이다.





■ DispatcherServlet 생성






DS는 모든 요청을 받고 응답을 받는다. SpringFramewok를 실행하여 applicationContext.xml 파일을 읽어 bean을 생성하고 Bean Container에 적재한다. 코드를 보면 applicationContext.xml 파일의 경로가 보이고 url패턴은 / 으로 정의되어 있다. 이 부분 설명은 뒤에게 하기로 하고 브라우저와 서블릿 사이에서 다국어 처리하는 작업을 해야한다. 



 다국어 처리 필터 만들기



브라우저와 DispatcherServlet 사이에서 요청과 응답을 할 때 마다 다국어 처리를 해주는 필터링이다.



/*는 모든 응답과 요청을 필터링해주는 의미이다.

DS가 완성 되었으니 Bean 객체를 생성하는 applicationContext.xml 파일을 살펴보자.



 applicationContext.xml 생성






스프링 폴더와 applicationContext.xml 파일 생성








하단 NameSpaces로 가서 Context와 mvc 체크






추가된 빈 확인




viewResolver는 저 문구를 기입하고 Ctrl + space를 누르면 자동 완성된다.





 1. context:component-scan은 base-package 경로 안에 있는 어노테이션들을 스캔하고 Bean Container안에 적재하는 역할을 한다. 동일한 인터페이스로 등록된 클래스를 찾아 자동으로 주입한다. Setter 혹은 생성자가 없어도 자동으로 등록한다. 


◆Layered Architecture

1. Presentation Layer - Controller @Controller관리

2. Business Layer - Service @Service 관리

3. Data Access Layer / Persistence Layer - Dao @Repository 관리 


각각 레이어는 의존관계로 묶여있고 클래스로 만들어져 Component 자동 등록을 위해 다양한 Annotation을 지원한다. 이러한 클래스는 Annotation이 등록되었을 경우 자동으로 Bean Container에 추가한다. 추후에 트랜젝션에 영향을 받기 때문에 3개의 레이어로 구분을 하였다.


2.  mvc:annotation-driven은 HandlerMapping 스프링 빈과 HandlerAdapter 스프링 빈을 생성한다. 


3. HandlerAdpater가 실행된 반환값을 DS에게 전달하고 그 결과를 viewResolver가 받아서 앞에다가 prefix를 붙이고 뒤에다가 Suffix를 붙인다. 만약 board/list 라는 값을 전달 받았다면 


WEB-INF/view/board/list.jsp 와 같이 되는 것이다.



DS에 의해서 BeanContainer 적재된 객체들은 아래와 같다.

1. @Controller

2. @Service

3. @Repository

4. HandlerMapping

5. HandlerAdapter

6. viewResolver



■ Controller




@Controller 어노테이션을 추가한다.





@RequestMapping("클라이언트가 요청하는 url주소가 들어갈 자리")







BoardController는 BoardService와 의존관계를 갖고 있기 때문에 @Autowired 어노테이션을 추가하면 생성자를 생성하거나 setter를 만들 필요가 없어진다.




list.jsp



list.jsp 를 viewReolver에 정의된 경로와 일치하도록 생성해준다.





인코딩 작업을 해준다



'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

+ Recent posts