[목차]

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;
	}
}

 

 

 

+ Recent posts