반응형

 

스프링 프레임워크

 

: 디자인패턴 + 라이브러리

=> 자바 플랫폼을 위한 오픈 소스

 

동적 웹 사이트를 개발할 때 서비스를 제공함

의존성 주입, 관점 지향 프로그래밍, MVC 프레임 워크가 제공됨

 

ex) 타일즈, 웹 플로우, 스프링 보안 등의 기능 구현

 

 

스프링 삼각형 :

 

PSA : DB가 바뀌어도 소스는 그대로

 

PoJo(Plain Old Java Object) : 순수한(본연의) Java 사용 권장

다른 것에 의존하지 않는 자바 클래스만으로 구성해도 프로그래밍 가능
코드가 단순하며, 속도가 빨라 객체 지향적 설계가 자유로움

 

IoC : 개발자는 new를 안함

 

DI : 객체의 생명주기를 스프링에서 한다.

의존성 주입(이미 만들어져 있는 것을 이용) => 객체 생성을 하지 않아도 됨, 쓸 객체를 선택해야함

의존성 주입으로 인해 느슨한 결합도가 됨

 

AOP: 로깅, 보안, 트랜젝션, 에러 -> 개발자의 부수적인 업무

공통 관심사를 비즈니스 로직으로 분리함
애스팩트라는 공통 모듈을 만들어 설계, 개발하는 방법
핵심 관점 코드 + 비즈니스 코드 구성 => 개발 과정 간소화

 

 

 

스프링 MVC

 

 

스프링 MVC

 

 

스프링 MVC 처리 과정

 

 

 

기본 설정 및 실습

 

 

+ 프로젝트 생성 방법

더보기
1

 

1. Spring Legacy Project 클릭

 

2

 

2. 이름 기입 > Spring MVC Project 클릭 > Next 클릭

 

3

 

3. Yes 클릭 

 

4

 

4. Spring MVC Project 클릭 > Next 클릭 

 

5

 

5. Finish 클릭 

 

 

 

+프로젝트 설정 방법

더보기

1) Java Build Path

 

1

 

1. 프로젝트 오른쪽 마우스 클릭 > Properties 클릭 

 

2

 

2. Java  Build Path 클릭 > Libraries 클릭 > JRE 클릭 > Edit 클릭

 

3

 

3. JavaSE-1.8 (JDK1.8)로 변경 > Environments 클릭

 

4

 

4. JavaSE-1.8 클릭 > JDK1.8 클릭 > Apply and Close 클릭 

 

5

 

5. Finish 클릭 

 

6

 

6. 1.8로 변경된 것 확인 > Add Library 클릭

 

7

 

7. Server Runtime 클릭 > Next 클릭

 

8

 

8. Apache Tomcat v8.5 클릭 > Finish 클릭

 

9

 

9. 변경된 것들 확인 > Apply 클릭

 

 

2) Project Facets

 

1

 

1. Project Facets 클릭 > Dynamic, Java 버전 변경 > Java 클릭 > Runtimes 클릭 > 체크 박스 클릭 > Apply 클릭 

 

 

3) Deployment Assembly

 

1

 

1. Deployment Assembly 클릭 > Maven Dependencies 가 있는지 확인 

 

2

 

2. 없을 시 Add 클릭 > Java Build Path Entries 클릭 > Next 클릭 후 추가

 

 

 

+ 서버 설정

더보기
1

 

1. 서버 더블 클릭 > 포트 번호 80으로 수정 

 

2

 

2. 하단의 Modules 클릭 > 클릭 후 Edit 클릭 

 

3

 

3. 경로 변경 후 OK 클릭 > Ctrl + S > Overview 클릭

 

4

 

4. Timeouts 클릭 >  시간초 120초로 변경 > Ctrl + S로 저장

 

 

 

+ 설정해야 할 것

더보기

1) web.xml

 

1

 

1. 위의 위치에서 web.xml 클릭 > 버전 확인

 

