[Spring] 005 강의노트

배윤석·2022년 7월 6일
0

Spring

목록 보기
5/6

공유 데이터 만들어보기

list1.do ➡ ListAction1.java(ShareClass 포함) ➡ listview1.jsp
list2.do ➡ ListAction2.java(ShareClass 포함) ➡ listview2.jsp

  1. 기본적인 설정(스프링 라이브러리나 톰캣 등) 이 되었다는 가정하에 아래 내용을 시작한다

  2. web.xml 에 공유 데이터 설정을 한다.
    스프링에게 객체 생성을 맡겨주는 것이다.
    코드의 난잡함을 방지하기 위해 외부파일을 사용하기로 한다.
    이를 위해 root-context.xml 설정파일을 생성하고 외부파일로 참조하여 사용한다.

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
  1. web.xml 에 listener 클래스 생성
    org.springframework.web.context.ContextLoaderListener

    listener

    Spring 공식문서
    공식문서의 1.7번 항목을 확인하자.
    이벤트 리스너에 대해 설명하고 있다.

    스프링 MVC 동작 원리(4) : 서블릿 리스너와 필터
    서블릿 리스너
    웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용할 수 있다.

    • 서블릿 컨텍스트 수준의 이벤트
      1. 컨텍스트 라이프사이클 이벤트
      2. 컨텍스트 애트리뷰트 변경 이벤트

    • 세션 수준의 이벤트
      1. 세션 라이프사이클 이벤트
      2. 세션 애트리뷰트 변경 이벤트
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. root-context.xml(1번의 xml 설정파일)에 공유할 자료 클래스 bean을 추가한다.
<?xml version="1.0" encoding= "UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
	
	<bean id="shareClass" class="share.ShareClass">
		<property name="shareData1" value="난 공유자료임"></property>
	</bean>
</beans>
  1. web.xml 에 DispatcherServlet 클래스를 추가해주어야 한다.
    web.xml의 난잡함을 방지하기 위해 dispatcher-servlet.xml 이라는 설정파일을 생성, 외부파일로 참조하여 사용한다.

    Dispatcher Servlet

    1. Dispatch의 의미는 급파하다, 파견 등의 뜻을 가지고 있다.
    2. 해석해보면 받은 요청을 어딘가로 빨리빨리 보내는 서블릿이라는 뜻.
    3. 프론트 컨트롤러라고 불리기도 한다.
    4. param-value 태그 내에 xml을 여러 줄 입력하여 다수의 xml 설정파일을 참조할 수 있다.
<!-- DispatcherServlet(Front Controller) -->
<servlet>
	<servlet-name>servlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/dispatcher-servlet.xml
		</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>servlet</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>
  1. web.xml 에서 인코딩 전처리를 해주려고 한다.
    매번 페이지마다 javax.servlet.http.HttpServletRequest.setCharacterEncoding("UTF-8") 을 하는것보다 필터로 걸어주면 일일이 걸 필요가 없어진다.
<!-- 다국어 필터 적용! -->
<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>*.do</url-pattern>
</filter-mapping>
  1. dispatcher-servlet.xml 에 model2 패키지의 ListAction1 과 ListAction2 를 실행시킬 bean을 추가한다.
    ❗참고❗ : 공유 데이터를 해당 Class에 적용하려면 property를 추가해주어야 한다.
    1. name은 공유 데이터임을 인지할 수 있는 것으로 정해주는 것이 좋다.
    2. ref는 참조인데, 3번의 bean id를 입력해주면 된다.

  2. dispatcher-servlet.xml 에 클래스를 추가한다.
    org.springframework.web.servlet.view.InternalResourceViewResolver
    ModelAndView 객체가 리턴하는 값을 수신하여 클라이언트의 화면에 표시할 화면을 호출한다.
    이때 공통된 부분의 입력을 피하기 위해 2가지 속성을 가지게 된다.
    1. prefix : ModelAndView 객체가 리턴한 값의 앞부분에 매번 입력된 문자열을 추가한다.
    ➡ 보통 경로를 입력하며, 추가적으로 파일명 앞부분에 공통된 부분이 있다면 해당부분까지 입력해도 된다.
    2. suffix : ModelAndView 객체가 리턴한 값의 뒷부분에 매번 입력된 문자열을 추가한다.
    ➡ 보통 확장자명을 입력하며, 추가적으로 파일명 뒷부분에 공통된 부분이 있다면 해당부분까지 입력해도 된다.
