JAVA/Practice

[MAVEN] SpringMVC2 ๋ฒ„์ „2 ์—ฐ์Šต (Controller)

ITs Min 2024. 3. 7.

๐Ÿ” ๋ชฉํ‘œ

์ค‘๊ฐ„ ํ”„๋กœ์ ํŠธ ๋•Œ ์ง„ํ–‰ํ–ˆ๋˜ ์นด๋ฉ”๋ผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ดํŠธ๋ฅผ Spring์œผ๋กœ ์ด๊ด€ํ•˜๋Š” ๊ฒƒ

์‹ค๋ฌด์—์„œ ์–ด๋–ค ๋ฒ„์ „์„ ์‚ฌ์šฉํ• ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์—ฐ์Šต

์•ž์—์„œ ์ผ๋˜ SpringMVC2์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ƒ๊ฐ๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ํž˜๋“  ๊ฒƒ ๊ฐ™์•„ Refresh!!


๐Ÿ” DispatcherServlet

๋ฒ„์ „ 1์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ DispatcherServlet์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฒ„์ „ 2์—์„œ๋Š” Spring์—์„œ ์ œ๊ณตํ•˜๋Š” DispatcherServlet์„ ์‚ฌ์šฉํ•œ๋‹ค.

์˜์กด ์ฃผ์ž…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” .xml ์ฆ‰, ์„ค์ •ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค.

 

๐Ÿ’ก org.springframework.web.servlet.DispatcherServlet

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns="http://java.sun.com/xml/ns/javaee"
		xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
							http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
	
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>*.do</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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	
</web-app>

๐Ÿ” Controller

๋ฒ„์ „ 1์—์„œ๋Š” ์ง์ ‘ ์ž‘์„ฑํ•œ Controller ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ƒ์† ๋ฐ›์•„์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ

๋ฒ„์ „ 2์—์„œ๋Š” Spring์—์„œ ์ œ๊ณตํ•˜๋Š” Controller๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ธฐ์กด ๋ฒ„์ „์€ request ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ–ˆ์ง€๋งŒ (NOT POJO)

๋ฒ„์ „ 2์—์„œ๋Š” ModelAndView ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. (POJO)

LogoutAction.java

package com.spring.controller.member;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

// Controller ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ LogoutAction ํด๋ž˜์Šค
public class LogoutAction implements Controller {

    // handleRequest ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // ModelAndView ๊ฐ์ฒด ์ƒ์„ฑ
        ModelAndView mav = new ModelAndView();

        // HttpSession ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ด
        HttpSession session = request.getSession();

        // ํ˜„์žฌ ์„ธ์…˜์„ ๋ฌดํšจํ™”ํ•˜์—ฌ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ
        session.invalidate();

        // ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•  ๋ทฐ ์ด๋ฆ„ ์„ค์ •
        mav.setViewName("redirect:main.do");

        // ModelAndView ๊ฐ์ฒด ๋ฐ˜ํ™˜
        return mav;
    }
}

 

dispatcher-servlet.xml (bean)

๋นˆ(bean)์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ฐ๊ฐ์˜ ๋นˆ์€ ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ๋“ฑ๋กํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋นˆ๋“ค์€ ์Šคํ”„๋ง MVC ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

	<bean id="loginAction" class="com.spring.controller.member.LoginAction" />
	<bean id="loginPageAction" class="com.spring.controller.member.LoginPageAction" />
	<bean id="logoutAction" class="com.spring.controller.member.LogoutPageAction" />
	<bean id="joinPageAction" class="com.spring.controller.member.JoinPageAction" />
	<bean id="joinAction" class="com.spring.controller.member.JoinAction" />
	<bean id="mainPageAction" class="com.spring.controller.member.MainPageAction" />

๐Ÿ” HandlerMapping

ํ•ธ๋“ค๋Ÿฌ๋งตํ•‘ ์—ญ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์—ˆ๋˜ HandlerMapping์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ

Spring์—์„œ ์ œ๊ณตํ•˜๋Š” HandlerMapping์„ ์‚ฌ์šฉํ•œ๋‹ค. ์˜์กด ์ฃผ์ž… ๋ฐฉ์‹์€ setter ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ 

์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋Š” map์ด๋‹ค.

 

HandlerMapping.java

package com.spring.controller.common;

import java.util.HashMap;
import java.util.Map;

public class HandlerMapping {
	private Map<String, Controller> mappings;

	public HandlerMapping() {

		mappings = new HashMap<String, Controller>();

	}

	public Controller getController(String commend) {
		return mappings.get(commend);
	}
}

 

dispatcher-Servlet.xml

URL๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„์˜ ๋งคํ•‘์„ ์„ค์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” SimpleUrlHandlerMapping ๋นˆ์„ ์ •์˜ํ•œ๋‹ค. ์ด ๋นˆ์€ URL ํŒจํ„ด๊ณผ ํ•ด๋‹นํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ์š”์ฒญ์„ ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ’ก org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/loginAction.do">loginAction</prop>
				<prop key="/loginPageAction.do">loginPageAction</prop>
				<prop key="/logoutAction.do">logoutAction</prop>
				<prop key="/joinPageAction.do">joinPageAction</prop>
				<prop key="/joinAction.do">joinAction</prop>
				<prop key="/mainPageAction.do">mainPageAction</prop>
			</props>
		</property>
	</bean>

๐Ÿ” ViewResolver

ViewResolver ์—ญ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋˜ ๋ฒ„์ „ 1๊ณผ๋Š” ๋‹ฌ๋ฆฌ

Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ViewResolver๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฒ„์ „ 1๊ณผ ๊ฐ™์€ ์ ์€ ์˜์กด ์ฃผ์ž… ๋ฐฉ์‹์œผ๋กœ setter ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํŠน์ • ํŽ˜์ด์ง€์˜ url์„ ์•Œ๋ฉด, ๋ณ„๋„์˜ ๊ถŒํ•œ์ด ์—†์–ด๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Controller์—์„œ ๋ณ„๋„์˜ ์ ‘๊ทผ ๊ถŒํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

Spring์—์„œ๋Š” ํŽ˜์ด์ง€๋ฅผ WEB-INFํด๋”์— ์€๋‹‰ํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ViewResolver ํ†ตํ•ด์„œ๋งŒ WEB-INF ํด๋”์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ ์„ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค.

 

dispatcher-Servlet.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InteralResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

๐Ÿ’ก ๊ฒฐ๋ก 

ํฌ์ŠคํŒ… ์ „์—๋Š” ๋ฒ„์ „ 1๊ณผ ๋ฒ„์ „ 2๊ฐ€ ๊ต‰์žฅํžˆ ํ—ท๊ฐˆ๋ ธ์ง€๋งŒ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„์ „ 2๋Š” bean ์ƒ์„ฑ์„ ๋งŽ์ด ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๋ฒ„์ „ 1๊ณผ๋Š” ๋‹ฌ๋ฆฌ

๋ฒ„์ „ 2๋Š” Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„์ด ๋๋‹ค.


 

 

 

๋Œ“๊ธ€

TOP

๋Šฆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๋• ๋„ˆ๋ฌด ๋Šฆ์€ ๊ฑฐ๋‹ค.