2

 

2. 버전 변경 후 저장 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">

<!-- 
web.xml : tomcat서버의 설정
웹 프로젝트의 배포 설명자/배치 기술서(deployment description)이며, 웹 프로젝트가 배포되는 데 이용되는 XML 형식의
자바 웹 애플리케이션 환경 설정 부분을 담당함
스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고 위부터 차례로 태그를 해석함

1) 네임 스페이스 : 코드에서 이름은 같지만 내용이 전혀 다른 요소와 충돌하지 않도록, 즉 이런 요소를 구별하는 데 사용함
2) 스키마 : 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조, 즉 틀을 의미함
   xsi:schemaLocation 속성은 참조하고자 하는 인스턴스 문서의 URI를 지정함
					두 개의 속성 값은 공백으로 구분. 첫 번째는 사용할 네임 스페이스(보통 기본 네임 스페이스와 동일)고,
											두 번째는 참조할 스키마 파일 이름.
-->

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- 한글 처리 -->
	<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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<!-- 모든 요청에서 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

 

 

 

2) log4j.xml

 

1

 

1. log4j.xml에서 오른쪽 마우스 클릭 > Open With 클릭 > XML Editor 클릭

 

2. root의 priority value 를 변경

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="kr.or.ddit">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<!-- 
	appender : 전달된 로그를 어디에 출력할지 결정(콘솔, 파일 기록, DB 저장)
	priority : 로그 레벨
		- fatal : 심각한 오류 발생
		- error : 요청 처리 중 문제 발생
		- warn : 프로그램 실행에는 문제가 없으나 오류 발생 경고
		- info : 상태변경 등 정보성 메시지
		- debug : 개발 시 디버깅 용도*
		- trace : 상세한 이벤트 용도
	-->
	<root>
		<priority value="info" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

 

 

 

  • 테스트 : pom.xml이 바뀔때마다 해줘야함

1

 

1. 프로젝트에서 오른쪽 마우스 클릭 > Run As > Maven build 클릭

 

2

 

2. compile 입력 > Run 클릭 > 콘솔창에 성공이 뜨는지 확인 > 서버 start 하기

 

 

추가한 패키지와 파일 참조1

 

추가한 패키지와 파일 참조2

 

 

 

실습

 

 

  • get 방식

BookController.java

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/*
Controller 어노테이션
스프링 프레임워크에게 "이 클래스는 웹 브라우저의 요청(request)를
받아들이는 컨트롤러야" 라고 알려주는 것임.
스프링은 servlet-context.xml의 context:component-scan의 설정에 의해
이 클래스를 자바빈 객체로 등록(메모리에 바인딩).
*/
@Controller
public class BookController {
	
	// 요청URI : /create
	// 요청 파라미터 : 
	// 요청방식 : get
	@RequestMapping(value = "/create", method=RequestMethod.GET)
	public ModelAndView create() {
		/*
	       ModelAndView
	       1) Model : Controller가 반환할 데이터(String, int, List, Map, VO..)를 담당
	       2) View : 화면을 담당(뷰(View : JSP)의 경로)
       */
		ModelAndView mav = new ModelAndView();
		
		// name : title / value = "도서생성"
		mav.addObject("title", "도서생성");
		// jsp
//      <beans:property name="prefix" value="/WEB-INF/views/" />
//      <beans:property name="suffix" value=".jsp" />
		// prefix(접두어) : /WEB-INF/views/
		// suffix(접미어) : .jsp
		// /WEB-INF/views/ + book/create + .jsp
		// forwarding
		mav.setViewName("book/create");
		
		return mav;
	}
}

 

 

create.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>책 등록</h1>
</body>
</html>

 

결과 화면1

 

 

 

 

  • post 방식

테이블 정보

