'Work'에 해당되는 글 20건
- 2012/04/15
- 2012/02/17
- 2012/01/30
- 2011/11/12
- 2011/11/05
- 2011/10/31
- 2011/10/29
- 2011/10/26
- 2011/10/22
- 2011/10/15
[원문]
http://techblog.wimgodden.be/2010/06/24/automated-php-5-3-compatibility-testing-for-your-old-code/
[참조]
http://www.php.net/manual/en/migration53.new-features.php : php5.3 버전에서 달라지는 것들
http://code.zikula.org/phpcs/wiki/installation : PHP_CodeSniffer 설치(pear)
PHP_CodeSniffer를 기반으로 한 PHP5.3 으로 버전업시 발생되는 문제점을 확인하여 리스트해준다.
우선, 현재 테스트 환경은 PHP5.3 이 깔려 있어야 한다.
[설치순서]
1. pear 를 통한 PHP_CodeSniffer 1.3 이후 버전 설치 (http://pear.php.net/PHP_CodeSniffer)
2. PHP5.3 호환성 체크용 룰셋 다운받기 (https://github.com/wimg/PHP53Compat_CodeSniffer/downloads)
우선, pear 리스트에 PHP_CodeSniffer가 설치되어 있는 지 확인하고 없거나, 버전이 1.2.2 stable로 되어 있는 경우, 이를 1.3.0RC1으로 재설치 한다.
> pear list => 목록확인
> pear install PHP_CodeSniffer-alpha => 설치후 PHP_CodeSniffer 1.3.0RC1 beta 로 설치됨
다음, pear 설치 디렉토리로 이동한 뒤에 호환성 체크 룰셋 적용한 파일들을 다운
> cd C:\Server\PHP\PEAR : pear 디렉토리
> cd PHP\CodeSniffer\Standards : CodeSniffer 디렉토리
> git clone git://github.com/wimg/PHP53Compat_CodeSniffer.git PHP53Compatibility
git 가 설치되어 있지 않다면 파일 다운 후 Standards 디렉토리에 PHP53Compatibility디렉토리로 이름변경하고 추가(https://github.com/wimg/PHP53Compat_CodeSniffer/downloads)
설치된 PHP53Compatibility 디렉토리 안에는 아래의 파일과 디렉토리가 있게 된다.
README.markdown
ruleset.xml
Sniffs 디렉토리
[실행]
> phpcs --standard=PHP53Compatibility <테스트할 php source 디렉토리>
만약, 테스트할 php 코드가 .php뿐만 아니라 .html .inc 도 있을 경우 --extensions 옵션을 추가
> phpcs --extensions=php,html,inc --standard=PHP53Compatibility <테스트할 php source 디렉토리>
[실행결과]
FILE: C:\workspacePHP\test.php
------------------------------------------------------------------------------
FOUND 0 ERROR(S) AFFECTING 1 LINE(S)
------------------------------------------------------------------------------
1 | WARNING | No PHP code was found in this file and short open tags are not
| | allowed by this install of PHP. This file may be using short
| | open tags but PHP does not allow them.
------------------------------------------------------------------------------
이렇게 나온 경우는 해당 php 파일에 short open tag(<?)를 사용했거나, php 코드가 없는 경우
------------------------------------------------------------------------------
2 | WARNING | The use of function ereg() is discouraged; use preg_match() instead
4 | WARNING | The use of function split() is discouraged; use preg_split() instead
9 | WARNING | The use of function ereg_replace() is discouraged; use preg_replace() instead
------------------------------------------------------------------------------
이런 식으로 호환성 결과가 나온다.
파일이 많을 경우 지체되는 경우도 있어, 디렉토리별로 실행하고 결과를 파일로 남겨서 살펴보는 쪽을 추천한다.
| php5.3 으로 업그레이드시 자동 호환성 체크기 (0) | 2012/04/15 |
|---|---|
| Javascript Frameworks (0) | 2011/10/26 |
| 2011.9월 BUILD 컨퍼런스 키노트 (0) | 2012/02/17 |
|---|---|
| 카산드라 (0) | 2012/01/30 |
| Spring & Ibatis framework 5 - 2011.11.12 (0) | 2011/11/12 |
| 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 |
| 2011.9월 BUILD 컨퍼런스 키노트 (0) | 2012/02/17 |
|---|---|
| 카산드라 (0) | 2012/01/30 |
| Spring & Ibatis framework 5 - 2011.11.12 (0) | 2011/11/12 |
| 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 |
드디어...마지막 시간이다!!!!!
첫 예제는 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 5 - 2011.11.12 (0) | 2011/11/12 |
| 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 |
| 파라미터 타입 | 설명 |
| HttpServletRequest, HttpServletResponse | 서블릿 API |
| java.util.Locale | 현재 요정에 대한 Locale |
| InputStream, Reader | 요청 컨텐츠에 직접 접근할 때 사용 |
| OutputStream, Writer | 응답 컨텐츠를 생성할 때 사용 |
| @PathVariable 어노테이션 적용 파라메터 | URI 템플릿 변수에 접근할 때 사용 |
| @RequestParam어노테이션 적용 파라메터 | HTTP 요청 파라미터를 매핑 |
| @RequestHeader어노테이션 적용 파라메터 | HTTP 요청 헤더를 매핑 |
| @CookieValue어노테이션 적용 파라미터 | HTTP 쿠키 매핑 |
| @RequestBody 어노테이션 적용 파라미터 | HTTP 요청의 몸체 내용에 접근할 때 사용 |
| Map, Model, ModelMap | 뷰에 전달할 모델 데이터를 설정할 때 사용 |
| 커맨드 객체 | HTTP 요청 파라미터를 저장 한 객체, 기본적으로 클래스 이름을 모델명으로 사용 @ModelAttribute 어노테이션 설정으로 모델명을 설정할 수 있음 |
| Errors, BindingResult | HTTP 요청 파라미터를 커맨드 객체에 저장한 결과, 커맨드 객체를 위한 파라미터 바로 다음에 위치 |
| SessionStatus | 폼 처리를 완료 했음을 처리하기 위해 사용. @SessionAttributes 어노테이션을 명시한 session속성을 제거하도록 이벤트를 발생 시킨다. |
| 카산드라 (0) | 2012/01/30 |
|---|---|
| Spring & Ibatis framework 5 - 2011.11.12 (0) | 2011/11/12 |
| 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 |
| Spring & Ibatis framework 2 - 2011.10.22 (0) | 2011/10/22 |
| Spring & Ibatis framework 5 - 2011.11.12 (0) | 2011/11/12 |
|---|---|
| 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 |
| Spring & Ibatis framework 2 - 2011.10.22 (0) | 2011/10/22 |
| Spring & Ibatis framework 1 - 2011.10.15 (0) | 2011/10/15 |
| 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 |
| Spring & Ibatis framework 2 - 2011.10.22 (0) | 2011/10/22 |
| Spring & Ibatis framework 1 - 2011.10.15 (0) | 2011/10/15 |
| Java Script Key code (0) | 2011/07/27 |
| php5.3 으로 업그레이드시 자동 호환성 체크기 (0) | 2012/04/15 |
|---|---|
| Javascript Frameworks (0) | 2011/10/26 |
두번째 교육...
어제 워크샵을 양평으로 갔다가 일정을 마무리하고 밤에 나와서...피곤해 죽을거 같다.
오늘 수업... 잘 들을 수 있어야 하는디...큰일..ㅋ.ㅋ
오늘은 MVC를 이용해 간단한 게시판을 하나 생성해본다.
1. 프로젝트 시작
- Dynamic web project 를 생성한다
- 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>
- 환경설정 용 xml 파일은 servlet-name과 이름을 같게(servlet명-servlet.xml)해서 생성해주면 알아서 설정파일을 읽어준다. 따라서 springapp-servlet.xml 로 파일을 생성해서 WEB-INF 폴더 안에 넣어준다.
- 필요한 Lib파일들을 lib에 추가해준다. spring.jar를 비롯한 modules아래 파일과 기타 필요한 파일들을 추가해주고 JRE System Library에 jstl.jar, standard.jar 가 없는 경우 해당 파일도 추가해준다.
2. DB 설정
- com.quantum.feature_3.3.0.2.bin.dist.zip 의 압축을 풀어 안에 있는 두개의 폴더를 eclipse폴더 안에 복사해주고 eclipse를 재실행한다. 재실행 후 이클립스 우측 상단의 perspective 설정 부분에 new 를 클릭해서 Others로 들어가보면 Quantum 이 생성된것을 확인 할 수 있다. Quantum View 선택 후 좌측 Database Bookmarks에서 new Bookmark를 실행한다.
- Add > Add External Jar를 선택하여 ojdbc14.jar 를 추가해줘야 하는데 이 파일은 C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib 아래 위치해 있다. (찿기 쉽게 C:\Tomcat6 폴더 아래로 복사해주자 ㅋㅋ)
확인 후 Class선택 부분을 눌러서 oracle.jdbc.driver.OracleDriver를 선택해주자.
다음으로 계정정보 입력창이 나오게 되는데 계정정보를 입력하고 확인을 해주면 좌측 Database Bookmarks에 설정한 이름으로 DB북마크가 생성된것을 확인할 수 있다.
- 사용할 데이터 베이스를 선택하고 board에 사용할 테이블, 시퀀스 등을 생성해서 환경을 설정해준다.
- oracle 10g 메뉴에서 Database 홈페이지로 이동을 눌러 DB홈에서 계정 설정을 맞춰서 생성해주어야 한다.
(DB는 원하는 DB의 플러그인만 이클립스에 설치해주면 다른 DB로 교체 가능하다)
- J2E perspective로 돌아가서 Servers>server.xml을 열어보면 파일 가장 하단에 현재 프로젝트에 대한 Context가 설정되어 있는것을 확인할 수 있다. Context안에 서버 리소스 설정을 해준다.
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/oracle" password="계정비번" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:DB명" username="계정명"/>
3. Controller
- insert_form.do를 맵핑하기 위한 bean을 설정해준다.
<bean name="/insert_form.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="/board/insert_form.jsp" />
</bean>
- form에서 데이터를 컨트롤러로 넘겨주기위해서는 Command 객체가 필요하다.
따라서 이 Command객체를 사용할 수 있는 AbstractCommandController로 InsertController 클래스를 생성해 준다.
- InsertController 에서 사용할 command 객체를 연결해준다.
form에서 controller로 데이터를 넘기는 객체를 command객체, DB에서 controller로 데이터를 넘기는 객체를 DTO라고 하는데 정석은 두 객체를 따로 생성해주어야 하나 실습 편의사 DB의 column명과 form의 name값을 일치시켜서 하나의 클래스(Board)로 두 객체의 역활을 담당하도록 하는걸로 진행한다.
따라서 InsertController에서 사용할 Command객체로 Board를 연결해준다.
<bean name="/board_insert.do" class="kosta.controller.InsertController">
<property name="commandClass" value="kosta.model.Board" />
</bean>
4. DI 패턴으로 DAO 받아오기
- Jndi 객체 생성
org.springframework.jndi.JndiObjectFactoryBean 클래스의 빈을 선언해준다. property로 jndiName을 설정해줘야 하는데 Server.xml에서 설정해준 Resource 의 name값을 value로 넣어준다.
외부 리소스를 사용하는 것이기 때문에 resourceRef 를 true로 설정해줘야한다.
<bean id="springDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/oracle" />
<property name="resourceRef" value="true" />
</bean>
- Jdbc Template 객체 생성
생성한 Jndi 객체를 받는 org.springframework.jdbc.core.JdbcTemplate 객체를 생성해 준다. dataSource로 위에서 생성한 Jndi의 id값을 넣어주는 이때 객체를 받는 것이기 때문에 value가 아닌 ref로 선언해 줘야한다
<bean id="springJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="springDataSource" />
</bean>
- DAO에 생성한 jdbc객체를 프로퍼티 방식으로 넘겨준다. 이때 넘겨줄 클래스의 변수명이 property의 name값과 일치해야 한다.
<bean id="boardDao" class="kosta.model.BoardDao">
<property name="myJdbcTemplate" ref="springJdbcTemplate"/>
</bean>
- 이제 InsertController객체에서 생성한 DAO를 받아서 사용할 수 있도록 역시 DI패턴의 프로퍼티 방식으로 DAO를 넘겨주자. 위에서 선언한 InsertController 빈에 property하나만 추가해주면 된다. 이때도 InsertController 내부에 선언한 프로퍼티명과 일치해야 한다. ref에는 위에서 생성한 jdbc를 받은 DAO객체의 id값을 넣어주면 된다.
<property name="boardDao" ref="boardDao"></property>
5. List
- 글 작성 후 리스트로 이동할때는 데이터를 가지고 이동할 필요가 없기때문에 리다이렉트를 넣어서 새로운 ModelAndView를 생성해 리턴한다.
return new ModelAndView("redirect:/board_list.do");
- ListController 클래스의 경우에는 Command를 받아야 할 필요가 없으므로 AbstractController를 상속받거나 일반 Controller 인터페이스를 구현해주어도 된다.
이번에는 인터페이스 구현상식으로 작업을 진행했다.
- BoardDao의 list 메소드 생성
boardDorg.springframework.jdbc.core.RowMapper 를 이용해 데이터를 List형태로 리턴받는다. RowMapper를 inner class로 구현하는데 override 메쏘드로 mapRow가 자동 생성된다. command 겸 DTO로 이용할 Board 객체를 생성해서 set을 이용해 값을 셋팅해주는 소스를 작성하면 RowMapper가 알아서 List에 자동으로 add해서 리스트를 돌려주게 된다
- ListController에서 Dao로 부터 받은 list와 view를 지정해서 ModelAndView객체를 넘겨주면 그 객체를 받아서 view를 구현해 준다.
- list.jsp 파일
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
상단에 위 소스를 선언해 주고 루프가 들어가야 할 부분을 <c:forEach>로 감싸주어 구현하면 되는데 이때 items에 MAV로 부터 넘겨준 list를 선언해준다.
<c:forEach var="board" items="${list }">
<tr>
<td>${board.seq }</td>
...
</tr>
</c:forEach>
6. View
- myJdbcTemplate.queryForObject 메소드를 통해 조건에 해당하는 데이터를 가지고 온다.
board = myJdbcTemplate.queryForObject(sql, value, mapper);
7. SimpleFormController
- 글 수정시에 DB에서 기존 자료를 가져오는 DTO와 글 수정후 DB에 저장하는 Command를 가진 Controller두개를 하나로 처리하도록 해주는 컨트롤러이다.
글 수정 폼으로 이동시에는 글 번호를 가진 get 방식으로 이동하고, 글 수정 완료시에는 post방식으로 데이터가 이동하는 것에 착안한것으로 같은 컨트롤러에서 데이터 전송방식에 따라 처리를 다르게 해준다.
- formBackingObject, onSubmit 메소드를 이클립스 소스생성기로 override해준다.
이때 formBackingObject 메쏘드는 super 클래스인 AbstractController 내부에 위치하고 있다.
- formBackingObject 메소드에서 isFormSubmission(request) 를 체크해서 true인경우는 Post방식, false인경우는 Get방식으로 분기 처리해준다.
- Get 경우
view페이지 구현시와 마찬가지로 request에서 seq를 받아서 view 페이지를 연결해준다.
Get할때 연결할 view페이지를 xml에서 property로 선언해서 추가해 주어야 하며, 처리시에 받아온 command 데이터를 호출하기 위해 commandName선언도 해주어야한다.
<property name="formView" value="/board/update_form.jsp"/>
<property name="commandName" value="boardCmd"/>
- Post 경우
수정폼에서 전송한 데이터를 command 객체화 한다.
board = (Board)super.formBackingObject(request);
Post 전송의 경우 formBackingObject 를 거쳐서 onSubmit을 타게 되는데 이때 onSubmit으로 가져가야 하므로 command객체를 xml파일에서 commandClass를 선언해 준다.
<property name="commandClass" value="kosta.model.Board" />
onSubmit 메쏘드 내에서 업데이트 처리 로직을 구현해준다.
- 업데이트 실패시 이전 폼 화면으로 돌아가도록 처리하기 위해서는 exception 처리를 통해 showForm를 호출하면 된다.
업데이트 성공시에는 xml에 선언해 둔 successView 로 이동하게 할 수 있다.
<property name="successView" value="redirect:/board_list.do"/>
xml에 위와 같이 선언해 둔 후 수정 성공 시 setViewName 에 getSuccessView 메소드를 호출하면 된다.
| 아파치 재시작 없이 설정 적용하기!! (0) | 2011/10/31 |
|---|---|
| Spring & Ibatis framework 3 - 2011.10.29 (0) | 2011/10/29 |
| Spring & Ibatis framework 2 - 2011.10.22 (0) | 2011/10/22 |
| Spring & Ibatis framework 1 - 2011.10.15 (0) | 2011/10/15 |
| Java Script Key code (0) | 2011/07/27 |
| 보안관련 정리 (0) | 2011/07/15 |
Spring 2.5, 3.0(Annotation) 두 버전을 조금씩 보기로 한다.
이번주와 다음주는 2.5, 남은 3주는 3.0으로 진행한다.
Ibatis는 Mybatis로 이름이 변경되었으나 편의상 Ibatis로 부른다.
백문이 불여 일타!
실습 위주로 진행한다.
1. 환경설정
- Oracle Database 10g Express Edition 설치
- Apache Tomcat 6.0 설치
- Eclipse Helios 설치
- Spring Container 다운로드
http://www.springsource.org/download
spring-framework-2.5.6.SEC01-with-dependencies.zip 을 다운
2. Eclipse 셋팅
- Tomcat 연결
Windows > Preperences > Server > Runtime Env
Add -> Tomcat 6.0 선택, 파일 위치선택후 완료.
- Workbanch 하단 탭에서 Server 선택 후 빈 화면에 우측버튼 New>Server>Tomcat6 선택후 완료.
- Help > install new software > add
http://springide.org/updatesite 주소 입력후 Core / Spring IDE , Extensions / Spring IDE 설치. (설치 후 재시작 필수)
- 프로젝트에 Spring 연결
프로젝트 우클릭 > Build Path> Configure Build... 클릭 -> Lib 탭에서 다운로드해서 압축을 풀어둔 Spring 2.5 폴더 아래 dist/spring.jar 파일 선택
3. Spring 패턴들
- DI
- AOP
- MVC
- DB : JDBC Template, ORM(ibatis)
(Tiles, Velocity, Bean)
- Validation
- Transaction
- Jason
- DWR
| Spring & Ibatis framework 3 - 2011.10.29 (0) | 2011/10/29 |
|---|---|
| Spring & Ibatis framework 2 - 2011.10.22 (0) | 2011/10/22 |
| Spring & Ibatis framework 1 - 2011.10.15 (0) | 2011/10/15 |
| Java Script Key code (0) | 2011/07/27 |
| 보안관련 정리 (0) | 2011/07/15 |
| 파일내용 일괄 변경 (0) | 2011/06/30 |