Struts의 ActionForm은 정말 편리하게 데이타를 주고 받을 수 있다.
Struts를 처음 이용하다 보면 redirect를 하지 않고 Forward만을 이용하게 되면서 몇가지 문제가 발생한다.예를들어 꼬리말을 입력한 다음에... 웹페이지를 리로드 시키면 꼬리말이 한개더 추가 되는 문제이다.
문제가 발생하는 이유를 정리하면
1. forward를 시키면 주소창이 변하지 않는다.
2. (꼬리말의 예의 경우) 출력할 문서 정보를 가져가기 위해 View단으로 갈떄 forward를 한다.
3. forward되는 actionForm속에 추가시킨 꼬리말 정보가 같이 들어 있다.
===================================================================
이에 대한 문제 해결 방법은 두가지 가 있다.
- forward가 아닌 redirect를 이용하도록 코딩하는 방법과
- saveToken()을 이용하는 것이다.
==================================================================
일단 먼저 첫번째 방법....
struts에서 action의 retrun type은 ActionForward이다
보통 mapping을 이용해서 mapping.findForward("key값")을 이용하여 기존에 매핑된 정보를 리턴하는데,위의 경우 새로운 정보를 추가할 수 값 없다. 예를 들어 no=11이라는 쿼리스트링을 추가하고 싶어도 매핑을 이용한 방법은 새로운 쿼리스트링을 추가 할수 없음으로 리턴값으로 ActionForward를 새로 만들어 주는 것이다.
return new ActionForward("path", true);
위에서 path에 String 타입으로 원한는 경로(아마 액션이 되겠지)랑 쿼리 스트링을 붙이고 , 뒤에 boolean 값은 redirect유무니 true로 하여 redirect를 시키자....
return new ActionForward("/test/view.do?no=11", true);
모양으로 되겠지.... path은 contextRelation임으로 /로 시작함을 잊지 말자.
* 하지만 위의 경우 로딩된후 리로드에 대해서는 보호 되지만... 로딩되는 과정에서 다시 리로딩을 눌리는 경우에는 안전성을 보장하지 않는다....
======================================================================
그럼 본론인 saveToken()에 대해 알아보자
원리..... 일단 모델이 beforeAction => JSP =>afterAction 형태로 사용된다.
beforeAction에서 saveToken메서드를 실행시키면 requestScope과 sessionScope에 랜덤으로 ID 를 만들어 각각 저장한다. sessionScope에 장장된 ID는 당연히 보장 될 것이고....
requestScope에 저장된 ID는 JSP페이지에 Hidden 형식의 태그를 생성하여 atterAction까지 이어진다.
******** hidden타입이 생긱기 위해서 <form>을 사용하면 안돼고 struts-html의 사용자 정의 태크인 <html:form>을 반듯이 이용해야 한다.
afterAction에서 두 스콥의 ID를 비교하여 일치하면 true를 아니면 false를 반환한다...
-----------------------
간단 코드로 살펴보면
*** beforeAction
saveToken(request);
코드를 삽입 토근생성한다.
****JSP
<html:form>
을 작성...
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="랜덤함 키값">
위와 같은 hidden이 자동 생성된다.
*** afterAction
if (!isTokenValid(request)) {
//일치 여부 검증 틀렸을 경우 여기 실행... 조건문 앞에 ! 있다는 사실....
}
resetToken(request); //일치할 경우 토근을 지운다.
// 일치할 경우 실행된 액션
출처: http://blog.naver.com/raiyung?Redirect=Log&logNo=150007224789
'개발관련 > 웹개발' 카테고리의 다른 글
마우스 오른쪽 클릭 안되게 하기 (1) | 2008.03.06 |
---|---|
이미지로 submit버튼 만들기 (0) | 2008.01.19 |
XML공부사이트 (0) | 2007.11.02 |
메타태그 (2) | 2007.10.17 |
코드별 정리 자료 (0) | 2007.10.17 |