spring 2
AOP (Aspect Oriented Programming)
- 관심사의 분리를 통해서 소프트웨어의 모듈성을 향상시키고자 하는 프로그래밍 패러다임
- 소스코드 레벨에서 관심사의 모듈화를 지향하는 프로그래밍 방법이나 도구를 포함
- 횡단관심(Cross-cutting concern)
- 어플리케이션의 다양한 관점(point)에 영향을 미치는 기능
- aspect라고 하는 특별한 객체로 모듈화가 가능함
- 핵심관심 : 기능정의 -> 메서드
- Aspect
- 횡단관심사의 동작과 그 횡단괌심사를 적용하려는 소스 코드에서의 위치를 모아둔 것
- 하나 이상의 Advice(동작)과 Pointcut(동작을 적용하는 조건)을 조합한 것
- Joinpoint
- Advice가 실행하는 동작을 끼워넣을 수 있는 때를 의미
- 스프링에서는 메서드가 호출될 때와 메서드가 원래 호출한 곳으로 돌아갈 때가 어드바이스를 끼워넣을 수 있는 조인포인트이다
- Advice
- Joinpoint에서 실행되는 코드
- 보안, 로깅, 트랜잭션 관리 등의 코드가 기술됨
- Pointcut
- Joinpoint와 Advice의 중간에 있으면서 처리가 조인포인트에 이르렀을 때 Advice를 호출할지 선별
DispatcherServlet
- 제일 앞에서 서버로 들어오는 모든 요청을 먼저 받아서 처리하는 서블릿
- web.xml에 등록
MVC (Model View Controller) 패턴
- 어플리케이션의 확장을 위해 Model, View, Controller 세가지 영역으로 분리
- 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음
- 컴포넌트 간의 결합도가 낮아 프로그램 수정이 용이
장점
- 화면과 비즈니스 로직을 분리해서 작업 가능
- 영역별 개발로 인하여 확장성이 뛰어남
- 표준화된 코드를 사용하므로 공동작업이 용이하고 유지보수성이 좋음
단점
- 개발과정이 복잡해 초기 개발속도가 늦음
- 초보자가 이해하고 개발하기에 다소 어려움
controller 등록하기
-
컨트롤러로 사용할 클래스에
@Controller
어노테이션 달기 -
servlet-context.xml
에 컨트롤러 등록하기-
<context:component-scan base-package="컨트롤러로 등록한 클래스가 있는 패키지명"></context:component-scan>
-
-
메소드에 달린
@RequestMapping()
은 서블릿에서@WebServlet()
과 같은 역할을 한다-
@Controller public class MainController { @RequestMapping("method1") void m1() { } }
-
-
return 값을 String으로 보내는 것은 forward와 같다
-
@Controller public class MainController { @RequestMapping("method2") String m2() { return "home"; } }
-
-
redirect의 경우 리턴 문자열 앞에 “redirect:/”을 붙여준다
-
.jsp 파일을 서버에서 바로 접근할 수 없기 때문에 메서드를 두 개 호출한다
-
redirect할 jsp파일 명이 home.jsp일 경우 home만 작성한다
-
@Controller public class MainController { @RequestMapping("method3") String m3() { return "redirect:/method4"; } @RequestMapping("method4") String m4() { return "home"; } }
-
-
값을 전달하고 싶을 때
HttpSession
,HttpServletRequest
,Model
등을 필요한 것들을 추가하여 사용할 수 있다 (여러개도 추가 가능) -
Product
라는 모델 클래스가 있을 경우 전달 받아 전송할 수 있다-
이 메서드를 호출하는 곳에서 Product에 맞는 변수들을 넘겨준다면 자동으로 값이 넘어옴
-
클래스내의 변수명과 값을 받을 태그의 name명을 맞춰주어야 한다
-
public class Product { String pid; String pname; int pprice; String pdesc; }
-
<form action="result" method="post"> 아이디 : <input type="text" name="pid"><br> 상품명 : <input type="text" name="pname"><br> 가격 : <input type="number" name="pprice"><br> 설명 : <input type="text" name="pdesc"><br> <button>제출</button> </form>
-
@Controller public class MainController { @RequestMapping("method5") String m5(Product product, HttpStssion session, HttpServletRequest request, Model model) { session.setAttribute("product", product); request.setAttribute("product", product); model.addAttribute("product", product); return "page"; } }
-
전달 받은 값은 el태그 표현을 통해 받아올 수 있다
-
<%-- page.jsp --%> 전달 product : ${product} <br>
-
프로젝트 진행시 필요한 것들
한글 인코딩 (web.xml에 추가)
<!-- 한글 파라미터 처리 -->
<filter>
<filter-name>encoding</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>
jdbc 연결 (pom.xml에 추가)
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>