<?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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

	<bean name="/list1.do" class="model2.ListAction1">
		<property name="shareClass" ref="shareClass"></property>
	</bean>

	<bean name="/list2.do" class="model2.ListAction2">
		<property name="shareClass" ref="shareClass"></property>
	</bean>


	<!-- 통합해서 사용하기 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>
  1. 공유할 데이터를 옮겨줄 데이터객체인 DTO 클래스 ShareClass.java를 생성한다.
package share;

public class ShareClass {
	private String shareData1;
	
	public ShareClass() {
		// TODO Auto-generated constructor stub
		System.out.println("ShareClass() 실행");
	}
	public String getShareData1() {
		return shareData1;
	}
	public void setShareData1(String shareData1) {
		this.shareData1 = shareData1;
	}
}
  1. list1.do 혹은 list2.do 를 브라우저 주소창에 입력하면 실행시킬 클래스를 생성한다.
    Controller 인터페이스를 구현 받으면 된다.
    root-context.xml 설정파일에서 ShareClass 객체를 생성 및 초기화했기 때문에 new 연산자를 통해 객체를 추가로 생성하지 않아도 된다.
    다만, 생성한 객체를 Java 파일 내에서 활용하기 위해 private와 set메서드를 활용하여 객체 변수를 만들어 받아준다.

    이후 ModelAndView 객체로 클라이언트에게 표시할 JSP 파일명을 입력하고 Spring으로 리턴한다.

    ListAction2.java는 1과 크게 다를 바가 없기에 패스한다.
package model2;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import share.ShareClass;

public class ListAction1 implements Controller {
	private ShareClass shareClass;

	public void setShareClass(ShareClass shareClass) {
		this.shareClass = shareClass;
	}

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
		// TODO Auto-generated method stub
		
		System.out.println("shareData1 : " + shareClass.getShareData1());
		
		return new ModelAndView("listview1");
	}
}
  1. 클라이언트에게 표시해줄 JSP 파일을 생성하자.
    이번에는 공유 데이터가 정상적으로 전송되는지 확인하는 예제이다.
    때문에 body 태그 내에 Spring 요청했을 경우 해당 JSP 파일임을 인지할 수 있도록 JSP 파일명만 추가해줬다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

listview1.jsp

</body>
</html>
  1. 이제 브라우저 주소창에 list1.do 를 입력하여 결과를 확인해보자.


Dispatcher Servlet

Micro Service Architecture?

참고 블로그 : MicroService Architecture란?

우편번호 검색기 만들기

Spring MVC Model 2를 사용하기

게시판 만들기

Spring MVC Model 2를 사용하기

Maven Project

  1. org.apache.maven 검색하여 web-app 클릭
  2. Java Build Path에 들어가서 Java 버전을 JavaSE-11로 변경해준다.
  3. Classpath에 라이브러리를 추가해서 Server Runtime을 추가한다.
    서버는 Apache-Tomcat 사용버전을 확인하고 추가하자.
  4. Project Facets의 자바 버전을 11로 변경한다.
  5. pom.xml 에 Spring 라이브러리들을 추가해준다.
  6. webapp/WEB-INF/web.xml 을 수정한다.
    Maven 프로젝트로 생성된 web.xml은 구버전이라, 신버전으로 업데이트 해주는 것이 좋다고 한다.
profile
차근차근 한 걸음씩 걸어나가는 개발자 꿈나무.

0개의 댓글