CREATE TABLE BOOK(
   BOOK_ID NUMBER,
   TITLE VARCHAR2(300),
   CATEGORY VARCHAR2(150),
   PRICE NUMBER,
   INSERT_DATE DATE,
   CONSTRAINT PK_BOOK PRIMARY KEY(BOOK_ID)
);

 

 

 

카멜 변환법

더보기
--구글 카멜변환(https://heavenly-appear.tistory.com/270)
SELECT COLUMN_NAME
, DATA_TYPE
, CASE WHEN DATA_TYPE='NUMBER' THEN 'private int ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE IN('VARCHAR2','CHAR') THEN 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE='DATE' THEN 'private Date ' || FN_GETCAMEL(COLUMN_NAME) || ';'
ELSE 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
END AS CAMEL_CASE
, '<result property="'||FN_GETCAMEL(COLUMN_NAME)||'" column="'||COLUMN_NAME||'"/>' RESULTMAP
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = '테이블명'
AND       USER = '유저명';

 

 

+롬복 설치 : getter, setter을 하지 않아도 됨

더보기
1

 

1. 위의 위치에서 cmd 실행

 

C:\Users\사용자명\.m2\repository\org\projectlombok\lombok\1.18.22

 

2

 

2. 하단의 코드 입력 후 엔터

 

java -jar lombok-1.18.22.jar

 

3

 

3. Specify location 클릭 > 이클립스 설치했던 폴더로 이동 > eclipse 안에 eclipse.exe 클릭

 

4

 

4. 추가된 것 확인 > Install / Update 클릭

 

5

 

5. Quit Installer 클릭 > 이클립스 재시작

 

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>kr.or</groupId>
	<artifactId>ddit</artifactId>
	<name>springProj</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.2.5.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
			</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>
	
		<!-- Database 라이브러리 시작 -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<!-- XML로 쿼리를 작성하게 해주는 라이브러리 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.10</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<!-- 스프링과 mybatis를 연동하게 해주는 라이브러리 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.4</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<!-- 스프링에서 JDBC(Java DataBase Connectivitiy) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
		<!-- dbcp : database connection pool => 커넥션객체를 미리 만들어놓고 쓰고/반납 최근에는 hikaricp를 
			사용하는 경우도 있음 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.7.0</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
		<!-- 로깅을 위한 라이브러리. 쿼리를 console이나 파일 로그로 볼 수 있음 -->
		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
		<!-- ojdbc6 : oracle java database connectivity 드라이버 -->
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.4</version>
		</dependency>
		<!-- Database 라이브러리 시작 -->
		
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<!-- 
			1) 자바빈 클래스(VO)의 getter/setter메소드, toString 자동처리
			2) log.info() 메소드로 sysout대신 로그를 console에 출력
			1. 개요
			메이븐을 사용하게 되면 POM 파일을 다뤄야 합니다. 
			POM은 Project Object Model의 약자인데... 
			pom.xml이라는 파일이 바로 POM 파일이고 이 파일을 통해 dependency라고 부르는 의존성 설정을 하게 됩니다...
			그리고 각 dependency는 scope을 가지고 있어요...
			종류는 compile, runtime, provided 등의 종류가 있지요...
			2. compile
			compile은 컴파일때 필요한 것입니다... 기본값이기 때문에 만일 scope 설정을 안하면 compile이 기본입니다...
		
			3. runtime
			runtime은 런타임때 필요한 것입니다. 컴파일할 때는 필요가 없지만 실행할 때는 필요한 것이지요.
			JDBC 드라이버 같은게 되겠습니다.
			
			4. provided
			provided는 컴파일때 필요하긴 하지만 런타임때는 JDK 혹은 컨테이너가 제공하는 것입니다.
			마지막 패키징 시 포함되지 않음
			서블릿이나 JSP 관련 API 같은거죠. 
			즉 WAS에서 제공하는 servlet-api.jar를 사용하는 경우 (대부분이겠죠) 입니다.
			만약 운영환경에서 servlet-api.jar 중복으로 인한 문제가 발생한다면 꼭 provided로 바꿔주셔야 합니다.
			
			5. test
			test는 조금 특별한데 테스트 코드를 컴파일할때 필요하지만 배포때는 제외가 됩니다. (따라서 굳이 운영 환경에 JUnit 의존성을 삭제할 필요가 없어요)
			easymock, JUnit 같은거죠.
			
			6. system
			system은 provided와 유사하지만 JAR 파일을 직접 사용합니다...
			이 때는 JAR 파일의 위치를 지정하는 systemPath 엘리먼트가 따라와야 해요...
		-->
		<dependency>
		    <groupId>org.projectlombok</groupId>
		    <artifactId>lombok</artifactId>
		    <version>1.18.22</version>
		    <scope>provided</scope>
		</dependency>
		
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 

