드디어...마지막 시간이다!!!!!
첫 예제는 Annotation 기반 AOP 작업.
AOP로 세션관리를 하는 코드를 생성해 본다.
1. 환경설정
- web.xml 에 servlet 설정을 한다. 이제는 좀 익숙해져가는듯...^^
<servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
- springapp-servlet.xml 파일을 생성해준다.
- 필요한 lib 파일을 복사해서 넣어준다.
- DB 연결이 필요한경우 index.html 을 실행해서 Server.xml에 context를 생성해준 뒤 Context 내부에 Resource 설정을 넣어준다.
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="100" maxIdle="30" maxWait="10000" name="사용할 이름" password="계정비번" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:XE" username="계정명"/>
2. AOP
- 세션을 요청할 session_req.jsp파일을 생성해 준뒤 세션 값을 가지고 접근하는 경우 링크와 없이 접근하는 경우 링크를 생성해 준다.
- 팩키지를 구분하여 컨트롤러 클래스를 생성한 뒤 @Controller Annotation을 붙여준다. 컨트롤러 내부에 session_req.jsp 에서 링크로 걸어준 .do 파일들에 대한 맵핑을 @RequestMapping 을 붙여 메소드를 생성해준다.
메소드는 ModelAndView를 리턴해야하고, request와 ModelAndView를 파라메터로 가지도록 해야한다.
public ModelAndView session_action(HttpServletRequest request, ModelAndView mav){}
- aop 팩키지를 만들어서 내부에 aop클래스를 생성하는데 인터페이스나 클래스의 상속없이 일반 클래스를 생성하고 클래스명 위에 @Aspect 를 붙여서 Aspect 클래스로 만들어준다.
- 세션 체크는 동작 전에 실행되어야 하므로 @Before 어노테이션을 붙여서 메소드를 생성해 주면서 메소드를 실행할 JoinPoint를 입력해준다. 이번 예제에서는 public 으로 시작하는 메소드 중 리턴여부와 상관없이 session_로 시작하는 파라메터를 가지는 모든 메소드 실행 전에 실행하도록 설정을 넣어주었다.
@Before("execution(public * session_*(..))")
- 메소드는 JoinPoint를 파라메터로 받는데 이 JoinPoint를 통해서 실행 메소드의 파라메터 값을 가져올 수 있다. Object 배열로 joinPoint.getArgs()를 받으면 실행 메소드의 파라메터가 순서대로 객체로 반환된다. 형변환을 통해 파라메터를 변환하고 필요한 정보를 뽑아서 세션 처리를 한다.
@Before("execution(public * session_*(..))")
public void sessionCheck(JoinPoint joinPoint){
Object[] args = joinPoint.getArgs();
HttpServletRequest request = (HttpServletRequest)args[0];
ModelAndView mav = (ModelAndView)args[1];
HttpSession session = request.getSession();
Object login = session.getAttribute("name");
if(login == null){
mav.setViewName("session_input.jsp");
} else {
mav.setViewName("session_success.jsp");
}//if - login
}
- 세션 처리에 따라 필요한 jsp 파일을 생성해 준다.
- 가장 중요한 servlet 파일 설정!
이전에 Aop 실습시에는 인터페이스를 하나 생성했었는데, 이유는 무조건 인터페이스를 상속받아야만 프록시가 생성되기 때문이었다. 이번에는 aop의 autoproxy 태그를 선언하여 처리한다.
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<aop:config proxy-target-class="true"></aop:config>
- 마지막으로 컨트롤러 클래스와 AOP 클래스 빈을 등록하면 끝~!!!
2011.9월 BUILD 컨퍼런스 키노트 (0) | 2012.02.17 |
---|---|
카산드라 (0) | 2012.01.30 |
Spring & Ibatis framework 4 - 2011.11.05 (0) | 2011.11.05 |
아파치 재시작 없이 설정 적용하기!! (0) | 2011.10.31 |
Spring & Ibatis framework 3 - 2011.10.29 (0) | 2011.10.29 |