Maven pom 설정
/pom.xml
<dependencies>
<!-- Spring-Web MVC Framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
</dependencies>
★web.xml과 springmvc-servlet.xml은 WEB-INF 폴더에 같이 두어야 한다! ★
DD (Deploytment Descriptor) 설정
/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>SpringMVC3-Annotation</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- servlet 설정 -->
<servlet>
<!-- servlet-name을 기반으로 spring 파일을 찾는다. -->
<servlet-name>springmvc</servlet-name>
<!-- Libary 제공 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- load-on-startup
: Serlvet LifeCycle에 의거해서,
어플리케이션 최초 실행 시 해당 servlet을 객체 생성, init()까지 실행되도록 설정
만약 이 태그를 기입해주지 않으면, 클라이언트 최초 요청 시점에 서블릿이 초기화된다. -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet-mapping 설정 -->
<servlet-mapping>
<!-- SpringMVC의 Front인 DispatcherSerlvet은
자신의 설정 파일(springMVC 설정)을
[자신의 서블릿이름]-serlvet.xml로 찾도록 되었어,
찾아서 로딩한다. -->
<servlet-name>springmvc</servlet-name>
<!-- 클라리언트 요청 url이 .do으로 마치는 요청은
모두 DispatcherSerlvet이 처리한다. -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- POST 방식으로 전송 시, 한글처리를 위한 인코딩 설정 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<!-- 모든 요청에 인코딩 처리하겠다는 의미 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Spring configure 설정
* namespace에서 context, mvc 추가
1. IOC 설정
<context:component-scan> : IOC, DI, DL에 대한 설정
1) 컴포넌트 계열의 어노테이션이 명시된 클래스에 대해 객체를 생성하고,
2) DI 계열 어노테이션이 명시된 대상에 대해 해당 객체를 주입하는 역할을 한다.
2. SpringMVC 설정
3. ViewResolver 설정 : client에게 응답하는 view에 대한 설정
/springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- IOC 설정 -->
<context:component-scan base-package="org.kosta"></context:component-scan>
<!-- SpringMVC 설정 : annotation 기반 controller 설정 -->
<mvc:annotation-driven/>
<!-- ViewResolver 설정 : client에게 응답하는 view에 대한 설정 -->
<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- error page 설정 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- views/error.jsp로 응답 -->
<property name="defaultErrorView" value="error"/>
</bean>
</beans>
Model
/org.kosta.model
★ MemberVO has a CarVO ★
- MemberVO의 instance 변수에 CarVO가 있음
/CarVO.java
package org.kosta.model;
public class CarVO {
private String model;
private int price;
public CarVO() {
super();
}
public CarVO(String model, int price) {
super();
this.model = model;
this.price = price;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "CarVO [model=" + model + ", price=" + price + "]";
}
}
/MemberVO.java
package org.kosta.model;
public class MemberVO {
private String id;
private String password;
private String name;
private String address;
private CarVO carVO;
public MemberVO() {
super();
}
public MemberVO(String id, String password, String name, String address, CarVO carVO) {
super();
this.id = id;
this.password = password;
this.name = name;
this.address = address;
this.carVO = carVO;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public CarVO getCarVO() {
return carVO;
}
public void setCarVO(CarVO carVO) {
this.carVO = carVO;
}
@Override
public String toString() {
return "MemberVO [id=" + id + ", password=" + password + ", name=" + name + ", address=" + address + ", carVO="
+ carVO + "]";
}
}
View
★ has a 관계를 parameter로 보낼 때!
<input type="[type]" name="[class명(소문자로)].[instance변수명]">
/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<!-- Annotation 기반 SpringMVC 예제 -->
<br>
<form action="paramTestHasA.do" method="POST">
아이디 <input type="text" name="id"><br>
패스워드 <input type="password" name="password"><br>
이름 <input type="text" name="name"><br>
주소 <input type="text" name="address"><br>
<!-- has a -->
차 모델명 <input type="text" name="CarVO.model"><br>
차 가격 <input type="number" name="CarVO.price"><br>
<input type="submit" value="등록">
</form>
</body>
</html>
/Views
★ has a 관계를 requestScope로 받을 때!
${requestScope.[class명(소문자로)]}
/test_result2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test_result2</title>
</head>
<body>
<!-- Controller에서 form 데이터로 생성된 객체를
바로 출력할 수 있다.
- 소문자로 시작하는 클래스명이 request 영역에 저장된
객체의 name이다.
-->
${requestScope.memberVO}
</body>
</html>
Controller
/org.kosta.Controller
@Controller
@RequestMapping("[method_name] .do") : @RequestMapping 어노테이션 바로 밑에 있는 메서드가 실행된다.
- post방식만 처리 (get방식으로 보내면 405에러)
@PostMapping("paramtest5.do") - *spring version 4.3 이상인 환경에서 지원
/MyController.java
package org.kosta.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.kosta.model.MemberVO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
/* annotation기반 controller는
* 클라이언트의 다양한 요청을 하나의 컨트롤러에서
* 처리할 수 있다.
*/
@Controller
public class MyController {
// has a 관계
// : 매개변수로 폼 데이터를 회원객체(has a 자동차 객체) 형태로
// 전달 받을 수 있따.
@PostMapping("paramTestHasA.do")
public String paramTestHasA(MemberVO memberVO) {
System.out.println(memberVO);
return "test_result2";
}
}
[ 결과 ]
> 홈화면
> 입력 후, test_result2.jsp 로 이동
'Java Web Programming > 6. Spring | MyBatis' 카테고리의 다른 글
[SpringMVC/MyBatis] SpringMVC + 마이바티스 연동 연습 1 (0) | 2020.11.09 |
---|---|
[SpringMVC] Ajax적용 - Annotation기반의 SpringMVC 연습 3 (0) | 2020.11.09 |
[SpringMVC] Annotation 어노테이션 기반의 SpringMVC 연습! (2) | 2020.11.05 |
[Spring] 스프링 AOP Annotation 어노테이션 (0) | 2020.11.05 |
[Spring] 스프링 IOC/DI Annotation 어노테이션 (0) | 2020.11.05 |