BookVO.java

package kr.or.ddit.vo;

import java.util.Date;

import lombok.Data;

@Data
public class BookVO {
	private int bookId;
	private String title;
	private String category;
	private int price;
	private Date insertDate;
	
}

 

 

BookController.java

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.vo.BookVO;
import lombok.extern.slf4j.Slf4j;

/*
Controller 어노테이션
스프링 프레임워크에게 "이 클래스는 웹 브라우저의 요청(request)를
받아들이는 컨트롤러야" 라고 알려주는 것임.
스프링은 servlet-context.xml의 context:component-scan의 설정에 의해
이 클래스를 자바빈 객체로 등록(메모리에 바인딩).
*/
// Slf4j 사용 시 하단의 log.info 사용 가능
@Slf4j
@Controller
public class BookController {
	
	// 요청URI : /create
	// 요청 파라미터 : 
	// 요청방식 : get
	@RequestMapping(value = "/create", method=RequestMethod.GET)
	public ModelAndView create() {
		/*
	       ModelAndView
	       1) Model : Controller가 반환할 데이터(String, int, List, Map, VO..)를 담당
	       2) View : 화면을 담당(뷰(View : JSP)의 경로)
       */
		ModelAndView mav = new ModelAndView();
		
		// name : title / value = "도서생성"
		mav.addObject("title", "도서생성");
		// jsp
//      <beans:property name="prefix" value="/WEB-INF/views/" />
//      <beans:property name="suffix" value=".jsp" />
		// prefix(접두어) : /WEB-INF/views/
		// suffix(접미어) : .jsp
		// /WEB-INF/views/ + book/create + .jsp
		// forwarding
		mav.setViewName("book/create");
		
		return mav;
	}
	
	/*
	요청URI : /crate
	요청파라미터 : {title=개똥이의 모험, category=소설, price=12000}
	요청방식 : post
	*/
	@RequestMapping(value="/create", method=RequestMethod.POST)
	public ModelAndView createPost(BookVO bookVO) {
		log.info("bookVO : " + bookVO);
		
		ModelAndView mav = new ModelAndView();
		
		// 데이터
		mav.addObject("bookVO", bookVO);
		
		// redirect : 새로운 URL 요청
		mav.setViewName("redirect:/create");
		
		return mav;
	}
}

 

 

create.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>책 등록</h1>

<!-- mav.addObject("title", "도서생성"); -->
<h5>${title}</h5>

<!-- 
요청URI : /crate
요청파라미터 : {title=개똥이의 모험, category=소설, price=12000}
요청방식 : post
-->
<form action="/create" method="post">
	<p>제목 : <input type="text" name="title" required placeholder="제목"></p>
	<p>카테고리 : <input type="text" name="category" required placeholder="카테고리"></p>
	<p>가격 : <input type="number" name="price" required placeholder="가격"></p>
	<p>
		<input type="submit" value="저장">
	</p>
</form>

</body>
</html>

 

결과 화면1 : 값 입력 후 전송하면 다시 화면으로 돌아옴

 

결과 화면2 : console 창에 파라미터 값 출력됨

 

 

반응형