μ€νλ§ μ΄λ Έν μ΄μ μ κ²μνλ component-scan μ리먼νΈλ₯Ό μ¬μ©ν Spring Bean Configuration Fileμ νλλ§ μ 곡 κ°λ₯
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
url-pattern μ리먼νΈμ λ΄μ©μ [/]λ‘ μ€μ ν κ²½μ° ν΄λΌμ΄μΈνΈμ λͺ¨λ μΉνλ‘κ·Έλ¨ μμ²μ λν μ²λ¦¬κ° κ°λ₯νλλ‘ μ€μ
<url-pattern>/</url-pattern>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="https://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_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<!-- context-param : λͺ¨λ μΉνλ‘κ·Έλ¨ μ€νμ νμν κ°μ μ 곡νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => contextConfigLocation μ΄λ¦μΌλ‘ μ€νλ§ μ»¨ν
μ΄λ(WebApplocationContext κ°μ²΄)μκ²
Spring Bean Configuration Fileμ κ²½λ‘λ₯Ό μ 곡 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- λͺ¨λ μΉνλ‘κ·Έλ¨μμ μ¬μ©ν μ μλ Spring Beanλ₯Ό λ±λ‘νκΈ° μν Spring Bean Configuration File -->
<!-- => λͺ¨λ Front Controller μνμ νλ μΉνλ‘κ·Έλ¨μκ² νμν κ°μ²΄λ₯Ό μ 곡νκΈ° μν΄ Spring BeanμΌλ‘ λ±λ‘ -->
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<!-- listener : WAS νλ‘κ·Έλ¨μ΄ μμλ λ Listener ν΄λμ€λ₯Ό μ 곡λ°μ κ°μ²΄λ‘ μμ±νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- Listener ν΄λμ€ : ServletContextListener μΈν°νμ΄μ€λ₯Ό μμλ°μ μμν΄λμ€ -->
<!-- => contextInitialized λ©μλ : Listener κ°μ²΄ μμ± ν μλ νΈμΆλλ λ©μλ - μ΄κΈ°ν μμ
-->
<!-- => contextDestroyed λ©μλ : Listener κ°μ²΄ μλ©Έ μ μλ νΈμΆλλ λ©μλ - λ§λ¬΄λ¦¬ μμ
-->
<listener>
<!-- listener-class : ServletContextListener μΈν°νμ΄μ€λ₯Ό μμλ°μ μμν΄λμ€λ₯Ό μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => WAS νλ‘κ·Έλ¨μ΄ μμλ λ ContextLoaderListener ν΄λμ€λ₯Ό κ°μ²΄λ‘ μμ±νκ³
contextInitialized λ©μλλ₯Ό νΈμΆνμ¬ μ΄κΈ°ν μμ
-->
<!-- ContextLoaderListener ν΄λμ€μ contextInitialized λ©μλμμ μ€νλ§ μ»¨ν
μ΄λ(Spring Container)λ₯Ό
μμ±νκ³ Spring Bean Configuration Fileμ μ 곡λ°μ Spring BeanμΌλ‘ λ±λ‘λ ν΄λμ€λ₯Ό κ°μ²΄λ‘ μμ± -->
<!-- Listener κ°μ²΄μ λ©μλμ μν΄ μμ±λ μ€νλ§ μ»¨ν
μ΄λ(WebApplicationContext κ°μ²΄)λ
λͺ¨λ μΉμμ(μλΈλ¦Ώ λ° νν°)μκ² κ³΅μ λμ΄ μ¬μ© κ°λ₯ - Spring Bean μ 곡 -->
<!-- => WebApplicationContext κ°μ²΄λ κΈ°λ³Έμ μΌλ‘ src/main/webapp ν΄λμ Spring Bean
Configuration File νμΌλ§ μ 곡λ°μ μ²λ¦¬ κ°λ₯ -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- servlet : μλΈλ¦Ώ ν΄λμ€λ₯Ό μλΈλ¦Ώ(μΉνλ‘κ·Έλ¨)μΌλ‘ λ±λ‘νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<servlet>
<!-- servlet-name : μλΈλ¦Ώμ ꡬλΆνκΈ° μν μλ³μλ₯Ό μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<servlet-name>mvc</servlet-name>
<!-- servlet-class : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ κ°μ²΄λ‘ μμ±λμ΄ μ€νλ μλΈλ¦Ώ ν΄λμ€μ
μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- DispatcherServlet ν΄λμ€ : 컨νΈλ‘€λ¬(Controller) μνμ μ 곡νλ ν΄λμ€ - Front Controller -->
<servlet-class>xyz.itwill09.mvc.DispatcherServlet</servlet-class>
</servlet>
<!-- servlet-mapping : μλΈλ¦Ώμ μ€ννκΈ° μν URL μ£Όμμ ν¨ν΄μ λ±λ‘νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<servlet-mapping>
<!-- servlet-name : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ μ€νλ μλΈλ¦Ώμ μλ³μλ₯Ό μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<servlet-name>mvc</servlet-name>
<!-- url-pattern : μλΈλ¦Ώμ μ€ννκΈ° μν URL μ£Όμμ ν¨ν΄μ μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => Front Controller μνμ μ 곡νλ μλΈλ¦Ώμ ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²μ λ°μ μ²λ¦¬λλλ‘ μ€μ -->
<url-pattern>*.itwill</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>springMvc</servlet-name>
<!-- Spring Frameworkμ λΌμ΄λΈλ¬λ¦¬μ μν΄ μ 곡λλ DispatcherServlet ν΄λμ€ μ¬μ© - Front Controller -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- init-param : μλΈλ¦Ώ ν΄λμ€μκ² μ€νμ νμν κ°μ μ 곡νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => contextConfigLocation μ΄λ¦μΌλ‘ μ€νλ§ μ»¨ν
μ΄λ(WebApplicationContext κ°μ²΄)μκ²
Spring Bean Configuration Fileμ κ²½λ‘λ₯Ό μ 곡 -->
<!-- => νμ¬ μ€μ λ Front Controller μνμ κ°μ²΄μκ²λ§ μ 곡ν Spring Beanμ λ±λ‘νκΈ°
μν Spring Bean Configuration File -->
<!-- => Spring Bean Configuration Fileμ μν°(Enter) λλ [,] λ° [;]μΌλ‘ ꡬλΆνμ¬ μ¬λ¬κ° μ 곡 κ°λ₯ -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/springMvc/mvc-context1.xml
/WEB-INF/spring/springMvc/mvc-context2.xml
</param-value>
</init-param>
<!-- load-on-startup : WAS νλ‘κ·Έλ¨μ΄ μμλ λ μλΈλ¦Ώ ν΄λμ€λ₯Ό 미리 κ°μ²΄λ‘ μμ±νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => ν΄λΌμ΄μΈνΈκ° μλΈλ¦Ώ(Front Controller)λ₯Ό μμ²νμ§ μμλ μλΈλ¦Ώ κ°μ²΄λ₯Ό 미리 μμ± -->
<!-- => μλ¦¬λ¨ΌνΈ λ΄μ©μΌλ‘ μ€μ λ μ μκ°μ μμμλ‘ λ¨Όμ μλΈλ¦Ώ κ°μ²΄λ‘ μμ± -->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 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>
<!-- μ€νλ§ μ΄λ
Έν
μ΄μ
μ κ²μνλ component-scan μ리먼νΈλ₯Ό μ¬μ©ν Spring Bean
Configuration Fileμ νλλ§ μ 곡 κ°λ₯ -->
<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>/</url-pattern>
</servlet-mapping>
</web-app>
- servlet-context.xml : appServlet μ΄λ¦μ Front Controllerμμ μ¬μ©λ ν΄λμ€μ Spring Beanμ λ±λ‘νκΈ° μν Spring Bean Configuration File
- annotation-driven : @Controller μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μμ² μ²λ¦¬ ν΄λμ€λ₯Ό Spring BeanμΌλ‘ λ±λ‘νκ³ @RequestMapping μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μμ±λ λ©μλλ₯Ό μμ² μ²λ¦¬ λ©μλλ‘ λ±λ‘νμ¬ ν΄λΌμ΄μΈνΈ μμ²μ μν΄ μμ² μ²λ¦¬ ν΄λμ€μ λ©μλκ° νΈμΆλμ΄ μ²λ¦¬λλλ‘ μ€μ νλ μ리먼νΈ
- HandlerMapping κ°μ²΄λ₯Ό μ¬μ©νμ§ μμλ μμ² μ²λ¦¬ ν΄λμ€μ μμ² μ²λ¦¬ λ©μλκ° ν΄λΌμ΄μΈνΈμ μμ²μ μν΄ νΈμΆλλλ‘ μλμΌλ‘ 맀ν μ²λ¦¬
- InternalResourceViewResolver ν΄λμ€λ₯Ό Spring BeanμΌλ‘ λ±λ‘
- InternalResourceViewResolver κ°μ²΄ : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ νΈμΆλλ μμ² μ²λ¦¬ λ©μλμ λ°νκ°(ViewName)μ μ 곡λ°μ μλ΅ κ°λ₯ν JSP λ¬Έμλ‘ λ³ννμ¬ λ°ννλ κ°μ²΄
- component-scan : μ€νλ§ μ»¨ν μ΄λκ° μ€νλ§ μ΄λ Έν μ΄μ μ κ²μνμ¬ μ²λ¦¬νκΈ° μν μ리먼νΈ
- base-package μμ± : μ€νλ§ μ΄λ Έν μ΄μ μ κ²μνκΈ° μν΄ μ΄λ Έν μ΄μ μ μ¬μ©ν ν΄λμ€μ ν¨ν€μ§λ₯Ό μμ±κ°μΌλ‘ μ€μ
- xyz.itwill10.controller ν¨ν€μ§μ μμ² μ²λ¦¬ ν΄λμ€(Model)λ₯Ό μμ±νκ³ μ€νλ§ μ΄λ Έν μ΄μ μ μ΄μ©νμ¬ Spring BeanμΌλ‘ λ±λ‘
<context:component-scan base-package="xyz.itwill10.controller" />
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- servlet-context.xml : appServlet μ΄λ¦μ Front Controllerμμ μ¬μ©λ ν΄λμ€μ Spring
Beanμ λ±λ‘νκΈ° μν Spring Bean Configuration File -->
<!-- Enables the Spring MVC @Controller programming model -->
<!-- annotation-driven : @Controller μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ μμ² μ²λ¦¬ ν΄λμ€λ₯Ό Spring BeanμΌλ‘
λ±λ‘νκ³ @RequestMapping μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ μμ±λ λ©μλλ₯Ό μμ² μ²λ¦¬ λ©μλλ‘ λ±λ‘νμ¬
ν΄λΌμ΄μΈνΈ μμ²μ μν΄ μμ² μ²λ¦¬ ν΄λμ€μ λ©μλκ° νΈμΆλμ΄ μ²λ¦¬λλλ‘ μ€μ νλ μλ¦¬λ¨ΌνΈ -->
<!-- => HandlerMapping κ°μ²΄λ₯Ό μ¬μ©νμ§ μμλ μμ² μ²λ¦¬ ν΄λμ€μ μμ² μ²λ¦¬ λ©μλκ°
ν΄λΌμ΄μΈνΈμ μμ²μ μν΄ νΈμΆλλλ‘ μλμΌλ‘ 맀ν μ²λ¦¬ -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- InternalResourceViewResolver ν΄λμ€λ₯Ό Spring BeanμΌλ‘ λ±λ‘ -->
<!-- InternalResourceViewResolver κ°μ²΄ : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ νΈμΆλλ μμ² μ²λ¦¬ λ©μλμ
λ°νκ°(ViewName)μ μ 곡λ°μ μλ΅ κ°λ₯ν JSP λ¬Έμλ‘ λ³ννμ¬ λ°ννλ κ°μ²΄ -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- component-scan : μ€νλ§ μ»¨ν
μ΄λκ° μ€νλ§ μ΄λ
Έν
μ΄μ
μ κ²μνμ¬ μ²λ¦¬νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- base-package μμ± : μ€νλ§ μ΄λ
Έν
μ΄μ
μ κ²μνκΈ° μν΄ μ΄λ
Έν
μ΄μ
μ μ¬μ©ν ν΄λμ€μ ν¨ν€μ§λ₯Ό μμ±κ°μΌλ‘ μ€μ -->
<!-- <context:component-scan base-package="xyz.itwill.controller" /> -->
<!-- xyz.itwill10.controller ν¨ν€μ§μ μμ² μ²λ¦¬ ν΄λμ€(Model)λ₯Ό μμ±νκ³ μ€νλ§ μ΄λ
Έν
μ΄μ
μ
μ΄μ©νμ¬ Spring BeanμΌλ‘ λ±λ‘ -->
<context:component-scan base-package="xyz.itwill10.controller" />
</beans:beans>
- @Controller : μμ² μ²λ¦¬ ν΄λμ€λ₯Ό Spring BeanμΌλ‘ λ±λ‘νκΈ° μν μ΄λ Έν μ΄μ
- ν΄λμ€μ μ΄λ¦μ Spring Beanμ μλ³μ(beanName)μΌλ‘ μλ μ€μ (첫문μλ μλ¬Έμλ‘ λ³ν)
- value μμ±μ μ¬μ©νμ¬ Spring Beanμ μλ³μ(beanName) λ³κ²½ κ°λ₯
- Controller μΈν°νμ΄μ€λ₯Ό μμλ°μ§ μμλ μμ² μ²λ¦¬ ν΄λμ€λ‘ μ²λ¦¬
- @RequestMapping μ΄λ Έν μ΄μ μΌλ‘ λ€μμ μμ² μ²λ¦¬ λ©μλλ₯Ό μμ±νμ¬ ν΄λΌμ΄μΈνΈμ μμ²μ λν μ²λ¦¬ κ°λ₯
μμ² μ²λ¦¬ λ©μλλ Front Controllerμκ² λ°λμ λ·°μ΄λ¦(ViewName) μ 곡
- Front Controllerμ μν΄ JSP λ¬Έμλ‘ ν¬μλ μ΄λνμ¬ μλ΅λλλ‘ λ·°μ΄λ¦μ μ 곡νλ λ°©λ²
- JSP λ¬Έμλ‘ μλ΅ μ²λ¦¬νμ§ μμ κ²½μ° μμ² μ²λ¦¬ λ©μλμ λ°ννμ Model λλ MapμΌλ‘ μ€μ κ°λ₯
μμ² μ²λ¦¬ λ©μλμ λ°ννμ voidλ‘ μ€μ ν κ²½μ° Front Controllerμκ² λ©μλμ μ΄λ¦μ λ·°μ΄λ¦μΌλ‘ μ 곡
μμ² μ²λ¦¬ λ©μλμ λ°ννμ Stringλ‘ μ€μ ν κ²½μ° Front Controllerμκ² λ°νκ°μ λ·°μ΄λ¦μΌλ‘ μ 곡
μμ² μ²λ¦¬ λ©μλμ λ°ννμ ModelAndViewλ‘ μ€μ ν κ²½μ° Front Controllerμκ² ModelAndView κ°μ²΄μ λ·°μ΄λ¦μ μ μ₯νμ¬ μ 곡
modelAndView.setViewName("hello");
: Setter λ©μλλ₯Ό μ΄μ©νμ¬ λ·°μ΄λ¦ λ³κ²½ModelAndView modelAndView=new ModelAndView("hello");
: μμ±μλ₯Ό μ΄μ©νμ¬ λ·°μ΄λ¦ λ³κ²½
- @RequestMapping : ν΄λΌμ΄μΈνΈ μμ²μ μ²λ¦¬νκΈ° μν λ©μλλ₯Ό μ μΈνκΈ° μν μ΄λ Έν μ΄μ
- κΈ°λ³Έμ μΌλ‘ ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²λ°©μ(Method - GET, POST, PUT, PATCH, DELETE λ±)μ μν΄ νΈμΆλλ μμ² μ²λ¦¬ λ©μλλ₯Ό μμ±ν κ²½μ° μ¬μ©νλ μ΄λ Έν μ΄μ
- ν΄λΌμ΄μΈνΈμ μμ²λ°©μμ ꡬλΆνμ¬ μμ² μ²λ¦¬ λ©μλκ° νΈμΆλλλ‘ μ²λ¦¬νκ³ μ ν κ²½μ° @GetMaaping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping λ±μ μ΄λ Έν μ΄μ μ¬μ© κ°λ₯
- value μμ± : ν΄λΌμ΄μΈνΈμ μμ² URL μ£Όμλ₯Ό μμ±κ°μΌλ‘ μ€μ
- Front Controllerμ μν΄ λ±λ‘λ ν΄λΌμ΄μΈνΈ μμ² URL μ£Όμ(μλ³μ)λ‘ μμ² μ²λ¦¬ λ©μλκ° μλ νΈμΆλμ΄ ν΄λΌμ΄μΈνΈμ μμ² μ²λ¦¬
- λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
- λ€λ₯Έ μμ² μ²λ¦¬ λ©μλμ value μμ±κ°κ³Ό μμ² URL μ£Όμκ° μ€λ³΅λ κ²½μ° WAS μμμ μλ¬ λ°μ
package xyz.itwill10.controller;
//@Controller : μμ² μ²λ¦¬ ν΄λμ€λ₯Ό Spring BeanμΌλ‘ λ±λ‘νκΈ° μν μ΄λ
Έν
μ΄μ
// => ν΄λμ€μ μ΄λ¦μ Spring Beanμ μλ³μ(beanName)μΌλ‘ μλ μ€μ - 첫문μλ μλ¬Έμλ‘ λ³ν
// => value μμ±μ μ¬μ©νμ¬ Spring Beanμ μλ³μ(beanName) λ³κ²½ κ°λ₯
// => Controller μΈν°νμ΄μ€λ₯Ό μμλ°μ§ μμλ μμ² μ²λ¦¬ ν΄λμ€λ‘ μ²λ¦¬
// => @RequestMapping μ΄λ
Έν
μ΄μ
μΌλ‘ λ€μμ μμ² μ²λ¦¬ λ©μλλ₯Ό μμ±νμ¬ ν΄λΌμ΄μΈνΈμ μμ²μ λν μ²λ¦¬ κ°λ₯
@Controller
public class HelloController {//λͺ¨λΈ(Model) μνμ μ 곡νλ ν΄λμ€ - μμ² μ²λ¦¬ ν΄λμ€
private static final Logger logger=LoggerFactory.getLogger(HelloController.class);
//μμ² μ²λ¦¬ λ©μλλ Front Controllerμκ² λ°λμ λ·°μ΄λ¦(ViewName) μ 곡
// => Front Controllerλ μ 곡λ°μ λ·°μ΄λ¦μ μ΄μ©νμ¬ μλ΅ κ΄λ ¨ μ λ³΄λ‘ λ³ν(ViewResolver)νμ¬ μλ΅ μ²λ¦¬
//Front Controllerμ μν΄ JSP λ¬Έμλ‘ ν¬μλ μ΄λνμ¬ μλ΅λλλ‘ λ·°μ΄λ¦μ μ 곡νλ λ°©λ²
// => JSP λ¬Έμλ‘ μλ΅ μ²λ¦¬νμ§ μμ κ²½μ° μμ² μ²λ¦¬ λ©μλμ λ°ννμ Model λλ MapμΌλ‘ μ€μ κ°λ₯
//1.μμ² μ²λ¦¬ λ©μλμ λ°ννμ voidλ‘ μ€μ ν κ²½μ° Front Controllerμκ² λ©μλμ μ΄λ¦μ λ·°μ΄λ¦μΌλ‘ μ 곡
//2.μμ² μ²λ¦¬ λ©μλμ λ°ννμ Stringλ‘ μ€μ ν κ²½μ° Front Controllerμκ² λ°νκ°μ λ·°μ΄λ¦μΌλ‘ μ 곡
//3.μμ² μ²λ¦¬ λ©μλμ λ°ννμ ModelAndViewλ‘ μ€μ ν κ²½μ° Front Controllerμκ² ModelAndView κ°μ²΄μ λ·°μ΄λ¦μ μ μ₯νμ¬ μ 곡
//@RequestMapping : ν΄λΌμ΄μΈνΈ μμ²μ μ²λ¦¬νκΈ° μν λ©μλλ₯Ό μ μΈνκΈ° μν μ΄λ
Έν
μ΄μ
// => κΈ°λ³Έμ μΌλ‘ ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²λ°©μ(Method - GET, POST, PUT, PATCH, DELETE λ±)μ
//μν΄ νΈμΆλλ μμ² μ²λ¦¬ λ©μλλ₯Ό μμ±ν κ²½μ° μ¬μ©νλ μ΄λ
Έν
μ΄μ
// => ν΄λΌμ΄μΈνΈμ μμ²λ°©μμ ꡬλΆνμ¬ μμ² μ²λ¦¬ λ©μλκ° νΈμΆλλλ‘ μ²λ¦¬νκ³ μ ν κ²½μ° @GetMaaping
//, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping λ±μ μ΄λ
Έν
μ΄μ
μ¬μ© κ°λ₯
//value μμ± : ν΄λΌμ΄μΈνΈμ μμ² URL μ£Όμλ₯Ό μμ±κ°μΌλ‘ μ€μ
// => Front Controllerμ μν΄ λ±λ‘λ ν΄λΌμ΄μΈνΈ μμ² URL μ£Όμ(μλ³μ)λ‘ μμ² μ²λ¦¬ λ©μλκ°
//μλ νΈμΆλμ΄ ν΄λΌμ΄μΈνΈμ μμ² μ²λ¦¬
// => λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
// => λ€λ₯Έ μμ² μ²λ¦¬ λ©μλμ value μμ±κ°κ³Ό μμ² URL μ£Όμκ° μ€λ³΅λ κ²½μ° WAS μμμ μλ¬ λ°μ
@RequestMapping(value = "/hello")
public void hello() {//μμ² μ²λ¦¬ λ©μλ
//μμ² μ²λ¦¬ λͺ
λ Ή μμ± - Service κ°μ²΄μ λ©μλ νΈμΆ
logger.info("[/hello] νμ΄μ§ μμ² : HelloController ν΄λμ€μ hello() λ©μλ νΈμΆ");
}
@RequestMapping(value = "/helloViewName")
public String helloViewName() {
logger.info("[/helloViewName] νμ΄μ§ μμ² : HelloController ν΄λμ€μ helloViewName() λ©μλ νΈμΆ");
return "hello";
}
@RequestMapping(value = "/helloModelAndView")
public ModelAndView helloModelAndView() {
logger.info("[/helloModelAndView] νμ΄μ§ μμ² : HelloController ν΄λμ€μ helloModelAndView() λ©μλ νΈμΆ");
//ModelAndView κ°μ²΄ : μμ²μ λν μ²λ¦¬ κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νκ³ λ·°μ΄λ¦μ μ μ₯νκΈ° μν κ°μ²΄
//ModelAndView modelAndView=new ModelAndView();
//modelAndView.setViewName("hello");//Setter λ©μλλ₯Ό μ΄μ©νμ¬ λ·°μ΄λ¦ λ³κ²½
ModelAndView modelAndView=new ModelAndView("hello");//μμ±μλ₯Ό μ΄μ©νμ¬ λ·°μ΄λ¦ λ³κ²½
return modelAndView;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>Hello, Spring!!!</h1>
<hr>
</body>
</html>
μμ² μ²λ¦¬ λ©μλμ μν΄ μ²λ¦¬λ κ²°κ³Όλ₯Ό λ·°(JSP λ¬Έμ)μ μ 곡νλ λ°©λ²
μμ² μ²λ¦¬ λ©μλλ Front Controllerμ μν΄ μλ νΈμΆλλ λ©μλ
- ModelAndView κ°μ²΄μ μ²λ¦¬κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ μ 곡
- ModelAndView.addObject(String attributeName, Object attributeValue) : ModelAndView κ°μ²΄μ μμ±λͺ κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ (Request Scope)
modelAndView.addObject("mavName","νκΈΈλ");
- λ·°(JSP λ¬Έμ)μμλ EL ννμμΌλ‘ μμ±λͺ μ μ¬μ©νμ¬ μμ±κ°μ μ 곡λ°μ μΆλ ₯
- HttpServletRequest κ°μ²΄μ μ²λ¦¬κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ μ 곡
- HttpServletRequest.setAttribute(String attributeName, Object attributeValue) : HttpServletRequest κ°μ²΄μ μμ±λͺ κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ (Request Scope)
request.setAttribute("requestName", "μκΊ½μ ");
- Model κ°μ²΄μ μ²λ¦¬κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ μ 곡
- Model κ°μ²΄ : μ²λ¦¬κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ λ·°(View)μκ² μ 곡νκΈ° μν κ°μ²΄
- Model.addAttribute(String attributeName, Object attributeValue) : Model κ°μ²΄μ μμ±λͺ κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ (Request Scope)
package xyz.itwill10.controller;
@Controller
public class ResultController {
/*
@RequestMapping("/resultMAV")
public ModelAndView modelAndViewResult() {
ModelAndView modelAndView=new ModelAndView("result_display");
//ModelAndView.addObject(String attributeName, Object attributeValue)
// => ModelAndView κ°μ²΄μ μμ±λͺ
κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ - Request Scope
// => λ·°(JSP λ¬Έμ)μμλ EL ννμμΌλ‘ μμ±λͺ
μ μ¬μ©νμ¬ μμ±κ°μ μ 곡λ°μ μΆλ ₯
modelAndView.addObject("mavName","νκΈΈλ");
return modelAndView;
}
*/
//μμ² μ²λ¦¬ λ©μλλ Front Controllerμ μν΄ μλ νΈμΆλλ λ©μλ
// => μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μλ₯Ό μμ±νλ©΄ Front Controllerλ μ€νλ§ μ»¨ν
μ΄λλ‘λΆν°
//맀κ°λ³μμ μ μ₯ κ°λ₯ν μΉ κ΄λ ¨ κ°μ²΄λ₯Ό μ 곡λ°μ μ λ¬νμ¬ μ μ₯
@RequestMapping("/resultMAV")
public ModelAndView modelAndViewResult(ModelAndView modelAndView) {
modelAndView.setViewName("result_display");
modelAndView.addObject("mavName","νκΈΈλ");
return modelAndView;
}
@RequestMapping("/resultRequest")
public String requestResult(HttpServletRequest request) {
//HttpServletRequest.setAttribute(String attributeName, Object attributeValue)
// => HttpServletRequest κ°μ²΄μ μμ±λͺ
κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ - Request Scope
request.setAttribute("requestName", "μκΊ½μ ");
return "result_display";
}
@RequestMapping("/resultModel")
public String modelResult(Model model) {
//Model κ°μ²΄ : μ²λ¦¬κ²°κ³Όλ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ λ·°(View)μκ² μ 곡νκΈ° μν κ°μ²΄
//Model.addAttribute(String attributeName, Object attributeValue)
// => Model κ°μ²΄μ μμ±λͺ
κ³Ό μμ±κ°μ μ μ₯νκΈ° μν λ©μλ - Request Scope
model.addAttribute("modelName", "μ μ°μΉ");
return "result_display";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μ²λ¦¬κ²°κ³Ό μΆλ ₯νμ΄μ§</h1>
<hr>
<h2>ModelAndView = ${mavName }</h2>
<h2>HttpServletRequest = ${requestName }</h2>
<h2>Model = ${modelName }</h2>
</body>
</html>
μμ² μ²λ¦¬ ν΄λμ€μ λ©μλμ @ModelAttribute μ΄λ Έν μ΄μ μ¬μ©
package xyz.itwill10.controller;
@Controller
public class ModelController {
@RequestMapping("/display1")
public String displayOne(Model model) {
model.addAttribute("name", "νκΈΈλ");
//model.addAttribute("now", new SimpleDateFormat("yyyyλ
MMμ ddμΌ HHμ mmλΆ ssμ΄").format(new Date()));
return "model_display";
}
@RequestMapping("/display2")
public String displayTwo(Model model) {
model.addAttribute("name", "μκΊ½μ ");
//model.addAttribute("now", new SimpleDateFormat("yyyyλ
MMμ ddμΌ HHμ mmλΆ ssμ΄").format(new Date()));
return "model_display";
}
@RequestMapping("/display3")
public String displayThree(Model model) {
model.addAttribute("name", "μ μ°μΉ");
//model.addAttribute("now", new SimpleDateFormat("yyyyλ
MMμ ddμΌ HHμ mmλΆ ssμ΄").format(new Date()));
return "model_display";
}
//μμ€ν
μ νμ¬ λ μ§μ μκ°μ λ¬Έμμ΄λ‘ λ°ννλ λ©μλ
// => μμ² μ²λ¦¬ ν΄λμ€μ λ©μλμ @ModelAttribute μ΄λ
Έν
μ΄μ
μ¬μ©
//@ModelAttribute : λ©μλμ μν΄ λ°νλλ κ°μ²΄(κ°)μ μμ±κ°μΌλ‘ μ μ₯νμ¬ νμ¬ ν΄λμ€μ
//μμ±λ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°(JSP λ¬Έμ)μκ² μ 곡νκΈ° μν μ΄λ
Έν
μ΄μ
// => μμ² μ²λ¦¬ λ©μλμ μν΄ μλ΅λ λͺ¨λ λ·°μμ 곡ν΅μ μΌλ‘ μ¬μ©λλ κ°μ²΄(κ°)μ μ 곡ν λͺ©μ μΌλ‘ μ¬μ©
//value μμ± : λ·°μμ μμ±κ°μ μ¬μ©νκΈ° μν μ΄λ¦(μμ±λͺ
)μ μμ±κ°μΌλ‘ μ€μ
// => λ€λ₯Έ μμ±μ΄ μλ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
@ModelAttribute("now")
public String getNow() {
return new SimpleDateFormat("yyyyλ
MMμ ddμΌ HHμ mmλΆ ssμ΄").format(new Date());
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μ²λ¦¬κ²°κ³Ό μΆλ ₯νμ΄μ§</h1>
<hr>
<h2>μ΄λ¦ = ${name }</h2>
<h2>νμ¬ λ μ§μ μκ° = ${now }</h2>
</body>
</html>
method μμ± : RequestMethod μλ£ν(Enum)μ μμ(Constant) μ€ νλλ₯Ό μμ±κ°μΌλ‘ μ€μ
ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό [GET] λ°©μμΌλ‘ μμ²ν κ²½μ°μλ§ μμ² μ²λ¦¬ λ©μλ νΈμΆ
@RequestMapping(value = "/method", method = RequestMethod.GET)
ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό [POST] λ°©μμΌλ‘ μμ²ν κ²½μ°μλ§ μμ² μ²λ¦¬ λ©μλ νΈμΆ
@RequestMapping(value = "/method", method = RequestMethod.POST)
package xyz.itwill10.controller;
@Controller
public class MethodController {
//μ¬μ©μμκ² κ°μ μ
λ ₯λ°κΈ° μν JSP λ¬Έμμ ViewNameλ₯Ό λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => ν΄λΌμ΄μΈνΈμ μμ²λ°©μμ μκ΄μμ΄ λ¬΄μ‘°κ±΄ μμ² μ²λ¦¬ λ©μλ νΈμΆ
@RequestMapping("/method_input")
public String inputOne() {
return "method_input1";
}
//μ
λ ₯κ°μ λ°νλ°μ Request Scope μμ±κ°μΌλ‘ μ μ₯νκ³ μμ±κ°μ μΆλ ₯νκΈ° μν JSP λ¬Έμμ
//ViewNameλ₯Ό λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => ν΄λΌμ΄μΈνΈμ μμ²λ°©μμ μκ΄μμ΄ λ¬΄μ‘°κ±΄ μμ² μ²λ¦¬ λ©μλ νΈμΆ
@RequestMapping("/method_output")
public String outputOne(HttpServletRequest request, HttpServletResponse response) throws IOException {
//ν΄λΌμ΄μΈνΈκ° ν΄λΉ νμ΄μ§λ₯Ό GET λ°©μμΌλ‘ μμ²ν κ²½μ° - λΉμ μμ μΈ μμ²
if(request.getMethod().equals("GET")) {
//response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);//ν΄λΌμ΄μΈνΈμκ² 405 μλ¬μ½λ μ λ¬
response.sendRedirect("method_input");//ν΄λΌμ΄μΈνΈμκ² URL μ£Όμ μ λ¬ - URL μ£Όμλ‘ μ¬μμ²
return null;
}
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
request.setAttribute("name", name);
return "method_output";
}
//μ¬μ©μμκ² κ°μ μ
λ ₯λ°κΈ° μν JSP λ¬Έμμ ViewNameλ₯Ό λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό [GET] λ°©μμΌλ‘ μμ²ν κ²½μ°μλ§ μμ² μ²λ¦¬ λ©μλ νΈμΆ
//method μμ± : RequestMethod μλ£ν(Enum)μ μμ(Constant) μ€ νλλ₯Ό μμ±κ°μΌλ‘ μ€μ
// => RequestMethod μλ£ν(Enum)μ ν΄λΌμ΄μΈνΈμ μμ²λ°©μμ μμλ‘ μ 곡
// => method μμ±μΌλ‘ ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό μμ²νκΈ° μν μμ²λ°©μμ μ§μ κ°λ₯
// => method μμ±κ°μΌλ‘ μ€μ λ μμ²λ°©μμΈμ λ°©λ²μΌλ‘ νμ΄μ§λ₯Ό μμ²ν κ²½μ° 405 μλ¬μ½λ λ°μ
//[GET] λ°©μμΌλ‘ μμ² μ²λ¦¬ λ©μλλ₯Ό νΈμΆνκΈ° μν΄ @RequestMapping μ΄λ
Έν
μ΄μ
λμ
//@GetMapping μ΄λ
Έν
μ΄μ
μ¬μ© κ°λ₯
@RequestMapping(value = "/method", method = RequestMethod.GET)
public String inputTwo() {
return "method_input2";
}
//μ
λ ₯κ°μ λ°νλ°μ Request Scope μμ±κ°μΌλ‘ μ μ₯νκ³ μμ±κ°μ μΆλ ₯νκΈ° μν JSP λ¬Έμμ
//ViewNameλ₯Ό λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό [POST] λ°©μμΌλ‘ μμ²ν κ²½μ°μλ§ μμ² μ²λ¦¬ λ©μλ νΈμΆ
//μμ² μ²λ¦¬ λ©μλλ₯Ό νΈμΆνλ μμ² URL μ£Όμκ° κ°μλ μμ²λ°©μμ λ€λ₯΄κ² μ§μ νλ©΄ λ€λ₯Έ
//μμ² μ²λ¦¬ λ©μλλ‘ λ§€ν μ²λ¦¬
//[POST] λ°©μμΌλ‘ μμ² μ²λ¦¬ λ©μλλ₯Ό νΈμΆνκΈ° μν΄ @RequestMapping μ΄λ
Έν
μ΄μ
λμ
//@PostMapping μ΄λ
Έν
μ΄μ
μ¬μ© κ°λ₯
@RequestMapping(value = "/method", method = RequestMethod.POST)
public String outputTwo(HttpServletRequest request) throws UnsupportedEncodingException {
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
request.setAttribute("name", name);
return "method_output";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μ
λ ₯νμ΄μ§</h1>
<hr>
<form action="method_output" method="post">
μ΄λ¦ : <input type="text" name="name">
<button type="submit">μ μ‘</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μ
λ ₯νμ΄μ§</h1>
<hr>
<form action="method" method="post">
μ΄λ¦ : <input type="text" name="name">
<button type="submit">μ μ‘</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μΆλ ₯νμ΄μ§</h1>
<hr>
<h2>${name }λ, νμν©λλ€.</h2>
</body>
</html>
- μμ² μ²λ¦¬ λ©μλμ HttpServletRequest μΈν°νμ΄μ€λ‘ 맀κ°λ³μλ₯Ό μ μΈνλ©΄ Front Controllerμκ² ν΄λΌμ΄μΈνΈμ μμ²μ λ³΄κ° μ μ₯λ HttpServletRequest κ°μ²΄λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯
- HttpServletRequest κ°μ²΄μ λ©μλλ₯Ό νΈμΆνμ¬ νμ΄μ§ μμ²μ μ λ¬λ κ°μ λ°νλ°μ μ²λ¦¬
public String result(HttpServletRequest request){}
- μμ² μ²λ¦¬ λ©μλμμ νμ΄μ§ μμ²μ μ λ¬λλ κ°μ μ΄λ¦μΌλ‘ μμν λλ String ν΄λμ€μ 맀κ°λ³μλ₯Ό μ μΈνλ©΄ Front Controllerμ μν΄ μ λ¬κ°μ΄ 맀κ°λ³μμ μλμΌλ‘ μ μ₯λμ΄ μ 곡
- μ λ¬κ°μ μ΄λ¦κ³Ό 맀κ°λ³μμ μ΄λ¦μ΄ κ°μ§ μμ κ²½μ° String 맀κ°λ³μμλ [null] μ μ₯
- μμνμ 맀κ°λ³μμ μ λ¬λ κ°μ΄ μκ±°λ μλ£νμ΄ λ§μ§ μμ κ²½μ° 400 μλ¬μ½λ λ°μ
public String result(String food, Model model) {}
- μ λ¬κ°μ μ μ₯νκΈ° μν 맀κ°λ³μμ @RequestParam μ΄λ Έν μ΄μ μ¬μ© (κΆμ₯)
- @RequestParam : μ λ¬κ°μ 맀κ°λ³μμ μ μ₯νκΈ° μν μ΄λ Έν μ΄μ
- 맀κ°λ³μμ μ΄λ¦κ³Ό κ°μ μ΄λ¦μ μ λ¬κ°μ΄ μλ κ²½μ° 400 μλ¬ λ°μ
- 맀κ°λ³μμ λ°λμ μ λ¬κ°μ΄ μ μ₯λλλ‘ μ€μ νκΈ° μν μ΄λ Έν μ΄μ
public String result(@RequestParam String food, Model model){}
value μμ± : μ λ¬κ°μ μ΄λ¦μ μμ±κ°μΌλ‘ μ€μ
public String result(@RequestParam(value = "foodname") String food, Model model) {}
required μμ± : false(λ―Ένμ) λλ true(νμ - κΈ°λ³Έ) μ€ νλλ₯Ό μμ±κ°μΌλ‘ μ€μ
defaultValue μμ± : μ λ¬κ°κ³Ό 맀κ°λ³μμ΄ λ€λ₯Έ κ²½μ° μ¬μ©λ κΈ°λ³Έκ°μ μμ±κ°μΌλ‘ μ€μ
public String result(@RequestParam(defaultValue = "λμ₯μ°κ°") String food, Model model) {}
package xyz.itwill10.controller;
@Controller
public class ParamController {
@RequestMapping(value = "/param", method = RequestMethod.GET)
public String form() {
return "param_form";
}
/*
//μμ² μ²λ¦¬ λ©μλμ HttpServletRequest μΈν°νμ΄μ€λ‘ 맀κ°λ³μλ₯Ό μ μΈνλ©΄ Front Controllerμκ²
//ν΄λΌμ΄μΈνΈμ μμ²μ λ³΄κ° μ μ₯λ HttpServletRequest κ°μ²΄λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯
// => HttpServletRequest κ°μ²΄μ λ©μλλ₯Ό νΈμΆνμ¬ νμ΄μ§ μμ²μ μ λ¬λ κ°μ λ°νλ°μ μ²λ¦¬
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(HttpServletRequest request) throws UnsupportedEncodingException {
String food=request.getParameter("food");
request.setAttribute("food", food);
return "param_display";
}
*/
/*
//μμ² μ²λ¦¬ λ©μλμμ νμ΄μ§ μμ²μ μ λ¬λλ κ°μ μ΄λ¦κ³Ό κ°μ μ΄λ¦μΌλ‘ String μλ£νμ
//맀κ°λ³μλ₯Ό μ μΈνλ©΄ Front Controllerμ μν΄ μ λ¬κ°μ΄ 맀κ°λ³μμ μλμΌλ‘ μ μ₯λμ΄ μ 곡
// => μ λ¬κ°μ μ΄λ¦κ³Ό 맀κ°λ³μμ μ΄λ¦μ΄ κ°μ§ μμ κ²½μ° λ§€κ°λ³μμλ [null] μ μ₯
//ν΄λΌμ΄μΈνΈ μμ²μ μν΄ μΉνλ‘κ·Έλ¨μ΄ μ€νλκΈ° μ κ³Ό νμ μνλ λͺ
λ Ήμ μ€νν μ μλ
//νν°λ₯Ό [web.xml] νμΌμ λ±λ‘νμ¬ μ¬μ© κ°λ₯
// => ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²μ λν΄ μμ²μ λ³΄κ° μ μ₯λ 리νμ€νΈ λ©μΈμ§μ λͺΈμ²΄λΆμ λ¬Έμνμμ
//λ³κ²½νλ νν°κ° μ¬μ©λλλ‘ [web.xml] νμΌμ μ΄μ©νμ¬ μ€μ - μΈμ½λ© νν° μ μ©
// => νν°λ Front Controller μ μ μμΉλμ΄ μμ²κ³Ό μλ΅ κ΄λ ¨ μ 보 λ³κ²½ κ°λ₯ - WASμ μν΄ μ μ΄
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(String food, Model model) {
model.addAttribute("food", food);
return "param_display";
}
*/
/*
//μ λ¬κ°μ μ μ₯νκΈ° μν 맀κ°λ³μμ @RequestParam μ΄λ
Έν
μ΄μ
μ¬μ©
//@RequestParam : μ λ¬κ°μ 맀κ°λ³μμ μ μ₯νκΈ° μν μ΄λ
Έν
μ΄μ
// => 맀κ°λ³μμ μ΄λ¦κ³Ό κ°μ μ΄λ¦μ μ λ¬κ°μ΄ μλ κ²½μ° 400 μλ¬ λ°μ
// => 맀κ°λ³μμ λ°λμ μ λ¬κ°μ΄ μ μ₯λλλ‘ μ€μ νκΈ° μν μ΄λ
Έν
μ΄μ
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam String food, Model model) {
model.addAttribute("food", food);
return "param_display";
}
*/
/*
//value μμ± : μ λ¬κ°μ μ΄λ¦μ μμ±κ°μΌλ‘ μ€μ
// => @RequestParam μμ±μ μ¬μ©νμ¬ μ λ¬κ°μ μ΄λ¦μΌλ‘ κ°μ μ 곡λ°μ 맀κ°λ³μμ μ μ₯ κ°λ₯
// => μ λ¬κ°μ μ΄λ¦κ³Ό 맀κ°λ³μμ μ΄λ¦μ΄ λ€λ₯Έ κ²½μ° μ¬μ©
// => λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
//required μμ± : false(λ―Ένμ) λλ true(νμ - κΈ°λ³Έ) μ€ νλλ₯Ό μμ±κ°μΌλ‘ μ€μ
// => μ λ¬κ°μ΄ 맀κ°λ³μμ μ λ¬λμ΄ μ μ₯νλ νμ μ¬λΆλ₯Ό ꡬλΆνκΈ° μν μμ±
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam(value = "foodname", required = true) String food, Model model) {
model.addAttribute("food", food);
return "param_display";
}
*/
//defaultValue μμ± : μ λ¬κ°κ³Ό 맀κ°λ³μμ΄ λ€λ₯Έ κ²½μ° μ¬μ©λ κΈ°λ³Έκ°μ μμ±κ°μΌλ‘ μ€μ
// => μ λ¬κ°μ΄ μλ κ²½μ°μλ 맀κ°λ³μμ null λμ μ μ₯λ κΈ°λ³Έκ°μΌλ‘ μ¬μ©
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam(value = "foodname", defaultValue = "λμ₯μ°κ°") String food, Model model) {
model.addAttribute("food", food);
return "param_display";
}
}
filter : νν° ν΄λμ€λ₯Ό νν°(Filter)λ‘ λ±λ‘νκΈ° μν μ리먼νΈ
filter-mapping : νν°κ° μ€νλκΈ° μν μΉνλ‘κ·Έλ¨μ μμ² URL μ£Όμμ ν¨ν΄μ λ±λ‘νκΈ° μν μ리먼νΈ
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="https://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_2_5.xsd">
<!-- filter : νν° ν΄λμ€λ₯Ό νν°(Filter)λ‘ λ±λ‘νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- => νν°(Filter) : μΉνλ‘κ·Έλ¨ μ€ν μ κ³Ό νμ μ€νλ λͺ
λ Ήμ μ 곡 -->
<filter>
<!-- filter-name : νν°λ₯Ό ꡬλΆνκΈ° μν μλ³μλ₯Ό μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<filter-name>encodingFilter</filter-name>
<!-- filter-class : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ κ°μ²΄λ‘ μμ±λμ΄ μ€νλ νν° ν΄λμ€μ μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<!-- CharacterEncodingFilter : 리νμ€νΈ λ©μΈμ§ λͺΈμ²΄λΆμ μ μ₯λ κ°μ λν λ¬Έμννλ₯Ό λ³κ²½νκΈ° μν νν° ν΄λμ€ -->
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- init-param μ리먼νΈλ₯Ό μ¬μ©νμ¬ CharacterEncodingFilter ν΄λμ€μ μν΄ λ³κ²½νκ³ μ
νλ λ¬Έμνν(μΊλ¦ν°μ
)μ μ 곡 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- filter-mapping : νν°κ° μ€νλκΈ° μν μΉνλ‘κ·Έλ¨μ μμ² URL μ£Όμμ ν¨ν΄μ λ±λ‘νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<filter-mapping>
<!-- filter-name : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ μ€νλ νν°μ μλ³μλ₯Ό μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<filter-name>encodingFilter</filter-name>
<!-- url-pattern : νν°κ° μ€νλκΈ° μν μΉνλ‘κ·Έλ¨μ μμ² URL μ£Όμμ ν¨ν΄μ μ€μ νκΈ° μν μλ¦¬λ¨ΌνΈ -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μ
λ ₯νμ΄μ§</h1>
<hr>
<form action="param" method="post">
<!-- λ΄κ° μ’μνλ μμ : <input type="text" name="food"> -->
λ΄κ° μ’μνλ μμ : <input type="text" name="foodname">
<button type="submit">μ
λ ₯μλ£</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>μΆλ ₯νμ΄μ§</h1>
<hr>
<h2>μ€λμ μ μ¬μ [${food }]λ‘ κ²°μ νκ² μ΅λλ€.</h2>
</body>
</html>
- @RequestParam μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μ λ¬κ°κ³Ό κ°μ μ΄λ¦μ 맀κ°λ³μμ μ λ¬κ°μ μ 곡λ°μ μμ² μ²λ¦¬ λ©μλμμ μ¬μ©
- @RequestParam μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ λ§€κ°λ³μμ κ°μ μ΄λ¦μΌλ‘ μ λ¬λλ κ°μ΄ μλ κ²½μ° 400 μλ¬μ½λ λ°μ
public String join(@RequestParam String id, @RequestParam String passwd){}
- @ModelAttribute μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μ λ¬κ°κ³Ό κ°μ μ΄λ¦μ 맀κ°λ³μμ μ λ¬κ°μ μ 곡λ°μ μμ² μ²λ¦¬ λ©μλμμ μ¬μ©
- @ModelAttribute μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ λ§€κ°λ³μμ μ μ₯λ κ°μ μμ±κ°μΌλ‘ μ μ₯νμ¬ λ·°(View) μ 곡
- @ModelAttribute : κ°μ²΄(κ°)μ λ·°μκ² μ 곡νκΈ° μν μ΄λ Έν μ΄μ
- λ©μλμ @ModelAttribute μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ λ©μλμ λ°νκ°μ μμ±κ°μΌλ‘ μ μ₯νμ¬ μμ² μ²λ¦¬ ν΄λμ€μ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡
- 맀κ°λ³μμ @ModelAttribute μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ 맀κ°λ³μμ μ μ₯λ κ°μ μμ±κ°μΌλ‘ μ μ₯νμ¬ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡
- value μμ± : λ·°(JSP)μμ μμ±κ°μ μ¬μ©νκΈ° μν μμ±λͺ μ μμ±κ°μΌλ‘ μ€μ
- λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
public String join(@ModelAttribute(value = "id") String id, @ModelAttribute("passwd") String passwd){}
Member member=new Member(); member.setId(id); model.addAttribute("member", member);
model.addAttribute(member);
- μμ² νμ΄μ§μ μ λ¬κ°μ΄ μλ κ²½μ° μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μ μλ£νμ VO ν΄λμ€(DTO ν΄λμ€)λ‘ μμ±νλ©΄ Front Controllerλ VO ν΄λμ€λ‘ κ°μ²΄λ₯Ό μμ±νμ¬ λ§€κ°λ³μμ μ λ¬νμ¬ μ μ₯
- VO ν΄λμ€μ κ°μ²΄λ μ λ¬κ°μ μ΄λ¦κ³Ό κ°μ νλμ μ λ¬κ°μ μ 곡λ°μ μ μ₯
public String join(@ModelAttribute Member member) {}
- μμ² νμ΄μ§μ μ λ¬κ°μ΄ μλ κ²½μ° μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μ μλ£νμ Map μΈν°νμ΄μ€λ‘ μμ±νλ©΄ Front Controllerλ Map κ°μ²΄λ₯Ό μμ±νμ¬ λ§€κ°λ³μμ μ λ¬νμ¬ μ μ₯
- Map κ°μ²΄μ μνΈλ¦¬μλ μ λ¬κ°μ μ΄λ¦μ 맡ν€(MapKey)λ‘ μ 곡λ°κ³ μ λ¬κ°μ 맡κ°(MapValue)λ‘ μ 곡λ°μ μ μ₯
- Map μΈν°νμ΄μ€λ‘ μμ±λ 맀κ°λ³μμλ λ°λμ @RequestParam μ΄λ Έν μ΄μ μ μ¬μ©ν΄μΌλ§ Map κ°μ²΄μ 맡κ°μΌλ‘ μ λ¬κ°μ μ 곡λ°μ μ¬μ© κ°λ₯
public String join(@RequestParam Map<String, Object> map, Model model) {}
package xyz.itwill10.controller;
@Controller
public class JoinController {
@RequestMapping(value = "join", method=RequestMethod.GET)
public String join() {
return "join_form";
}
/*
//μ λ¬κ°μ μ 곡λ°μ Request Scope μμ±κ°μΌλ‘ μ μ₯νκ³ μμ±κ°μ μΆλ ₯νκΈ° μν JSP λ¬Έμμ
//λ·°μ΄λ¦μ λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => μ λ¬κ°κ³Ό κ°μ μ΄λ¦μ 맀κ°λ³μμ μ λ¬κ°μ μ 곡λ°μ μμ² μ²λ¦¬ λ©μλμμ μ¬μ©
// => @RequestParam μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ λ§€κ°λ³μμ κ°μ μ΄λ¦μΌλ‘ μ λ¬λλ κ°μ΄ μλ κ²½μ° 400 μλ¬μ½λ λ°μ
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@RequestParam String id, @RequestParam String passwd
,@RequestParam String name,@RequestParam String email, Model model) {
model.addAttribute("id", id);
model.addAttribute("passwd", passwd);
model.addAttribute("name", name);
model.addAttribute("email", email);
return "join_display";
}
*/
/*
//μ λ¬κ°μ μ 곡λ°μ Request Scope μμ±κ°μΌλ‘ μ μ₯νκ³ μμ±κ°μ μΆλ ₯νκΈ° μν JSP λ¬Έμμ
//λ·°μ΄λ¦μ λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => μ λ¬κ°κ³Ό κ°μ μ΄λ¦μ 맀κ°λ³μμ μ λ¬κ°μ μ 곡λ°μ μμ² μ²λ¦¬ λ©μλμμ μ¬μ©
// => @ModelAttribute μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ λ§€κ°λ³μμ μ μ₯λ κ°μ μμ±κ°μΌλ‘ μ μ₯νμ¬ λ·°(View) μ 곡
//@ModelAttribute : κ°μ²΄(κ°)μ λ·°μκ² μ 곡νκΈ° μν μ΄λ
Έν
μ΄μ
// => λ©μλμ @ModelAttribute μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ©΄ λ©μλμ λ°νκ°μ μμ±κ°μΌλ‘ μ μ₯νμ¬
//μμ² μ²λ¦¬ ν΄λμ€μ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡
// => 맀κ°λ³μμ @ModelAttribute μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ©΄ 맀κ°λ³μμ μ μ₯λ κ°μ μμ±κ°μΌλ‘
//μ μ₯νμ¬ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡
//value μμ± : λ·°(JSP)μμ μμ±κ°μ μ¬μ©νκΈ° μν μμ±λͺ
μ μμ±κ°μΌλ‘ μ€μ
// => λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
//@ModelAttribute μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ©΄ 맀κ°λ³μμ κ°μ μ΄λ¦μ μ λ¬κ°μ΄ μμ΄λ 400 μλ¬μ½λ λ―Έλ°μ
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@ModelAttribute("id") String id, @ModelAttribute("passwd") String passwd
,@ModelAttribute("name") String name,@ModelAttribute("email") String email) {
return "join_display";
}
*/
/*
//μ λ¬κ°μ 맀κ°λ³μλ‘ μ 곡λ°μ κ°μ²΄μ νλκ°μΌλ‘ μ μ₯νκ³ κ°μ²΄λ₯Ό Request Scope μμ±κ°μΌλ‘
//μ μ₯νκ³ μμ±κ°μ μΆλ ₯νκΈ° μν JSP λ¬Έμμ λ·°μ΄λ¦μ λ°ννλ μμ² μ²λ¦¬ λ©μλ
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@RequestParam String id, @RequestParam String passwd
,@RequestParam String name,@RequestParam String email, Model model) {
Member member=new Member();
member.setId(id);
member.setPasswd(passwd);
member.setName(name);
member.setEmail(email);
//model.addAttribute("member", member);
//Model.addAttribute(Object attributeValue) : Model κ°μ²΄μ μμ±λͺ
κ³Ό μμ±κ°(κ°μ²΄)μ
//μ μ₯νκΈ° μν λ©μλ - Request Scope
// => μμ±κ°μ μλ£ν(ν΄λμ€)μ μμ±λͺ
μΌλ‘ μλ μ€μ - 첫문μλ μλ¬Έμλ‘ λ³ν
// => μμ±κ°μΌλ‘ μμκ°(Wrapper κ°μ²΄) λλ String κ°μ²΄ μ μ₯ λΆκ°
model.addAttribute(member);
return "join_display";
}
*/
/*
//μμ² νμ΄μ§μ μ λ¬κ°μ΄ μλ κ²½μ° μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μ μλ£νμ VO ν΄λμ€(DTO ν΄λμ€)λ‘
//μμ±νλ©΄ Front Controllerλ VO ν΄λμ€λ‘ κ°μ²΄λ₯Ό μμ±νμ¬ λ§€κ°λ³μμ μ λ¬νμ¬ μ μ₯
// => VO ν΄λμ€μ κ°μ²΄λ μ λ¬κ°μ μ΄λ¦κ³Ό κ°μ νλμ μ λ¬κ°μ μ 곡λ°μ μ μ₯
//Command κ°μ²΄ : μ λ¬κ°μ μ 곡λ°μ νλμ μ μ₯λ κ°μ²΄λ‘ μμ±κ°μΌλ‘ μ μ₯νμ¬ μμ² μ²λ¦¬
//λ©μλμ λ·°μμ μ¬μ©λ μ μλλ‘ μ 곡
// => @ModelAttribute μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±κ°μΌλ‘ μ μ₯ν΄ λ·°μκ² μ 곡 - 첫문μλ μλ¬Έμλ‘ λ³ν
// => @ModelAttribute μ΄λ
Έν
μ΄μ
μλ΅ κ°λ₯
// => value μμ±μ μλ΅νλ©΄ Command κ°μ²΄μ μλ£ν(ν΄λμ€)μ΄ μμ±λͺ
μΌλ‘ μλ μ€μ
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@ModelAttribute Member member) {
return "join_display";
}
*/
/*
//@ModelAttribute μ΄λ
Έν
μ΄μ
μ value μμ±μ μ¬μ©νμ¬ λ·°μκ² μ 곡λ μμ±κ°μ μμ±λͺ
μ λ³κ²½ κ°λ₯
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@ModelAttribute(value = "mem") Member member, Model model) {
if(member.getId().equals("abc123")) {//μμ΄λκ° μ€λ³΅λ κ²½μ°
model.addAttribute("message", "μ΄λ―Έ μ¬μ©μ€μΈ μμ΄λλ₯Ό μ
λ ₯ νμμ΅λλ€.");
return "join_form";//μ
λ ₯νμ΄μ§ μ΄λ
}
return "join_display";
}
*/
//μμ² νμ΄μ§μ μ λ¬κ°μ΄ μλ κ²½μ° μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μ μλ£νμ Map μΈν°νμ΄μ€λ‘
//μμ±νλ©΄ Front Controllerλ Map κ°μ²΄λ₯Ό μμ±νμ¬ λ§€κ°λ³μμ μ λ¬νμ¬ μ μ₯
// => Map κ°μ²΄λ μ λ¬κ°μ μ΄λ¦μ 맡ν€(MapKey - String)λ‘ μ€μ νμ¬ μ λ¬κ°μ 맡κ°
//(MapValue - String)λ‘ μ 곡λ°μ μνΈλ¦¬λ‘ μΆκ°
// => Map μΈν°νμ΄μ€λ‘ μμ±λ 맀κ°λ³μμλ λ°λμ @RequestParam μ΄λ
Έν
μ΄μ
μ μ¬μ©ν΄μΌλ§
//Map κ°μ²΄μ 맡κ°μΌλ‘ μ λ¬κ°μ μ 곡λ°μ μ¬μ© κ°λ₯
@RequestMapping(value = "join", method=RequestMethod.POST)
public String join(@RequestParam Map<String, String> map, Model model) {
model.addAttribute("mem", map);
return "join_display";
}
}
package xyz.itwill10.dto;
import lombok.Data;
@Data
public class Member {
private String id;
private String passwd;
private String name;
private String email;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>νμκ°μ
</h1>
<hr>
<form action="join" method="post">
<table>
<tr>
<td>μμ΄λ</td>
<td><input type="text" name="id" value="${mem.id }"></td>
</tr>
<tr>
<td>λΉλ°λ²νΈ</td>
<td><input type="password" name="passwd" value="${mem.passwd }"></td>
</tr>
<tr>
<td>μ΄λ¦</td>
<td><input type="text" name="name" value="${mem.name }"></td>
</tr>
<tr>
<td>μ΄λ©μΌ</td>
<td><input type="text" name="email" value="${mem.email }"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">νμκ°μ
</button></td>
</tr>
</table>
</form>
<p style="color: red;">${message }</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>νμκ°μ
νμΈ</h1>
<hr>
<%--
<ul>
<li>μμ΄λ = ${id }</li>
<li>λΉλ°λ²νΈ = ${passwd }</li>
<li>μ΄λ¦ = ${name }</li>
<li>μ΄λ©μΌ = ${email }</li>
</ul>
--%>
<%--
<ul>
<li>μμ΄λ = ${member.id }</li>
<li>λΉλ°λ²νΈ = ${member.passwd }</li>
<li>μ΄λ¦ = ${member.name }</li>
<li>μ΄λ©μΌ = ${member.email }</li>
</ul>
--%>
<ul>
<li>μμ΄λ = ${mem.id }</li>
<li>λΉλ°λ²νΈ = ${mem.passwd }</li>
<li>μ΄λ¦ = ${mem.name }</li>
<li>μ΄λ©μΌ = ${mem.email }</li>
</ul>
</body>
</html>
μ λ¬κ°μ μ 곡λ°μ μΈμ¦ μ²λ¦¬ ν κΆν κ΄λ ¨ μ 보λ₯Ό Session Scope μμ±κ°μΌλ‘ μ μ₯νκ³ λ‘κ·ΈμΈ μ±κ³΅ λ©μΈμ§λ₯Ό μΆλ ₯νλ JSP λ¬Έμμ λ·°μ΄λ¦μ λ°ννλ μμ² μ²λ¦¬ λ©μλ
public String login(@RequestParam String id, HttpSession session, Model model) {}
model.addAttribute("message", "μμ΄λ λλ λΉλ°λ²νΈμ μλͺ» μ
λ ₯ νμμ΅λλ€.");
session.setAttribute("loginId", id);
μ λ¬κ°μ Command κ°μ²΄λ‘ μ 곡λ°μ μ¬μ©
public String login(@ModelAttribute Member member, HttpSession session, Model model) {}
package xyz.itwill10.controller;
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "login_form";
}
/*
//μ λ¬κ°μ μ 곡λ°μ μΈμ¦ μ²λ¦¬ ν κΆν κ΄λ ¨ μ 보λ₯Ό Session Scope μμ±κ°μΌλ‘ μ μ₯νκ³
//λ‘κ·ΈμΈ μ±κ³΅ λ©μΈμ§λ₯Ό μΆλ ₯νλ JSP λ¬Έμμ λ·°μ΄λ¦μ λ°ννλ μμ² μ²λ¦¬ λ©μλ
// => μ λ¬κ°μ String 맀κ°λ³μμ νλμ© μ 곡λ°μ μ¬μ© κ°λ₯
// => Session Scope μμ±κ°μ μ μ₯νκΈ° μν΄ λ§€κ°λ³μλ₯Ό μ΄μ©νμ¬ HttpSession κ°μ²΄λ₯Ό μ 곡λ°μ μ¬μ©
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam String id, @RequestParam String passwd
, HttpSession session, Model model) {
if(!id.equals("abc123") || !passwd.equals("123456")) {//μΈμ¦ μ€ν¨
//μλ¬ κ΄λ ¨ μ 보λ₯Ό Request Scope μμ±κ° μ μ₯ - μ
λ ₯νμ΄μ§(JSP)μμ μΆλ ₯ κ°λ₯
//Request Scope : νμ¬ μ€νμ€μΈ μμ² μ²λ¦¬ λ©μλμ ν¬μλ μ΄λλλ λ·°μμλ§ μμ±κ°λ§ μ 곡λ°μ μ¬μ©
model.addAttribute("message", "μμ΄λ λλ λΉλ°λ²νΈμ μλͺ» μ
λ ₯ νμμ΅λλ€.");
model.addAttribute("id",id);
return "login_form";//μ
λ ₯νμ΄μ§ μ΄λ
}
//μΈμ¦ μ±κ³΅ - κΆν κ΄λ ¨ μ 보λ₯Ό Session Scope μμ±κ° μ μ₯
//Session Scope : λμΌν μΈμ
μ μ¬μ©νλ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μμ μμ±κ°μ μ 곡λ°μ μ¬μ© κ°λ₯
session.setAttribute("loginId", id);
return "login_display";
}
*/
//μ λ¬κ°μ Command κ°μ²΄λ‘ μ 곡λ°μ μ¬μ©
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute Member member, HttpSession session, Model model) {
if(!member.getId().equals("abc123") || !member.getPasswd().equals("123456")) {//μΈμ¦ μ€ν¨
model.addAttribute("message", "μμ΄λ λλ λΉλ°λ²νΈμ μλͺ» μ
λ ₯ νμμ΅λλ€.");
return "login_form";//μ
λ ₯νμ΄μ§ μ΄λ
}
session.setAttribute("loginId", member.getId());
return "login_display";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>λ‘κ·ΈμΈ</h1>
<hr>
<form action="login" method="post">
<table>
<tr>
<td>μμ΄λ</td>
<%-- <td><input type="text" name="id" value="${id }"></td> --%>
<td><input type="text" name="id" value="${member.id }"></td>
</tr>
<tr>
<td>λΉλ°λ²νΈ</td>
<td><input type="password" name="passwd"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">λ‘κ·ΈμΈ</button></td>
</tr>
</table>
</form>
<p style="color: red;">${message }</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>λ‘κ·ΈμΈ μ±κ³΅</h1>
<hr>
<h2>${loginId }λ, νμν©λλ€.</h2>
</body>
</html>
@SessionAttributes : Model κ°μ²΄λ₯Ό μ¬μ©νμ¬ μ μ₯λλ μμ±κ°μ νμ¬ μμ² μ²λ¦¬ ν΄λμ€(Controllerν΄λμ€)μ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡νλ μ΄λ Έν μ΄μ
model.addAttribute(hewon);//μμ±λͺ
μλ΅ κ°λ₯
package xyz.itwill10.controller;
@Controller
//@SessionAttributes : Model κ°μ²΄λ₯Ό μ¬μ©νμ¬ μ μ₯λλ μμ±κ°μ νμ¬ μμ² μ²λ¦¬ ν΄λμ€(Controller
//ν΄λμ€)μ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μ 곡νλ μ΄λ
Έν
μ΄μ
// => Model κ°μ²΄λ₯Ό μ¬μ©νμ¬ μ μ₯λλ μμ±κ°μ Request Scope μμ±κ°μ΄ μλ μ νμ μΈ Session Scope
//μμ±κ°μΌλ‘ λ³ννμ¬ μ 곡νλ μ΄λ
Έν
μ΄μ
// => λ³κ²½ μ²λ¦¬μ νΈμΆλλ μμ² μ²λ¦¬ λ©μλμμ λ³κ²½ν κ°μ²΄λ₯Ό κ²μνμ§ μκ³ λ·°μμλ κ°μ
//μ λ¬νμ§ μλλ‘ μ νμ μΈ Session Scope μμ±κ° μ¬μ©
//value μμ± : μ νμ μΈ Session Scope μμ±κ°μΌλ‘ λ³ννκΈ° μν μμ±λͺ
μ μμ±κ°μΌλ‘ μ€μ
// => λ€λ₯Έ μμ±μ΄ μλ κ²½μ° μμ±κ°λ§ μ€μ κ°λ₯
@SessionAttributes("hewon")
public class SessionController {
//μμ΄λλ₯Ό μ λ¬λ°μ νμμ 보λ₯Ό κ²μνμ¬ λ°ννλ λ©μλ - Service ν΄λμ€μ λ©μλ
private Hewon getHewon(String id) {
Hewon hewon=new Hewon();
hewon.setId(id);
hewon.setName("νκΈΈλ");
hewon.setEmail("abc@itwill.xyz");
return hewon;
}
//μμ΄λλ₯Ό μ λ¬λ°μ νμμ 보λ₯Ό λ·°μκ² μ 곡νκΈ° μν μμ² μ²λ¦¬ λ©μλ
// => μμ² μ²λ¦¬ λ©μλμ μν΄ μ 곡λ νμμ λ³΄κ° μΆλ ₯λλλ‘ λ·° μμ±
@RequestMapping("/hewon_view")
public String view(@RequestParam(defaultValue = "abc123") String id, Model model) {
//Service ν΄λμ€μ λ©μλλ₯Ό νΈμΆνμ¬ μμ΄λλ₯Ό μ λ¬ν΄ ν΄λΉ μμ΄λμ νμμ 보λ₯Ό
//κ²μνμ¬ λ°νλ°μ μ μ₯
Hewon hewon=getHewon(id);
//Model κ°μ²΄λ₯Ό μ¬μ©νμ¬ κ²μλ νμμ 보λ₯Ό μμ±κ°μΌλ‘ μ μ₯νμ¬ λ·°μκ² μ 곡
// => μμ² μ²λ¦¬ λ©μλμ λ·°μκ²λ§ μμ±κ°μ μ 곡νμ¬ μΆλ ₯ μ²λ¦¬ - Request Scope
//model.addAttribute("hewon", hewon);
//μμ±κ°μΌλ‘ μ μ₯λ κ°μ²΄μ μλ£ν(ν΄λμ€μ μ΄λ¦ - 첫문μλ μλ¬Έμλ‘ λ³ν)μ΄ μλμΌλ‘ μμ±λͺ
μΌλ‘ μ€μ
//@SessionAttributes μ΄λ
Έν
μ΄μ
μ μν΄ Model κ°μ²΄λ‘ μ μ₯λ μμ±κ°μ μ νμ μΈ Session Scope
//μμ±κ°μΌλ‘ λ³νλμ΄ νμ¬ μμ² μ²λ¦¬ ν΄λμ€μ λͺ¨λ μμ² μ²λ¦¬ λ©μλμ λ·°μκ² μμ±κ° μ 곡
model.addAttribute(hewon);//μμ±λͺ
μλ΅ κ°λ₯
return "hewon_view";
}
/*
//μμ΄λλ₯Ό μ λ¬λ°μ νμμ 보λ₯Ό λ·°μκ² μ 곡νκΈ° μν μμ² μ²λ¦¬ λ©μλ
// => μμ² μ²λ¦¬ λ©μλμ μν΄ μ 곡λ νμμ 보λ₯Ό μ
λ ₯νκ·Έμ μ΄κΈ°κ°μΌλ‘ μ¬μ©λλλ‘ λ·° μμ±
@RequestMapping(value="/hewon_update", method = RequestMethod.GET)
public String update(@RequestParam(defaultValue = "abc123") String id, Model model) {
Hewon hewon=getHewon(id);
model.addAttribute(hewon);
return "hewon_update";
}
*/
//@SessionAttributes μ΄λ
Έν
μ΄μ
μ μν΄ μ 곡λ νμμ 보λ₯Ό μμ² μ²λ¦¬ λ©μλμ λ·°μμ μ¬μ© κ°λ₯
// => μμ΄λλ₯Ό μ λ¬λ°μ νμμ 보λ₯Ό κ²μνλ λͺ
λ Ήκ³Ό λ·°μκ² μ 곡νκΈ° μν μμ±κ° μ μ₯ λΆνμ
@RequestMapping(value="/hewon_update", method = RequestMethod.GET)
public String update() {
return "hewon_update";
}
//νμμ 보λ₯Ό μ λ¬λ°μ λ³κ²½λ νμμ 보λ₯Ό λ·°μκ² μ 곡νλ μμ² μ²λ¦¬ λ©μλ
// => μμ² μ²λ¦¬ λ©μλμ 맀κ°λ³μμλ Command κ°μ²΄λ‘ @SessionAttributes μ΄λ
Έν
μ΄μ
μ μν΄
//μ 곡λ νμμ 보λ₯Ό μ λ¬λ°μ μ μ₯νκ³ λ³κ²½κ°μΌλ‘ νλκ°λ§ λ³κ²½ν΄ μ¬μ©
//μμ² μ²λ¦¬ λ©μλμ SessionStatus μΈν°νμ΄μ€λ‘ 맀κ°λ³μλ₯Ό μ μΈνλ©΄ SessionStatus κ°μ²΄λ₯Ό
//μ 곡λ°μ μ¬μ© κ°λ₯
// => SessionStatus κ°μ²΄ : @SessionAttributes μ΄λ
Έν
μ΄μ
μ μν΄ μ 곡λ μ νμ μΈ Session
//Scope μμ±κ°μ μνμ 보λ₯Ό μ μ₯νκΈ° μν κ°μ²΄
@RequestMapping(value="/hewon_update", method = RequestMethod.POST)
public String update(@ModelAttribute Hewon hewon, SessionStatus status) {
//SessionStatus.setComplete() : @SessionAttributes μ΄λ
Έν
μ΄μ
μ μν΄ μ 곡λ μ νμ μΈ
//Session Scope μμ±κ°μ μ κ±°νλ λ©μλ
status.setComplete();
return "hewon_result";
}
}
νμμ 보 λ³κ²½νμ΄μ§λ₯Ό μμ²ν μ μλ λ§ν¬ μ 곡 (μμ΄λ μ λ¬)
@SessionAttributes μ΄λ Έν μ΄μ μ μ¬μ©ν κ²½μ° μμ΄λλ₯Ό μ λ¬νμ§ μμλ νμμ 보 λ³κ²½ νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμμ νμμ 보λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>νμμ 보</h1>
<hr>
<ul>
<li>μμ΄λ = ${hewon.id }</li>
<li>μ΄λ¦ = ${hewon.name }</li>
<li>μ΄λ©μΌ = ${hewon.email }</li>
</ul>
<%-- <button type="button" onclick="location.href='hewon_update?id=${hewon.id}';">νμμ 보λ³κ²½</button> --%>
<%-- @SessionAttributes μ΄λ
Έν
μ΄μ
μ μ¬μ©ν κ²½μ° μμ΄λλ₯Ό μ λ¬νμ§ μμλ νμμ 보 λ³κ²½
νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμμ νμμ 보λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯ --%>
<button type="button" onclick="location.href='hewon_update';">νμμ 보λ³κ²½</button>
</body>
</html>
νμμ 보λ₯Ό λ³κ²½νκΈ° μν΄ hidden νμ μ μ λ ₯νκ·Έλ‘ μμ΄λ μ λ¬
@SessionAttributes μ΄λ Έν μ΄μ μ μ¬μ©ν κ²½μ° μμ΄λλ₯Ό μ λ¬νμ§ μμλ νμμ 보 λ³κ²½νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμμ νμμ 보λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>νμμ 보λ³κ²½</h1>
<hr>
<form action="hewon_update" method="post">
<!-- νμμ 보λ₯Ό λ³κ²½νκΈ° μν΄ hidden νμ
μ μ
λ ₯νκ·Έλ‘ μμ΄λ μ λ¬ -->
<!-- => μμ΄λλ₯Ό μ
λ ₯νκ·Έμ μ΄κΈ°κ°μΌλ‘ μ€μ νμ¬ read-only μμ±μ μ¬μ©ν΄ μ λ¬ κ°λ₯ -->
<%-- @SessionAttributes μ΄λ
Έν
μ΄μ
μ μ¬μ©ν κ²½μ° μμ΄λλ₯Ό μ λ¬νμ§ μμλ νμμ 보 λ³κ²½
νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμμ νμμ 보λ₯Ό μ 곡λ°μ μ¬μ© κ°λ₯ --%>
<%-- <input type="hidden" name="id" value="${hewon.id }"> --%>
<table>
<tr>
<td>μμ΄λ</td>
<td>${hewon.id }</td>
</tr>
<tr>
<td>μ΄λ¦</td>
<td><input type="text" name="name" value="${hewon.name }"></td>
</tr>
<tr>
<td>μ΄λ©μΌ</td>
<td><input type="text" name="email" value="${hewon.email }"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">νμλ³κ²½</button></td>
</tr>
</table>
</form>
</body>
</html>
Front Controllerλ μ 곡λ°μ λ·°μ΄λ¦μ InternalResourceViewResolver κ°μ²΄λ₯Ό μ¬μ©νμ¬ JSP λ¬Έμλ‘ λ³ννκ³ JSP λ¬Έμλ‘ ν¬μλ μ΄λνμ¬ μλ΅ μ²λ¦¬
λ·°μ΄λ¦μ redirect μ λμ¬λ₯Ό μ¬μ©νμ¬ URL μ£Όμλ₯Ό λ°ννλ©΄ Front Controllerλ λ°νλ°μ λ·°μ΄λ¦μ URL μ£Όμλ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ (리λ€μ΄λ νΈ μ΄λ)
return "redirect:/redirect_move";
RedirectAttributes κ°μ²΄ : 리λ€μ΄λ νΈ μ΄λλλ νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμ λ·°μμ μ¬μ© κ°λ₯ν Request Scope μμ±κ°μ μ 곡νλ κ°μ²΄
public String redirect(RedirectAttributes attributes) {attributes.addFlashAttribute("name", "μκΊ½μ ");}
package xyz.itwill10.controller;
@Controller
public class RedirectController {
@RequestMapping("/forward_move")
public String forward(Model model) {
//Model κ°μ²΄λ₯Ό μ΄μ©νμ¬ λ·°(View)μκ² μ 곡ν κ°μ²΄λ₯Ό μμ±κ°μΌλ‘ μ μ₯ - Request Scope
model.addAttribute("name", "νκΈΈλ");
//λ·°λ₯Ό μμ±νκΈ° μν λ·°μ΄λ¦(ViewName) λ°ν
// => Front Controllerλ μ 곡λ°μ λ·°μ΄λ¦μ InternalResourceViewResolver κ°μ²΄λ₯Ό μ¬μ©νμ¬
//JSP λ¬Έμλ‘ λ³ννκ³ JSP λ¬Έμλ‘ ν¬μλ μ΄λνμ¬ μλ΅ μ²λ¦¬
//ν¬μλ μ΄λ : μλ² λ΄λΆμμ νμ¬ μΉνλ‘κ·Έλ¨μ μ€λ λλ₯Ό λ€λ₯Έ μΉνλ‘κ·Έλ¨μΌλ‘ μ΄λνμ¬ λͺ
λ Ή μ€ν
// => ν΄λΌμ΄μΈνΈμ μμ² URL μ£Όμλ λ³κ²½λμ§ μμΌλ©° Request Scope μμ±κ°μ κ°μ²΄λ‘ μ 곡λ°μ μ¬μ© κ°λ₯
return "display_forward";
}
/*
@RequestMapping("/redirect_move")
public String redirect(Model model) {
model.addAttribute("name", "μκΊ½μ ");
return "display_redirect";
}
@RequestMapping("/redirect")
public String redirect() {
//λ·°μ΄λ¦μ redirect μ λμ¬λ₯Ό μ¬μ©νμ¬ URL μ£Όμλ₯Ό λ°ννλ©΄ Front Controllerλ
//λ°νλ°μ λ·°μ΄λ¦μ URL μ£Όμλ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ - 리λ€μ΄λ νΈ μ΄λ
// => ν΄λΌμ΄μΈνΈμκ² URL μ£Όμλ₯Ό μ λ¬νμ¬ μλ΅ μ²λ¦¬νλ©΄ ν΄λΌμ΄μΈνΈλ ν΄λΉ URL μ£Όμλ‘
//λΈλΌμ°μ μ μ£Όμλ₯Ό λ³κ²½νκ³ μλ²μ URL μ£Όμμ νμ΄μ§ μμ² μ²λ¦¬
//리λ€μ΄λ νΈ μ΄λ : ν΄λΌμ΄μΈνΈμκ² URL μ£Όμλ₯Ό μ λ¬νμ¬ νμ΄μ§λ₯Ό μ¬μμ²νμ¬ μΉνλ‘κ·Έλ¨μ λͺ
λ Ή μ€ν
// => ν΄λΌμ΄μΈνΈμ μμ² URL μ£Όμ λ³κ²½λμ§λ§ Request Scope μμ±κ° μ¬μ© λΆκ°λ₯
return "redirect:/redirect_move";
}
*/
@RequestMapping("/redirect_move")
public String redirect() {
return "display_redirect";
}
/*
@RequestMapping("/redirect")
public String redirect(Model model) {
//Model κ°μ²΄μ μ μ₯λ μμ±κ°μ 리λ€μ΄λ νΈ μ΄λλ νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμ λ·°μμ μ¬μ© λΆκ°λ₯
model.addAttribute("name", "μκΊ½μ ");//Request Scope
return "redirect:/redirect_move";
}
*/
//RedirectAttributes κ°μ²΄ : 리λ€μ΄λ νΈ μ΄λλλ νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμ λ·°μμ μ¬μ©
//κ°λ₯ν Request Scope μμ±κ°μ μ 곡νλ κ°μ²΄
@RequestMapping("/redirect")
public String redirect(RedirectAttributes attributes) {
//RedirectAttributes.addFlashAttribute(String attributeName, Object attributeValue)
// => μμ±λͺ
κ³Ό μμ±κ°μ μ μ₯νμ¬ λ¦¬λ€μ΄λ νΈ μ΄λλλ νμ΄μ§μ μμ² μ²λ¦¬ λ©μλμ
//λ·°μκ² μμ±κ°μ μ 곡νκΈ° μν λ©μλ - Request Scope
attributes.addFlashAttribute("name", "μκΊ½μ ");
return "redirect:/redirect_move";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>ν¬μλ μ΄λ</h1>
<hr>
<h2>${name }λ, νμν©λλ€.</h2>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>리λ€μ΄λ νΈ μ΄λ</h1>
<hr>
<h2>${name }λ, νμν©λλ€.</h2>
</body>
</html>
<resources mapping="/images/**" location="/resources/images/" />
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- resources : ν΄λΌμ΄μΈνΈ μμ²μ Front Controllerκ° μ§μ μλ΅ μ²λ¦¬λλλ‘ μ€μ νλ μλ¦¬λ¨ΌνΈ -->
<!-- => ν΄λΌμ΄μΈνΈμ 리μμ€ νμΌ μμ²μ λν μλ΅ μ²λ¦¬λ₯Ό μν΄ μ¬μ©νλ μλ¦¬λ¨ΌνΈ -->
<!-- mapping μμ± : ν΄λΌμ΄μΈνΈμ μν΄ μμ²λλ 리μμ€ νμΌμ μμ² URL μ£Όμ ν¨ν΄μ μμ±κ°μΌλ‘ μ€μ -->
<!-- => [**] ν¨ν΄λ¬Έμλ₯Ό μμ±κ°μΌλ‘ μ¬μ©ν κ²½μ° νμ¬ ν΄λ λ° νμ ν΄λμ 리μμ€ νμΌ μμ² κ°λ₯ -->
<!-- location μμ± : ν΄λΌμ΄μΈνΈ μμ²μ μν΄ λ¦¬μμ€ νμΌμ κ²μνκΈ° μν ν΄λλ₯Ό μμ±κ°μΌλ‘ μ€μ -->
<!-- <resources mapping="/resources/**" location="/resources/" /> -->
<resources mapping="/images/**" location="/resources/images/" />
<resources mapping="/css/**" location="/resources/css/" />
</beans:beans>
package xyz.itwill10.controller;
@Controller
public class ResourceController {
@RequestMapping("/resource")
public String resource() {
return "resource_display";
}
}
- 리μμ€ νμΌ(Resource File) : ν΄λΌμ΄μΈνΈκ° μΉλ¬Έμ(HTML λ¬Έμ)λ₯Ό ν΄μνμ¬ μ€ννκΈ° μν΄ νμν μ 보λ₯Ό μ 곡νλ μλ²μ μ μ₯λ νμΌ
- CSS νμΌ, JavaScript Source νμΌ, λ©ν°λ―Έλμ΄ νμΌ λ±
- 리μμ€ νμΌμ WEB-INF ν΄λμ μ μ₯ν κ²½μ° ν΄λΌμ΄μΈνΈλ 리μμ€ νμΌ μμ² λΆκ°λ₯
- WEB-INF ν΄λ : μΉμλ²μμ μ€νλλ νλ‘κ·Έλ¨(μλΈλ¦Ώ)μμλ§ μ κ·Ό κ°λ₯ν ν΄λ (ν΄λΌμ΄μΈνΈμκ²λ μλν μ²λ¦¬)
SpringMvc νλ‘κ·Έλ¨μμλ ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²μ Front Controllerλ₯Ό μ΄μ©νμ¬ μ²λ¦¬λλλ‘ μ€μ
리μμ€ νμΌμ μλκ²½λ‘λ‘ νννμ¬ μ²λ¦¬ν κ²½μ° νμ΄μ§μ μμ² URL μ£Όμ κ²½λ‘μ 리μμ€ νμΌμ κ²½λ‘κ° λ€λ₯Έ κ²½μ° 404 μλ¬μ½λ λ°μ (리μμ€ νμΌμ μ λκ²½λ‘λ‘ νννλ κ²μ κΆμ₯)
<img src="images/Koala.jpg" width="200">
컨ν μ€νΈ μ΄λ¦μ΄ λ³κ²½λ κ²½μ° μ»¨ν μ€νΈ κ²½λ‘κ° λ³κ²½λμ΄ 404 μλ¬ μ½λ λ°μ
<img src="/spring/images/Koala.jpg" width="200">
컨ν μ€νΈ κ²½λ‘λ₯Ό ELμ pageContext λ΄μ₯κ°μ²΄λ‘ μ 곡λ°μ μ¬μ©
<img src="${pageContext.request.contextPath }/images/Koala.jpg">
컨ν μ€νΈ κ²½λ‘λ₯Ό Core νκ·Έ λΌμ΄λΈλ¬λ¦¬μ URL νκ·Έλ‘ μ 곡λ°μ μ¬μ©
<img src="<c:url value="/images/Koala.jpg"/>" width="200">
컨ν μ€νΈ κ²½λ‘λ₯Ό Spring νκ·Έ λΌμ΄λΈλ¬λ¦¬μ URL νκ·Έλ‘ μ 곡λ°μ μ¬μ©
<img src="<spring:url value="/images/Koala.jpg"/>" width="200">
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
<link href="<c:url value="/css/style.css"/>" type="text/css" rel="stylesheet">
</head>
<body>
<h1 class="text">리μμ€ νμΌ</h1>
<hr>
<%-- 리μμ€ νμΌ(Resource File) : ν΄λΌμ΄μΈνΈκ° μΉλ¬Έμ(HTML λ¬Έμ)λ₯Ό ν΄μνμ¬ μ€ννκΈ°
μν΄ νμν μ 보λ₯Ό μ 곡νλ μλ²μ μ μ₯λ νμΌ --%>
<%-- => CSS νμΌ, JavaScript Source νμΌ, λ©ν°λ―Έλμ΄ νμΌ λ± --%>
<%-- => 리μμ€ νμΌμ WEB-INF ν΄λμ μ μ₯ν κ²½μ° ν΄λΌμ΄μΈνΈλ 리μμ€ νμΌ μμ² λΆκ°λ₯ --%>
<%-- WEB-INF ν΄λ : μΉμλ²μμ μ€νλλ νλ‘κ·Έλ¨(μλΈλ¦Ώ)μμλ§ μ κ·Ό κ°λ₯ν ν΄λ - ν΄λΌμ΄μΈνΈμκ²λ μλν μ²λ¦¬ --%>
<%-- SpringMvc νλ‘κ·Έλ¨μμλ ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²μ Front Controllerλ₯Ό μ΄μ©νμ¬ μ²λ¦¬λλλ‘ μ€μ --%>
<%-- λ¬Έμ μ )ν΄λΌμ΄μΈνΈκ° μλ²μ 리μμ€ νμΌμ μμ²ν κ²½μ° Front Controllerκ° μμ²μ λ°μ 리μμ€
νμΌμ μμ² URL μ£Όμμ 맀νλ μμ² μ²λ¦¬ λ©μλλ₯Ό κ²μνμ§λ§ μμΌλ―λ‘ 404 μλ¬μ½λ λ°μ --%>
<%-- => Front Controllerμ νΉμ νμ₯μλ‘ νμ΄μ§λ₯Ό μμ²νλ κ²½μ° μ μΈ --%>
<%-- ν΄κ²°λ²)ν΄λΌμ΄μΈνΈκ° 리μμ€ νμΌμ μμ²ν κ²½μ° Front Controllerκ° μμ² μ²λ¦¬ λ©μλλ₯Ό
νΈμΆνμ§ μκ³ μ§μ μλ΅λλλ‘ Spring Bean Configuration File μ€μ - servlet-context.xml --%>
<%-- 리μμ€ νμΌμ μλκ²½λ‘λ‘ νννμ¬ μ²λ¦¬ν κ²½μ° νμ΄μ§μ μμ² URL μ£Όμ κ²½λ‘μ 리μμ€
νμΌμ κ²½λ‘κ° λ€λ₯Έ κ²½μ° 404 μλ¬μ½λ λ°μ - 리μμ€ νμΌμ μ λκ²½λ‘λ‘ νννλ κ²μ κΆμ₯ --%>
<%-- <img src="resources/Koala.jpg" width="200"> --%>
<img src="images/Koala.jpg" width="200">
<%-- 컨ν
μ€νΈ μ΄λ¦μ΄ λ³κ²½λ κ²½μ° μ»¨ν
μ€νΈ κ²½λ‘κ° λ³κ²½λμ΄ 404 μλ¬ μ½λ λ°μ --%>
<%-- => 컨ν
μ€νΈ κ²½λ‘λ μ§μ μ§μ νμ§ μκ³ κ°μ²΄λ‘ μ 곡λ°μ μ¬μ© --%>
<img src="/spring/images/Koala.jpg" width="200">
<%-- 컨ν
μ€νΈ κ²½λ‘λ₯Ό ELμ pageContext λ΄μ₯κ°μ²΄λ‘ μ 곡λ°μ μ¬μ© --%>
<img src="${pageContext.request.contextPath }/images/Koala.jpg" width="200">
<%-- 컨ν
μ€νΈ κ²½λ‘λ₯Ό Core νκ·Έ λΌμ΄λΈλ¬λ¦¬μ URL νκ·Έλ‘ μ 곡λ°μ μ¬μ© --%>
<img src="<c:url value="/images/Koala.jpg"/>" width="200">
<%-- 컨ν
μ€νΈ κ²½λ‘λ₯Ό Spring νκ·Έ λΌμ΄λΈλ¬λ¦¬μ URL νκ·Έλ‘ μ 곡λ°μ μ¬μ© --%>
<img src="<spring:url value="/images/Koala.jpg"/>" width="200">
</body>
</html>