'struts'에 해당되는 글 4

  1. 2009.09.17 특정 PC에서 화면이 보이지 않음
  2. 2009.08.27 O 프로그램 구조 분석
  3. 2009.06.10 JPetStore 분석 1 - iBatis
  4. 2009.06.10 JPetStore 설치 - iBatis

특정 PC에서 화면이 보이지 않음

프레임으로 상단메뉴, 좌측메뉴, 메인화면으로 나누어진 구조로 구성된 사이트
특정 PC에서 특정 메뉴에 접근시 메인화면이 나오지 않는 현상이 발생.
그런데 이 사이트는 에러가 잘 남지 않아 담당자가 하루 고생했음.

소스보기를 해서 보니 JSP에서 에러가 발생하고 있음.
Define tag cannot set a null value
검색을 해보면 define 태그에 NULL이 들어가서 발생한듯 함.

메인화면이 나오지 않았던 것은 스크립트에서 에러가 발생해서 화면이 제대로 나타나지 않았음.

담당자가 클러스터링된 서버에서 어떤 서버인지 확인을 해줬다.
3대의 서버에서 에러가 발생하는 JSP를 가져와서 WinMerge로 비교해 보니 에러가 나는 서버의 JSP 파일이 다름.
개발자는 해당 파일을 수정하지 않았다고 함.
음...
정상적으로 동작하는 서버의 파일을 넣어주니 제대로 동작함.

여러 대의 서버로 구성된 환경에서 소스를 변경할 때 일부분만 적용되어서 문제가 발생한다.
이에 대한 방지책이 있어야 할거 같다.
==>[todo] 소스관리 및 적용 프로세스를 만들자.

Tip) 브라우저가 접속된 서버가 어떤 서버인지 알기 위해 서버구분문구를 넣어서 파일을 넣어둔다.
- Server01 서버
/whoami.html
Server01

- Server02 서버
/whoami.html
Server02

- Server03 서버
/whoami.html
Server03

O 프로그램 구조 분석

- do라는 확장자를 가진 요청이 들어오면 스트러츠(Struts2)에서 처리한다.

struts-xxx.xml
xxx_list 라는 요청이 들어오면 xxx.action.XxxAction.findList() 가 호출되면 /jsp/xxx/list.jsp 로 이동하게 된다.

- 스트러츠 액션에서 서비스를 호출해서 사용하면 되는데 우리쪽에서는 모델1 방식이라서 jsp 를 직접 호출하게 되어 있다.
jsp 에서 서비스를 호출하는데 do라는 확장만 호출하게 되어 있는 구조라서 액션에서 편법을 사용했다.[각주:1]
/jsp/xxx/list.jsp 로 이동해서 서비스를 호출해서 데이터를 처리하는 방식을 사용했다.
그런데 BaseAction 에 페이징관련 메서드가 있는 이유를 모르겠다.

- DAO는 iBatis를 사용
예외처리가 세련되지 못함. - 일부 Ajax도 사용
  1. 그런데 jsp 에서 직접 서비스를 호출하는 것을 액션에서 처리하도록 수정하는데 얼마 안걸렸을거 같다. [본문으로]

JPetStore 분석 1 - iBatis

- JPetStore 5.0 Example Application
Struts 1.2, beanaction.jar(23,198  bytes)
iBatis 2

- web.xml
  • *.shtml 는 Struts action에서 처리하도록 함.
  • security-constraint 로 jsp파일을 직접 호출하지 못하게 함.

- /shop/index.shtml
org.apache.struts.beanaction.BeanAction
name=catalogBean
parameter="*"
/catalog/Main.jsp
- /shop/viewCategory.shtml?categoryId=FISH
org.apache.struts.beanaction.BeanAction
name=catalogBean
catalogBean#viewCategory() //비지니스 메서드 호출
/catalog/Category.jsp - BeanAction에서는 parameter 설정이 있으면 name의 해당 메서드 호출
parameter 설정이 없으면 path 에서 마지막 경로에 해당하는 메서드 호출
단, parameter가 *이면 어떤 메서드도 호출 안됨.

- 아래와 같이 특정 확장자에 대한 매핑이 가능

JPetStore 설치 - iBatis

- JPetStore-5.0/build/wars/jpetstore.war 로 배포할 수 있다.
또는
- Eclipse에서 구동시키기
  1. Dynamic Web Project 를 생성한다.
  2. Import
        src : JavaSource
        web : WebContent
        lib : WebContent/WEB-INF/lib

- 기본 설정이 hsqldb로 되어 있으므로 추가적인 설정이나 데이터베이스 없이 바로 구동할 수 있다.

- 다른 데이터베이스로 변경하는 경우에는
  1. JPetStore-5.0/src/ddl/ 의 스크립트를 사용하여 테이블을 생성하고 데이터를 입력한다.
  2. WEB-INF/classes/properties/database.properties 를 설정한다.
  3. Item.xml에서 getItem의 쿼리를 수정한다. : itemid 가 명확하지 않아 에러가 발생하므로 v.ITEMID로 변경한다.