본문 바로가기

(Before)BitSchool

2014/06/25 AOP

반응형

AOP(애스매틱 지향 프로그래밍)


- 부가기능(로깅, 트랜잭션)

- OOP는 비지니스 로직


횡단관심모듈 - 여러 클래스에 걸쳐서 적용되는 기능들(삽입하는 코드)

조인포인트 - 어느 라인에 코드가 삽입되느냐

포인트 컷 - 삽입될 특정 클래스의 특정 메소드를 선택하는 방법 정의

어드바이스 또는 인터셉터 - 횡단관심모듈(로깅,보안,트랜잭션 등 삽입하려는 코드)

위빙 또는 크로스커팅 - 포인트 컷에 의해 결저된 조인포인트에 어드바이스를 삽입하는 과정

인트로 덕션 또는 인터타입 선언 - 기존의 클래스와 인터페이스에 필요한 메소드나 필드를 동적으로 추가해서 사용할 수 있게 해주는 방법

애스팩트 또는 어드바이저 - 포인트 컷과 어드바이스를 합쳐놓은것. 즉 어디에서 무엇을 할지를 나타냄


Proxy클래스를 사용할 경우 AOP를 구현 할 수 있다.


DAO - DB조회 (Object-Relation Mapper)




Struts 요청 --> Action servlet -->  Action 객체들


Spring MVC 요청 --> Dispatcher Servlet --> controller 객체들 


Action 과 Dispatcher는 하는 일이 같다.








다이나믹 웹 프로젝트를 실행하고 WebContent안에 lib에 해당하는 Spring lib를 넣어준다.


applicationContext.xml을 기본적으로 로드하고 DispatcherServlet의 이름에 따라 다르지만 이 프로젝트에서는 SimpleSite-servlet.xml을 로드한다. 직접 xml에서 넣어준다.


web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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_3_0.xsd" id="WebApp_ID" version="3.0">
 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <servlet>
     <servlet-name>simplesite</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>simplesite</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>



WEB-INF안에서 Spring Bean Configuration File을 선택해서 applicationContext.xml 과 simplesite-servlet.xml 만들어 준다.  여기까지가 Dispatcher Servlet까지 한 상태이다.



 LoginController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package kr.co.bit.simplesite.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
 
public class LoginController implements Controller {
 
    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
        //request.setAttribute("message",Hello! Spring");
        //return new ModelAndView("login/login");  // 이 두줄은 아래의 한줄과 동일하다.
        return new ModelAndView("login/login","message","Hello! Spring");
    }
 
}
 


그리고 java packeage를 만들어서 Controller를 구현하는 LoginController라는 class를 생성한다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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.xsd">
 
    <bean id="LoginController" class="kr.co.bit.simplesite.controller.LoginController"></bean>
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/login/login.do">loginController</prop>
            </props>
        </property>
    </bean>
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
 


simplesite-servlet.xml에 controller추가한다.



login.jsp

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <p><%=request.getAttribute("message") %></p>
</body>
</html>

WEB-INF안에 view라는 폴더를 만들고 login.jsp를 작성한다.




xml에서 <bean>안에 선언해야지 작동이 된다.


struts에서는 execute() , spring에서는 handleRequest() 이고 하는 일은 같다.





MultiActionController 클래스를 상속하면 여러개의 요청을 처리할 수 있다. 


/user/form.do

/user/add.do

/user/modify.do

/user/delete.do

/user/search.do

를 UserController클래스에서 MultiActionController클래스를 상속받아 하나로 컨트롤 할 것이다.


HandleRequest는 MultiActionController안에 담겨있다.


Simplesite-servlet.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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.xsd">
 
    <bean id="loginController" class="kr.co.bit.simplesite.controller.LoginController"></bean>
    <bean id="userController" class="kr.co.bit.simplesite.controller.UserController">
        <property name="methodNameResolver">
            <ref bean="userControllerMethodNameResolver"/>
        </property>
    </bean>
    
    
    <bean id="userControllerMethodNameResolver"
        class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
        <property name="mappings">
            <props>
                <prop key="/user/form.do">form</prop>
                <prop key="/user/add.do">add</prop>
                <prop key="/user/modify.do">modify</prop>
                <prop key="/user/delete.do">delete</prop>
                <prop key="/user/search.do">search</prop>
            </props>
        </property>
    </bean>
    
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/login/login.do">loginController</prop>
                <prop key="/user/form.do">userController</prop>
                <prop key="/user/add.do">userController</prop>
                <prop key="/user/modify.do">userController</prop>
                <prop key="/user/delete.do">userController</prop>
                <prop key="/user/search.do">userController</prop> 
            </props>
        </property>
    </bean>
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
        <!-- /WEB-INF/view/login/login.jsp  출력-->
        <!--   prefix  /viewname/  suffix   가 된다.-->
    </bean>
</beans>
 


추가를 해준다.



UserController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package kr.co.bit.simplesite.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 
public class UserController extends MultiActionController {
    
    
    public ModelAndView form(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
        return new ModelAndView("user/form");
    }
    
    public ModelAndView add(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
    return new ModelAndView("user/add");
    }
    
    public ModelAndView modify(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
        return new ModelAndView("user/modify");
    }
    
    public ModelAndView delete(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
        return new ModelAndView("user/delete");
    }
    
    public ModelAndView search(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
 
        return new ModelAndView("user/search");
    }
}
 


 클래스를 만들어주고 view폴더안에 user폴더를 만들고 각각 form,add,modify,delete,search.jsp를 만들어준다.


1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>User Form</title>
</head>
<body>
<p>User Form</p>
</body>
</html>

각각 만들어 총 5개 만들고 실행










반응형