[목차]
7. Spring MVC Pattern
1) DispatcherServlet
2) Servlet을 통한 forward(default)
3) Annotation 사용
[내용]
7. Spring MVC Pattern
1) DispatcherServlet
①Dynamic Web Project 생성 - project 오른쪽 클릭 - Configure - Convert Maven Project - finish
② pom.xml에서 </build>아래 추가
<properties>
<!-- Generic properties -->
<java.version>14.0.2</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<spring-framework.version>5.0.0.RELEASE</spring-framework.version>
</properties>
<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Other Web dependencies -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- mariadb driver -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
</dependencies>
③ index.html
<a href="index.do">start</a>
<a href="good/nice.do">start2</a>
=> client request시 web.xml 실행
④ web.xml
<!-- DispatcherServlet : Spring의 중심이 되는 Servlet -->
<!-- DispatcherServlet는 test-servlet.xml의 설정을 불러온다. -->
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
=> DispatcherServlet가 test-servlet.xml 실행.
⑤ test-servlet.xml
Context - WEB_INF에 <servlet-name>의 네임-servlet의 Spring Bean Configuration을 생성.
<!-- 2. Handler Mapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 3. Controller -->
<!-- BeanNameUrlHandlerMapping -->
<bean name="/index.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="list1"/>
<!-- list1.jsp 실행 -->
</bean>
<bean name="/good/nice.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="list2"/>
<!-- list1.jsp 실행 -->
</bean>
<!-- 5. ViewResover -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
=> context/views/list1.jsp, context/views/list2.jsp 연결
2) Servlet을 통한 forward(default)
- test-servlet.xml
<!-- 2. Handler Mapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 3. Controller -->
<bean name="/start.do" class="pack.StartController"></bean>
<!-- 5. ViewResover -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
- StartController : Controller 상속
public class StartController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// ModelAndView : DB 처리 결과를 기억, 출력을 위한 view 파일명 기억
System.out.println("StartController handleRequest()수행");
//return new ModelAndView("list"); // 생성자
//모델과 통신하기 생략
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("list"); // setter. forward 방식으로 파일 요청 처리 (default)
//request.setAttribute("key", value); // servlet에서 사용하는 방법.
modelAndView.addObject("say", "messages");//모델과 통신 후 얻어진 결과를 기억했다 가정.(request)
return modelAndView;
}
}
- list.jsp
기존
<%
String str = (String)request.getAttribute("say");
out.println(str);%>
EL
${say} ${requestScope.say}
3) Annotation 사용
- test-servlet.xml
<!-- 2. Handler Mapping -->
<!-- annotation 사용시 삭제 -->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> -->
<!-- 3. Controller -->
<!-- annotation 사용시 삭제 -->
<!-- <bean name="/start.do" class="pack.StartController"></bean> -->
<!-- annotation 사용시 추가 -->
<context:component-scan base-package="pack"/>
<!-- 5. ViewResover -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
- StartController
@Controller // Conponent와 동일. Cotroller에 사용.
public class StartController{
@RequestMapping("start.do")
public ModelAndView handleStart(HttpServletRequest request, HttpServletResponse response) throws Exception {
// ModelAndView : DB 처리 결과를 기억, 출력을 위한 view 파일명 기억
System.out.println("StartController handleStart()수행 - annotaion");
//return new ModelAndView("list"); // 생성자
//모델과 통신하기 생략
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("list"); // setter. forward 방식으로 파일 요청 처리 (default)
//request.setAttribute("key", value); // servlet에서 사용하는 방법.
modelAndView.addObject("say", "messages - annotaion");//모델과 통신 후 얻어진 결과를 기억했다 가정.(request)
return modelAndView;
}
}
'BACK END > Spring' 카테고리의 다른 글
[Spring] 스프링 정리7 - Controller 처리, DB연동 (0) | 2021.01.14 |
---|---|
[Spring] 스프링 정리6 - Controller 처리 (0) | 2021.01.13 |
[Spring] 스프링 정리4 - DB연동 (0) | 2021.01.12 |
[Spring] 스프링 정리3 - AOP (Aspect Oriented Program) (0) | 2021.01.12 |
[Spring] 스프링 정리2 - 생성자 주입(Constructor Injection), setter 주입(setter injection) (0) | 2021.01.12 |