Whiteship's Note


DisplayTag 링크 기능



참조 : http://displaytag.sourceforge.net/11/tut_links.html

<display:column property="name" title="이름" href="detail.do" paramId="id" paramProperty="id" sortable="true" />
이런식으로 지정해 주면 detail.do 로 링크가 생기며 이 링크로 객체의 id를 id라는 이름으로 넘겨 줍니다.

이것을 받아서 member 한명에 대한 정보를 뿌리는 controller를 만듭니다.
id로 넘어온 id를 받은 뒤 그것을 가지고 member 객체를 가져오고 다시 member 객체를 detail이라는 view와 함꼐 ModelAndView 객체에 담아서 리턴합니다. 그럼 viewResolver에 의해서 detail.jsp를 찾아가게 될 것입니다.

JSTL을 사용하기 위해 taglib을 지정해 주고 이 페이지에 member객체가 넘어 왔을 테니깐 "${member.name}" 이런식으로 사용해주면 됩니다.

사용자 삽입 이미지

결과는..
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

Write a comment.


Validator 사용하기



앞에서 만든 검색창을 사용할 때 빈 값을 넣으면 에러 메시지가 오른쪽에 출력하도록 하고 싶어졌습니다.

사용자 삽입 이미지

저렇게 해주고 싶으면 먼저 Validator가 필요하고...Controller에 Validator를 등록해줘야 하고...View에서 에러 출력할 부분을 표시해 줘야 합니다.

1. Validator 구현하기

public class SearchingValidator implements Validator {

    @SuppressWarnings("unchecked")
    public boolean supports(Class clazz) {
        return MemberCommand.class.isAssignableFrom(clazz);
    }

    public void validate(Object obj, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "keyword", "required", "Field is required.");
    }
}

위 코드는 Spring Reference 13.9.12에 있는 error tag 부분에 있는 소스를 거의 그대로 사용했습니다. 여기에 있는 코드를 보기 전에는 Pro Spring을 보고 아래처럼 구현했었습니다. 전 위가 더 간단해 보이고 편했습니다.
2. Controller에 등록하기.

    <bean name="/search.do"
        class="member.web.SearchMemberController">
        <property name="memberRepository" ref="memberRepository" />
        <property name="validator" ref="searchingValidator" />
    </bean>

    <!-- Validator 등록 -->
    <bean name="searchingValidator" class="validator.SearchingValidator"/>

3. View에 자리잡기.

        <table>
            <tr>
                <td>SEARCH:</td>
                <td><form:input path="keyword" /></td>
                <td><form:errors path="keyword" /></td>
                <td><input type="submit" value="GO" /></td>
            </tr>
        </table>

4. 실험해 봤습니다.
사용자 삽입 이미지

수고했삼~

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

TAG validator

Write a comment.


검색창 하나로 모든 필드에서 검색하기.



검색을 할 때 하나의 창에 입력한 값이 멤버와 관련된 어떠한 필드에 포함되더라도 검색을 하도록 구현했습니다. 입력한 값으로 모든 필드를 뒤져보면 되겠죠. 몇일 전 찬욱이가 모든 필드를 나타내는 키워드는 없는지 궁금해 했었는데 궁금해 하는 이유를 물어보다가 이런 기능을 구현할 때 있으면 편하겠구나 하는 생각이 들었는데 찾아보질 않았네요.

애니웨이... 실험해 봤습니다.
사용자 삽입 이미지
결과
사용자 삽입 이미지
이번에는 blog 주소로 검색을 해봤습니다.
사용자 삽입 이미지
결과
사용자 삽입 이미지

흠... 잘 되는 군요.

Good Job! 이제 검색 메뉴를 없애고 검색을 리스트 화면에 합쳐 놓고 리스트 부분만 갱신 되도록 바꿔봐야겠습니다. 검색할려고 다른 곳으로 이동한다는 것이[각주:1]귀찮기 때문이죠.
  1. 눈으로 메뉴를 찾고 클릭을 해야 하고 입력할 곳을 눈으로 찾고 다시 엔터나 클릭을 해야 한다는 번거로움 [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

  1. Favicon of http://evilimp.tistory.com BlogIcon evilimp 2007.02.08 08:29 PERM. MOD/DEL REPLY

    이런검색은 레코드가 많아질 경우를 미리 생각해봐야한다는거....
    그리고 약간의 추가 요구사항이라고 하면 해당 검색어는 하이라이트 시켜주는게 어떨까?
    검색어가 어떤 컬럼에서 검색되었는지 사용자가 알 수 있으면 좋잖아? :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.02.08 09:30 신고 PERM MOD/DEL

    맞아요!!

    찬욱이랑 얘기했었던 건데요. SQL에 모든 필드를 나타내는 키워드는 없나요?

    하이라이트를.. 생각했었는데요. 그거 어떻게 해야될지 한 3초 생각하다가 말았는데 무슨 방법이 있을까요?

    Favicon of https://evilimp.tistory.com BlogIcon 사각퉁 2007.02.08 10:33 신고 PERM MOD/DEL

    그런건 없지....
    검색하고자 하는 컬럼들에 대해서 일일이 날려야지 뭐...
    (또 모르겠다 내장함수나 그런것들이 뭐가 있을런지는...)
    하이라이트 기능은 뭐 단순해....
    문자열치환하면 끝....한마디로 블로그를 검색했다고 가정을 하면 whiteship이라는걸 문자열 치환을 해주는거지 <font color="red">whiteship</font> 이런식으로....
    단순무식한 방법이긴하지만-_-;;;

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2007.02.08 11:58 PERM MOD/DEL

    흠...그렇군요. 하지만 어떻게 해야될지는 아직 감이 안잡히네요. customTag를 만들어서 그걸로 둘러 싼 다음에 그 안에 있는 글자들 다 읽어 들여서 치환 해주면 될 듯 하기도 하구요. 흠.. 근데 displayTag나 JSTL을 써서 문자열이 직접 보이지가 않는데 치환이 될런지..@.@

Write a comment.


SimpleFormController 에피소드2



아래 발생한 문제는 SimpleFormController와는 전혀 관계가 없는 내용일 수도 있다는 것을 미리 알려드리고 시작해야겠습니다. 이유는 결론을 보시면 알게 되실듯.

사용자 삽입 이미지
위와 같은 리스트가 있습니다. 오호 분명히 "기선"이라는 사람이 매우 많이 있습니다. 왼쪽에 있는 search로 이동해서 "기선"을 찾아 봅시다.

사용자 삽입 이미지
이렇게 기선을 입력하고 enter 또는 search 버튼을 클릭했더니 다음과 같은 화면이 출력 됐습니다.

사용자 삽입 이미지
헐...출력할 것이 없다니.. 도대체 어디서 문제가 생긴거야???

1. 소스코드를 점검하기 시작합니다. JSP와 Controller를 점검하기 시작했습니다.

처음에는 command 객체에 값이 들어가지 않는 것 같다는 생각이 들었습니다. 중간에 출력문을 한번 넣어보면 될 것을[각주:1] 아직까지도 SimpleFormController가 어떻게 동작하는 것인지 제대로 모르기 때문에 그 떈 더욱 더 Command 객체에 값이 언제 들어가는 것인지 알 수가 없었습니다.

그리고 두번째는 지난 글에서 의문이 들었던 command 객체를 도메인 객체로 써야 하는건가? 싶어서 Member로 바꿔서도 해봤습니다. 결과는... 여전했습니다.

2. 조금더 공부하다가 Command 객체에 값이 들어갔는지 확인해봤습니다. 세상에 값이 들어가 있었습니다. 값이 들어가 있긴 한데... 한글이 깨져있더군요.

message 출력: ?¸°???

-_-;; 난감했습니다. 이전에 DB 인코딩 문제로 한참을 해맸었는데 또다시 인코딩문제인가.. ㄷㄷㄷ 거리고 있었는데 다행히 한수형이 알려주셔서 web.xml에 다음과 같이 코드를 넣어줬더니 한글이 제대로 보였습니다.

3. 좋았습니다. 이제 콘솔에 찍어보니 한글도 제대로 보이고 검색을 날렸는데... 여전히!! 못찾는겁니다. 왜?? 도대체 왜!! 못찾는거야.. 하면서 iBATIS에 SQL을 확인하러 갔습니다... 세상에...ㅠ.ㅠ
like로 바꿔야 겠어요. 흐흐흐흐흐흐흐


  1. 소스코드에 주석처리 된 부분입니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

Write a comment.


SimpleFormController 에피소드1



이녀석을 공부하는 어제부터 현재까지 여러 가지 에피소드들이 있었습니다. 발생한 의문들에 자문 자답을 해봅니다.

1. SimpleFormController가 어떻게 흘러가는 건지 이해가 되지 않았습니다.

AbstractController는 ModelAndView 객체에 요청을 처리할 view이름과 그 view에서 사용할 객체를 전달해 주었습니다. 그런데 이녀석은 그렇게 처리하기엔 뭔가.. 허전하다고 느껴지거든요. 자신에게 어떤 요청이 들어왔다는 것은 무엇을 입력할 곳을 찾아 왔다는 것이고[각주:1] 그럼 일단 그 화면으로 이동을 해줘야 하고 그 때 사용자가 입력할 데이타를 받아들일 객체가 있어야겠습니다. 아마도 그녀석을 Command 객체라고 부르는 것 같습니다. 일단 여기까지는 AbstractController와 비슷합니다. 하지만 여기서 끝나면 안되겠죠. 사용자가 입력을 마치고 엔터를 쳤을 때 또 다시 요청이 날아오게 됩니다. 이것도 역시 처리를 해줘야겠죠. 이 요청도 처리를 합니다. 생성자에 setSuccessView("결과를 보여줄 view 이름") 을 생성자에 추가해주면 그쪽 페이지로 이동하게 됩니다.

1.1. Command 객체는 뭔가?

도메인 객체인가? 아닌것 같다는 생각이 듭니다. 물론 도메인 객체를 써도 되겠지만 Command 객체는 사용자가 입력한 값을 받아 오는 역할을 하는 객체이고 만약 사용자가 입력하는 정보다 여러개의 객체에 걸쳐있는 값들이라면 그 때는 도메인 객체만으로는 처리할 수 없겠죠. 아마 그럴 땐 Command 객체를 하나 만들어서 그 안에서 해당 객체에 정보가 들어가도록 처리를 해야될 것 같습니다.

1.2. ModelAndView 객체에는 여러 객체가 들어갈 수 있는 건가?

add("이름", 객체) 형태의 메소드로 여러 객체를 ModelAndView에 붙여 줄 수 있습니다. 그리고 여기서 붙인 객체들은 "첫번째 요청에 의해 보여지는 페이지"와 "두번째 요청에 의해 보여지는 페이지"[각주:2]에서 모두 사용이 가능합니다.
  1. 검색을 하기 위한 링크를 클릭 했다든가 회원 가입, 글 쓰기등의 버튼을 클릭했을 것입니다. [본문으로]
  2. success view에서 요청한 페이지 [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

  1. joshua 2007.03.27 18:16 PERM. MOD/DEL REPLY

    감사합니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.03.27 18:37 신고 PERM MOD/DEL

    넵..1.2 질문에 요즘에 알게된 방법으로는...
    Map 객체를 넘겨주는 건데요. add("이름", 객체) 이렇게 계속 붙이는 거 보다 더 깔끔한거 같습니다.

    ModelAndView("뷰이름", Map객체);

    이렇게 주는거죠.

Write a comment.


Spring's form tag



참조 : http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html#mvc-formtaglib

JSP 맨 위에
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

이렇게 올려놓고...
<form:form commandName="searchMember">
    <table>
        <tr>
            <td>Name:</td>
            <td><form:input path="name" /></td>
        </tr>
     </table>
</form:form>
요론식으로 쓰면 된다길래 해봤는데...다음과 같은 에러 메시지 나옵니다.

org.apache.jasper.JasperException: /search.jsp(3,5) Invalid standard action

맨위에 올려놓은 <%@ taglib ..%> 이 부분을 없애면 페이지를 읽긴하는데 저게 없으니까 Spring form tag를 쓸 수가 없고(이걸 써보려고 한건데 못쓰게 되면 안되는뎅;) 저걸 붙이면 에러가 나오고.. 흠.. 왜이러나.. ㅠ.ㅠ

아래는 search.jsp 코드 전부 입니다.

헉.. 포스팅 하자마자 문제 해결...

jsp 1.2  문법을 보니깐 xml에서는 taglib을 <jsp:root xmlns:이름="uri" >이렇게 지정해 주고 쓰는 거군요.

위에 있는 코드 윗 부분을 아래 처럼 수정을 하면 제대로 tag가 먹힙니다. 나이스!!  :)
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:display="urn:jsptld:http://displaytag.sf.net"
    xmlns:form="http://www.springframework.org/tags/form">

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

Write a comment.


DisplayTag과 SpringMVC



SpringMVC의 컨트롤러에서 원하는 페이지 이름(여기서는 index)으로 memberList 객체를 memberList라는 이름으로 전해 줬습니다.
그리고 .jsp로 가도록 View Reslover를 등록 해뒀기 때문에 index -> index.jsp에 membeList객체를 들고 찾아갑니다. 그래서 index.jsp에서는 다음 처럼 dispalyTag에 바로 이 memberList 라는 이름을 사용했더니 어젯밤에 잠들기 전에 본것과 같은 화면이 출력됐습니다.
위 코드는 컬럼명을 원하는 이름으로 주고(title), 페이징을 하고(pagesize), 컬럼별로 정렬이 가능하도록(sortable) 했습니다. 아. 그리고 exel, pdf, cvs(?), rtf(?) 형식의 파일로 데이타를 추출해 낼 수 있도록 했습니다.(export=true)
사용자 삽입 이미지
이런 화면이 보입니다. 원하는 대로 된 것 같지만... 페이지 번호를 눌러보고 메뉴별로 눌러서 정렬을 해보려고 하면 다음과 같은 에러를 만나게 됩니다.
사용자 삽입 이미지
=> page 번호 클릭 했을 때 발생하는 에러

사용자 삽입 이미지
=> 컬럼이름을 눌러서 정렬하고 싶었는데 발생한 현상

다음과 같이 수정을 하면 원하는 대로 동작합니다.
추가 or 수정한 부분을 빨간표시를 했습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
top

Write a comment.


DisplayTag 배끼기



DisplayTag 예제에 있는 css와 img파일을 가지고 마치 제것인양 써봤습니다.
사용자 삽입 이미지
이전에 jstl을 사용해서 table을 출력 했던 화면을 DisplayTag를 사용하도록 바꾸려고 생각했는데예상 한 것 보다 시간이 오래 걸렸습니다. 그래도 위처럼 이쁘장한 화면으로 베낄 수 있었다는 것에 만족하며 잠들어야 겠습니다.

원래의 화면과 비교를 해보시면... 저의 만족감에 공감하실 수 있을지도...
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
top

  1. Favicon of http://seal.tistory.com BlogIcon 물개선생 2007.01.31 08:23 PERM. MOD/DEL REPLY

    100% 공감합니다. 흐흐~

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2007.01.31 10:34 PERM MOD/DEL

    하핫 ^^ 옷이 날개라는데...
    웹에서는 css가 날개 인듯해요.

Write a comment.


주소록 개발 카탈로그



프로젝트 시작
* 요구 사항 인터뷰
개발 준비 작업
* 프로젝트 생성 + jar 파일 추가
* MySQL 설치 + 사용
* MySQL Connector Down + testAdd()
신나게 개발
개발 도중 공부
중간 점검
* 수정해야 할 것들
* 중간점검
에피소드
* Alt + Shift + X, R 주의
* DB 인코딩 문제
* MySQL 설치 시 주의 할 점



'Spring > 주소록 만들기' 카테고리의 다른 글

SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
top

  1. 한산 2006.12.30 00:28 PERM. MOD/DEL REPLY

    아 이게 준비하고 있는 주소록이군요. -_- 방금 유재석이 방송 연예 대상 탔음 ㅎㅎㅎ
    하이버네이트 잠깐 봤는데 신기하네요.. 스터디때 잠깐 질문을 하도록 할게용..

    이유야 어찌되었건 밑에 댓글단것에 대해서 많이 미안하네요..
    연말 잘 보내시고.. 춥습니다.. 감기 조심하삼...

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.30 00:42 신고 PERM MOD/DEL

    ㅇㅇ만들고 있는데 슬슬 끝이 보여서 정리좀 했지.

    뭐 그럴 수도 있지. 시행착오는 누구나 겪는거니깐.. 나도 그랬었고~ 너도 연말 잘 보내고. 감기조심해.

  2. Favicon of https://zerry82.tistory.com BlogIcon 동자~ 2006.12.30 01:33 신고 PERM. MOD/DEL REPLY

    와 대단한 정리다..

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.30 09:41 PERM MOD/DEL

    뭐그리 대단한건 아니고...너무 정신이 없길래 한번 정리해봤어;

Write a comment.


JSP 화면 작성



참조 : Spring MVC 어플리케이션 개발 <9> JSP 화면 작성

이전에 컨트롤러를 만들고 viewResolver를 등록해서 적당한 jsp파일에 적당한 객체가 주어지도록 했습니다.[각주:1] 하지만~ 그 객체를 써먹진 않고 그냥 "OK~"만 화면에 출력을 했었습니다.

이번에는 jstl을 사용해서 전달 받은 객체를 가지고 화면에 출력하는 jsp페이지를 만들겠습니다.

JSTL을 사용하기 위해서는 jstl.jar파일과 standard.jar파일이 필요합니다. 이 파일들은 http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 이곳에서 Taglib를 다운 받아 압축을 풀면 lib 디렉토리에서 찾을 수 있습니다.

위 두 파일을 WEB-INF/lib 폴더에 복사해서 추가를 한 뒤 index.jsp파일을 다음과 같이 수정했습니다.

그리고 프로그램을 실행시켜 봅시다.
사용자 삽입 이미지

휴~ 기나긴 여정의 끝이 보이기 시작합니다.

앞으로 남은 일

1. 삭제하기 버튼을 클릭했을 때 정말 삭제할 것인지 확인 하는 팝업 창이 뜬 뒤에 수정을 해주고 다시 리스트를 뿌려주는 일.

2.수정하기 버튼을 클릭했을 때 수정하는 화면으로 넘어가는 일

3.수정하기 화면에서 수정 완료 버튼을 클릭하면 수정이 완료되었슴을 알리는 글자를 출력하고 다시 이 화면으로 넘어 오는 일

4. 새로운 멤버 추가 버튼(Add)을 클릭하면 새로운 멤버의 정보가 추가되었슴을 알려주고 다시 위 리스트를 보여주기.

  1. index.jsp 파일에 memberList 객체를 memberList 라는 이름으로 전달해 주었습니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
top

Write a comment.


Spring MVC configuration 파일들 설정 하기



참고 : Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성

먼저 앞에서 만들어 둔 컨트롤러를 기존의 WebApplicationContext[각주:1]에 등록해준 Controller를 수정하여 등록합니다.
<!-- Controller 등록 -->
    <bean name="/index.do"
        class="member.web.MemberListController">
        <property name="memberRepository" ref="memberRepository" />
    </bean>
컨트롤러에서 사용한 memberRepository 변수를 IOC를 사용하여 연결 시키고 있습니다.

memberRespocitory 빈을 applicationContext.xml에 다음과 같이 등록 하고 WEB-INF/spring폴더를 만들고 그 안에 넣어둡니다.
    <bean id="memberRepository" class="net.webapp2.member.service.MemberRepositoryImpl">
        <property name="memberDao" ref="memberDao" />
    </bean>
</beans>

위에서 사용하는 memberDao 빈은 daoContext-member.xml에 정의해 둡니다.
<bean id="memberDao" class="net.webapp2.member.dao.SqlmapMemberDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

그리고 여기서 사용하는 sqlMapClient는 daoContext.xml에 정의해 둡니다.
<bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation"
            value="WEB-INF/ibatis/sql-map-config.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>

iBATIS와 연동하는 부분이네요. iBATIS는 WEB-INF/ibatis폴더에 sql-map-config.xml을 만들어서 넣어 줍니다. 지금 까지 설정한 파일들의 대부분은 기존의 Spring MVC를 제외한 상태에서 만들었던 프로젝트에 있던 파일들입니다. 따라서 적당한 위치로 복사해 주면 될 것 같습니다.

지금까지 설정해준 설정 파일들은 web.xml에서 읽어 들이도록 다음과 같이 코딩을 합니다.
<!-- Spring Context Config Location -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/daoContext-member.xml
            /WEB-INF/spring/applicationContext.xml
            /WEB-INF/spring/daoContext.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

사용자 삽입 이미지

  1. addressBook-sevlet.xml [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
top

Write a comment.


MVC 컨트롤러 작성



참고 : Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성

현재 진행 중인 이클립스 프로젝트(webAddress)에서 src폴더에 member.web 패키지를 만듭니다. Spring에서 제공하는 AbstractController를 상속받는 MemberListController 클래스를 생성합니다.

package member.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class MemberListController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }

}


Member의 List를 반환하도록 handleRequestInternal() 메소드를 구현합시다. 그 전에 arg0과 arg1을 request와 response로 보다 명확한 이름을 사용하도록 바꿔줍니다.

구현하기전에 Spring MVC에 손대기 전에 만들어 두었던 Service, DAO, Domain layer를 구현했던 코드를 jar파일로 묶어서 WEB-INF/lib에 추가해줍니다. 그리고 개발 할 때 사용한 jar파일들도 추가해 줍니다.

public class MemberListController extends AbstractController {

    private MemberRepository memberRepository;

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        List<Member> memberList = memberRepository.getAllMembers();
        return new ModelAndView("index", "memberList", memberList);
    }

    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

Member의 List를 jsp에서 사용할 수 있도록 위와 같이 코딩을 합니다.
녹색 글자 부분은 MemberRespository[각주:1]를 Spring의 IOC를 이용하기 위한 것입니다.
파란 글자 부분은 기존에 구현해 둔 MeberRepository를 사용하여 Member 리스트를 가져오도록 코딩을 했습니다.
보라색 부분은 "index"라는 View 이름에게[각주:2] memberList(세번째 인자)를 memberList(두번째 인자)라는 이름으로 참조 할 수 있도록 던지는 부분입니다.

이제 코딩은 끝났고 환경 설정 파일을 이리 저리 바꿔주고 옮겨주는 일이 남았습니다.

  1. Service Interface입니다. [본문으로]
  2. View Resolver에서 해당하는 파일 이름으로 변환해 줍니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
top

Write a comment.


화면 작성



참고 : Spring MVC 어플리케이션 개발 <4> 화면 요구 작성

html 공부 중
html 공부 중 2탄
주록 화면 완성

이렇게 세 번에 걸쳐서 html로 기본 골격을 만들었습니다. 개발 하다가 공부 하다가 개발 하다가 공부 하다가 이렇게 되다보니 시간이 오래 걸리고 있습니다. 목표가 두 가지(개발 & 공부)이기 때문에 어쩔 수 없는 현상이라고 생각하며 새로 알게 되는 것이 많아져서 기분이 좋습니다.

이 골격을 만들면서 생각한 것은 화면을 만들어보니 요구 사항이 더 명확해 진다는 것입니다. 사용자 입장에서 만들어진 화면을 보니 새로운 요구 사항이 새록새록 생겨나기 시작했습니다. 진작에 화면 부터 만들어 볼 껄 하며 '화면 만들기의 중요성'을 느꼈습니다.


'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
top

Write a comment.


Alt + Shift + X, R 주의



이전 글의 에러 발생 원인을 찾던 중...

어떻게 해도 계속 비슷한 404 화면만 보여질 뿐 뚜렷한 해결방법이 보이지 않았습니다. 그래서 jsp파일도 최대한 간추려보고 Handler Mapping도 명시적으로 등록도 해보았습니다.
<!-- Handler Mapping 등록 -->
    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
그리고 찬욱이의 조언대로 log4j도 등록해서 원인을 찾으려고 web.xml에 log4j도 등록해 두었습니다.

<!-- Log4J Config Location -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
log4j설정 파일인 log4j.properties파일은 springkorea에 있는 것을 가져다 썼습니다. 하지만 무엇이 잘못됐는지 로깅 메시지를 볼 수 없었습니다. log4j에서 좀만 더 공부하면 뭔가 이해할 수 있을 것 같은데 내일 한번 알아봐야겠습니다.

이 모든 것들을 해보았는데 여전히... 같은 결과... OTL...

수십번 정도의 Alt + Shift + X -> R 을 클릭하고 있던 저는 지쳐서 마우스만 가지고 실행시키기 위해서 프로젝트 이름 위에서 오른쪽 마우스 클릭 -> Run as -> Run on Server를 클릭하였습니다.

헉!!....

사용자 삽입 이미지

Alt + Shift + x -> R 로 Run on Server 하지 맙시다. 저처럼 되는게 안 될 수도 있는 현상이 벌어집니다. ㅠ.ㅠ

'Spring > 주소록 만들기' 카테고리의 다른 글

주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
top

  1. Favicon of http://chanwook.tistory.com/ BlogIcon 찬욱 2006.12.25 23:51 PERM. MOD/DEL REPLY

    log4j properties 파일을 build 폴더(class 파일이 들어 있는 폴더)바로 밑에 넣어두고 해보세요~^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.26 00:01 신고 PERM MOD/DEL

    혹시나 해서 해봤지만 같은 결과~

    web.xml에서 log4j.properties파일의 경로를 WEB-INF/log4j/log4j.properties로 지정해 줬기 때문에 경로 문제는 아닌거 같고~ 아마 내용에서 뭔가 수정해 줘야하지 않을까~ 싶은데 모르겠군~ 졸려서 내일 좀 더 알아봐야겠어.

Write a comment.


Web Application Context 작성



참조 : Spring MVC 어플리케이션 개발 <3> Web Application Context 파일 작성

Spring Reference에 Dispatcher와 WebApplicationContex와의 관계를 나타낸 그림이 있어서 퍼왔습니다.
사용자 삽입 이미지
앞에서 addressBook-servlet.xml로 .do로 끝나느 요청을 넘기기로 했고 지금 이 글에서 작성해야할 addressBook-servlet.xml을 예전에는 hanlderMapping이라고 머릿속으로 단순화 시켜서 인식하고 있었는데 그게 아닌 것 같습니다. addressBook-sevlet.xml은 WebApplicationContext이고 이 안에 Handler Mapping, View Resolver, Controller들을 등록해 둘 수 있는 것 같습니다.

web/WEB-INF 폴더 안에 addressBook-servlet.xml 이라는 파일을 생성합니다.
Spring 2.0에서 XML 기반의 configuration metadata의 기본 포맷은 다음과 같습니다.

<?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-2.0.xsd">
  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
</beans>

이제 여기에 Handler Mapping, View Resolver, Controller들을 넣어 봅시다.

Handler Mapping은 요청이 들어온 URL에 따라 어떤 컨트롤러가 사용되어야 하는지 매핑시키는 것으로 이해를 했는데 아무것도 지정해 두지 않으면 bean이름으로 매핑 시킨다고 하는데 흠~ 공부가 필요한 부분입니다.

View Resolver는 view를 실제 파일 이름으로 변환해주는 변환기 역할을 한다고 합니다.

 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>

위와 같이 등록해 둡니다. view앞에는 /WEB-INF/jsp/ 를 붙이고 뒤에는 .jsp를 붙여서 실제 파일을 찾을 수 있도록 합니다. viewClass 속성은 jsp가 JSTL을 사용할 때 적어주는 것 같습니다.

Controller차례인데요. 먼저 Handler는 요청을 처리하는 Controller의 메소드 단위 라고 합니다. 역시 이 부분도 공부가 필요할 것 같습니다. 이것을 다음과 같이 설정합시다.

<bean name="/index.do"
  class="org.springframework.web.servlet.mvc.ParameterizableViewController">
  <property name="viewName" value="index" />
 </bean>

index.do 요청이 발생하면 ParameterizableViewController로 요청이 넘어가고 이 녀석은 view 이름으로 index를 반환해 줍니다. 그럼 이것이 View Resolver를 타고 /WEB-INF/jsp/index.jsp 를 찾게 됩니다.

이제 addressBook-servlet.xml 파일은 다 만든것 같습니다.

실제 web/WEB-INF 폴더 밑에 jsp라는 폴더를 만들고 그 안에 index.jsp 파일을 만듭니다. index.jsp파일은 제대로 돌아가는지 확인하기 위해 "오~케이!!!"가 출력 되도록 간단히 만들어 봤습니다.

그리고 서버를 가동 시키면....
사용자 삽입 이미지
헉... 이렇게 나오네요;; 음~ 각본에 없던 것이 발생했습니다.

원래대로면 Jstl.jar파일이 없어서 에러가 발생해야 하는데..왜 404가 뜨는지 모르겠군요. 분명히 addressBook-servlet.xml파일은 존재하는데;; 일단은 문제가 발생했으니 여기서 STOP해야겠습니다.

=> 문제 해결 됨. 서버 에서 실행(Run on Server)를 할 때 Alt + Shift + x -> R 단축키를 사용하지 말고 프로젝트 이름 우클릭 -> Run as -> Run on Server 클릭하면 됩니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
top

  1. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.25 21:20 신고 PERM. MOD/DEL REPLY

    log4j 등록하고 로그 확인해 보세요.
    404 error가 아닌 다른 설정 에러가 발생해도 404로 나오는 경우가 만더라구요~^^

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.25 22:51 PERM MOD/DEL

    그렇군..제사도 끝났으니 다시 해봐야겠어. 영회형이 정리를 매우 잘 해 놓으셨더라고. 역시 대단하셔.

    Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.25 23:18 신고 PERM MOD/DEL

    인정!ㅎ

Write a comment.


Spring MVC 구동을 위한 web.xml 작성



참조 : Spring MVC 어플리케이션 개발 <2> Spring MVC 구동을 위한 web.xml 작성

Spring MVC 공부중에서 찬욱이와 열띤 토론이 있었던 dispatcher를 설정하는 부분인 것 같습니다.

앞에서 만든 웹 프로젝트를 보면 이클립스에서 만들어준 web폴더 -> WEB-INF 안에 보면 web.xml이 있습니다. 그 파일을 보시면 다음과 같습니다.

<display -name>은 어디에 표시가 되는건지 모르겠지만 웹 사이트에 대한 간략한 설명이 들어가면 좋을 것 같습니다.
<webcole-file-list>는 대문으로 쓰일 수 있는 파일 이름들이 쭉~ 나열되어 있는데 현재 대문역할을 하는 파일은 index.html밖에 없으니 나머진 지워도 될 것 같습니다.
따라서 다음과 같이 수정합니다.

그리고 이제 Dispatcher를 추가합니다. Dispatcher는 Spring에서 front controller역할을 하는 것으로 특정 URL의 요청을 처리할 Contoller를 찾아 주는 Handler Mapping을 등록해둡니다.

<!-- Spring Front Controller 등록 -->
    <servlet>
        <servlet-name>addressBook</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>addressBook</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
.do로 끝나는 요청들을 addressBook-servlet.xml로 보내도록 설정했습니다.


설정 내용 중에 보시면 org.springframework.web.servlet.DispatcherServlet을 사용하고 있습니다. 따라서 spring.jar파일을 web/WEB-INF/lib에 넣어줍니다. 그러면 자동으로 Web App Libraries로 lib폴더에 들어간 spring.jar파일을 인식하게 됩니다.
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
top

Write a comment.


이클립스에서 웹 프로젝트 생성하기



참조 : Spring MVC 어플리케이션 개발 <1> 프로젝트 디렉토리 생성

new -> 프로젝트를 클릭하고 web -> dynamic web project를 선택합니다.
사용자 삽입 이미지

next를 클릭한 뒤에 적당한 프로젝트 이름을 적고 꼭 target server를 지정해 줘야 합니다. tomcat5.5 지정 해주고 설치된 폴더를 찾아주면 됩니다.
사용자 삽입 이미지

이제 next를 두 번 정도 누르면 아래 화면이 보이는데 이 때 컨벤션을 지키기 위해서 content directory를 WebContent에서 web으로 바꾸고 finish를 합니다.
사용자 삽입 이미지

이렇게 생성된 프로젝트를 보면 아래와 같습니다.
사용자 삽입 이미지

제대로 돌아가는지 확인을 하기 위해서 web폴더에 index.html파일을 만듭니다. index.html파일의 내용은 다음과 같습니다.
<html>
 <head>
  <meta http-equiv="Refresh" content="0;URL=index.do">
 </head>
</html>

index.do페이지를 읽도록 요청한 것 같습니다. 보안과 관련되어 있다고 하는데 자세히는 모르겠군요.

이제 끝났습니다. Art + Shift + x 를 클릭하고 R 을 클릭하면 새로운 서버에서 구동할 것인지 기존 서버에서 구동할 것인지 선택하는 화면이 나오는데 여기서 next를 클릭해 보시면 다음과 같이 서버에서 구동하게 될 어플리케이션이 오른쪽에 위치된 상태를 확인한 뒤 finish를 클릭하면 됩니다.
사용자 삽입 이미지

이 때 이클립스 내장 브라우져가 실행이 되는데 IE나 FireFox 브라우져로 확인하고 싶다면 window -> web browser에서 원하는 브라우져를 선택하면 됩니다.
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
top

Write a comment.


Spring MVC 공부 중



Spring MVC가 작동하는 전체적인 그림은 Spring Reference에 있는 그림을 참고 하면 다음과 같습니다.
사용자 삽입 이미지
그림에 순서가 적혀있지 않아서 번호를 붙여 봤는데 아무래도 저렇게 동작할 것 같습니다. Spring In Action에도 이와 비슷한 그림을 본 것 같아서 찾아 봤습니다.
사용자 삽입 이미지

Spring Reference에 있는 그림보다 깔끔한것 같습니다.

Dispatcher Sevlet은 흔히 web.xml 파일을 말하며에 <servlet>태그로 설정하며  이것이 Spring Reference에 있는 front controller에 해당합니다.

Handler Mapping은 요청에 따라 어떤 controller 객체가 사용될지에 대한 정보를 가지고 있으며 web.xml에 bean 설정파일에 하나 이상의 Handler Mappling들이 등록되어 있습니다.을 등록할 수 있습니다.

Controller는 Handler Mapping에 전부 등록이 되어있고 POJO 형태이고 DI를 사용합니다. ModleAndView 객체를 반환하는 메소드들이 있습니다.

ViewResolver는 반환된 ModelAndView 객체를 View에 맵핑합니다. 여기서 궁금한 것은 Handler Mapping과 분리 된 파일에 정의 해 둘 수도 있고 같은 곳에 둘 수도 있겠죠?? 아마 그래서 Spring In Action에서는 따로 그리고 Spring Reference에서는 Front Controller로 향하도록 그린것 같습니다. 이 bean에 있는 정보를 바탕으로 이 객체의 정보를 사용할 view에 객체를 전달하게 되는 듯 합니다. (여기서 부터 주춤거리기 시작합니다. ㅎㅎㅎ)

View는 JSP나 HTML같은 파일을 말하는 것 같습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
top

  1. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.24 21:25 신고 PERM. MOD/DEL REPLY

    Spring In Action에 나오는 그림이 더 이해가 쉬운거 같습니다.

    Dispatcher Sevlet이 바로 web.xml 이다라기 보다는 web.xml에서 모든 서블릿의 요청을 받아서 처리하도록 선언되어 있는 서블릿을 말하는 것 같습니다. servlet_name-servlet.xml 처럼 말이죰.

    위에서 Handler Mapping이라고 예를 들으신 부분(Servlet 매핑 부분)은 Handler Mapping이 아니라 Dispatcher Servlet을 선언한 부분인 것 같습니다. Handler Mapping은 선언된 Dispatcher Servlet 안에 선언이 되겠죠.

    View Resolver도 web.xml에 바로 설정하기 보다는 다른 xml파일로 작성해서 web.xml에 선언해 두는게 많이 쓰이는 것 같습니다.(web.xml에 바로 선언되도 되나요?)
    마지막에 궁금해 하신 mapping 부분과 resolver를 분리하는 건 가능하고, 그렇게 하는게 더 옳은 방법일 것 같군욤^0^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.24 22:19 신고 PERM MOD/DEL

    Dispatcher Sevlet이 XXX-sevlet.xml 같은 파일을 말한다는 것인가요? 글쎄.. 제가 이해한 바로는 web.xml에서 어떤 Hanler Mapping들이 어떤 URL들을 담당할지 정의해 두는 요청을 받아들이는 맨 앞단으로 이해를 했고..그 생각이 별로 바뀌지 않는군요.

    예제에 대한 부분은 예제의 위치가 오해의 소지가 있지만 내용은 딴지 걸게 없는것 같은데요. 전 그 예제가 Disapatcher의 예고 Handler Mapping을 등록해 두고 있다고 이해했다고 말하고 있죠.

    View Resolver를 web.xml에 둔다는 말을 한적도 없습니다. 'Handler Mapping에 같이 둘 수도 있고 따로 둘 수도 있지 않을까?' 라고 했는데. Handler Mapping은 XXX-sevlet.xml파일로 제 머릿속에서 매칭시키고 있습니다.(Dispatcher를 web.xml로 매칭시키듯이) 예제로 긁어 올린 부분은 springkorea 에서 개발 하던 소스에서 본것이니 직접 확인하시면 될 것 같습니다.
    --------------------------------------------------
    열심히 딴지 걸어줘서 다시 한번 점검하는데 도움이 됐어. 쌩큐. 하지만 '욤'같은 글자체는 별로 안 이쁘군.

  2. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.25 10:23 신고 PERM. MOD/DEL REPLY

    딴지(?)는 아니었고 제 생각과 다른 부분이 있어서 댓글을 달아 봤죠.
    다시한 번 댓글 달아 봅니다^^.

    "Dispatcher Sevlet은 흔히 web.xml 파일을 말하며"
    => Dispatcher Servlet은 web.xml이 아니라 servletName-servlet.xml을 말합니다.

    "Handler Mapping은 요청에 따라 어떤 controller 객체가 사용될지에 대한 정보를 가지고 있으며 web.xml에 하나 이상의 Handler Mappling들이 등록되어 있습니다."
    => web.xml에는 Dispatcher Servlet을 선언하는 것 같습니다. 매핑부분에 보시면 DispatcherServlet이라고 선언되어 있기 때문에 그렇게 생각됩니다.

    제 생각에 형과 저의 이해한 부분이 DispatcherServlet과 Handler Mappings 부분에 대한 이해가 약간
    상이한 것 같습니다. 그렇죠? 시간이 없어서 정리를 마저 못 했지만 앞부분만 제 생각을 정리해봤습니다

    사실 약간 표현이 다를 뿐이지 의미는 같은 것 같은데요.
    글을 쓰신 것에 대한 딴지는 아니구요, 보다 더 정확히 이해해 보자는 말씀입니다.
    지나치지 않는 논쟁은 언제나 활력소를 불러 일으키자나요.

    -----------------------------------------------------------------------------------------
    '욤'은 제 나름대로 귀여움의 표현이었지만, 기분이 상하셨다면 안남기도록 하죠.
    사과하겠습니다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.25 10:51 신고 PERM MOD/DEL

    먼저 DispatcherServlet의 경우 Spring In Action에서 이것이 Spring MVC의 핵심이라고 말하면서 8.1.2에 다음과 같이 말하고 있지.

    "At the heart of Spring MVC is DispatcherServlet, a servlet that functions as
    Spring MVC’s front controller. Like any servlet, DispatcherServlet must be configured
    in your web application’s web.xml file."

    내가 이 부분을 읽고 너무 단순하게 web.xml파일이라고 써논 것은 억측이지만 내 이해를 단순화 시키기 위해 그렇게 써놓은 것이고.. 다시 쓰자면..

    web.xml 파일안에 <sevlet> </sevler> 사이 부분이 Dispatcher 부분이라고 써야겠지.

    그래서 "Dispatcher Servlet은 web.xml이 아니라 servletName-servlet.xml을 말합니다."라고 반박해준 부분에 난 동의 할 수 없지.. servletName-servlet.xml은 Handler Mapping이라고 이해 했거든(이것도 단순화 시켜서) 그리고 이 Handler Mapping을 Dispatcher안에 등록 해두는 것으로 이해했지..

    Handler Mapping은 어떤 요청을 어떤 컨트롤러 객체가 처리하도록 매핑 시킬 때 사용하되는 것으로 이해를 했고.

    내가 보기에.. 너랑 나랑 이해의 차이가 생긴 이유가 너는 Dispatcher Servlet과 Handler Mapping을 동일시 하는 것 같고 난 다른 존재로 인식해서 발생한 것 같은데.. 이런 생각이 드는 이유는

    "web.xml에는 Dispatcher Servlet을 선언하는 것 같습니다. 매핑부분에 보시면 DispatcherServlet이라고 선언되어 있기 때문에 그렇게 생각됩니다." 이 부분은 내가 이 댓글의 위에서 말한 부분과 거의 같은 말이라.. 이해가 같은데.. 이 글을 Handler Mapping에 관한 반박 부분에 달아 놓았다는 건.. Handler Mapping과 Dispatcher를 동일시하고 있다고 생각하게 되는 이유지..

    Anyway~ 덕분에 MVC 주요 용어들과 실제 파일과의 매칭이나 개념적인 이해에는 많은 도움이 된 것 같아서 고마워.

    Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.25 11:34 신고 PERM MOD/DEL

    고맙긴요, 부끄럽게..-_-ㅋ
    형 말처럼 저도 단순화를 위해 둘을 동일시 했거든요.^^
    저도 형 덕에 다시 한 번 생각해보게 됐습니다.
    쌩유에요.

    정체된 지식만큼 경계해야 할게 없겠죠.^^

  3. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.25 10:29 신고 PERM. MOD/DEL REPLY

    크리스마스 아침인데 제가 글 쓰고 트랙백 달기 전에 벌써 트랙백을 달으시다니..ㅋ
    저야 출근했다 치지만요~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.25 10:51 신고 PERM MOD/DEL

    ㅋㅋㅋ난 오늘 밤에 제사라서 집에서 공부나 하려고

    Favicon of http://chanwook.tistory.com/ BlogIcon 찬욱 2006.12.25 11:33 PERM MOD/DEL

    ㅋㅋ 좋구만요.
    제사를 가장한 공부. 밤에 제사면 낮에는 놀아도 되자나요. 음..여긴 분위기가 급박합니다. 같이 한 번 느껴봐야 하는 건데요!ㅎ(근데 왠 블로그질을 할까요?ㅋㅋ)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.25 11:38 신고 PERM MOD/DEL

    그러게 나도 일좀 해볼걸 그랬어. 경험치도 쌓이고 돈도 주고~ 30일에 보겠군. 그때 봅세~

  4. Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.05.11 12:38 신고 PERM. MOD/DEL REPLY

    이런 지금 다시 보니까 말도 안되게 써놨군 아 창피해;;-_-;;;

Write a comment.


CSS 공부 중



참초 : http://www.w3schools.com/css/css_syntax.asp
위 사이트에서 CSS 기본 문법을 공부 했습니다.

기본 구조는 다음과 같습니다.
selector {property: value}

selector는 HTML 태그나 엘리먼트(ex. body)가 오는 자리이고
property는 기본 속성을 바꾸고 싶은 어트리뷰트(ex. bgcolor)가 오는 자리입니다.
value는 속성에 대입할 값(ex. red)입니다.

property와 value 사이에는 :으로 구분을 합니다.
예)
body {color: black}

속성이 여러 단어로 된 경우 ""으로 묶어 줍니다.
예)
p {font-family: "sans serif"}

여러 속성을 지정할 경우 다음과 같이 ; 으로 구분 합니다.
예)
p {
text-align: center;
color: black;
font-family: arial
}

여러개의 태그에 공통으로 들어있는 속성을 변경하고 싶을 때 selector를 여러개 지정할 수 있습니다.
예)
h1,h2,h3,h4,h5,h6
{
color: green
}

같은 속성에 다른 값을 대입하는 여러 개의 class들을 만들 수 있습니다. 이 것을 적용하고 싶을 때는 태그에 class 속성에서 사용할 class를 지정해 주어야 합니다.
css class 예)
p.right {text-align: right}
p.center {text-align: center}
css 사용 예)
<p class="right">
This paragraph will be right-aligned.
</p>
<p class="center">
This paragraph will be center-aligned.
</p>

여러개의 class를 하나의 태그에 적용하고 싶을 때는 다음과 같이 스페이스로 공간을 띄고 계속 적어주면 됩니다.
예)
<p class="center bold">
This is a paragraph.
</p>

모든 태그들의 속성에 적용할 class를 정의할 때는 다음과 같이 합니다.
예)
.center {text-align: center}

id selector는 #로 시작합니다.
예)
#green {color: green}

id와 클래스와 사이의 차이점은 . 대신 #을 사용한다는 것이고 id선택자는 한 페이지에서 오직 하나의 엘리먼트와 일치해야 한다는 것입니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
top

TAG CSS
  1. 한산 2006.12.26 14:22 PERM. MOD/DEL REPLY

    잇힝 멋진데여???

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.26 15:50 PERM MOD/DEL

    ㅋㅋ;

Write a comment.


주소록 화면 완성



사용자 삽입 이미지

Gmail을 따라 그리다가 개발이 한도 끝도 없이 길어질까봐 일단 화면을 좀 더 간추리고 단순하게 만들었습니다. 한 화면에서 모든 멤버 보기와 새로운 멤버 추가, 그리고 삭제가 가능한 화면입니다.

이전에 만들어둔 새로운 멤버 추가 화면은 멤버의 정보를 수정하는 화면으로 살짝 바꿨습니다.
사용자 삽입 이미지

화면을 보니 대강 프로그램이 어떻게 진행되어야 할지 선명하게 눈에 들어옵니다.

삭제 시나리오
맨 위에 있는 화면이 제일 처음 이 프로그램의 사용자가 보게 될 화면입니다. 그곳에서 삭제 버튼을 누르면 "정말로 삭제 하시겠습니까?" 라고 물어보는 팝업창(이건 어떻게 만들지;;)이 뜨며 거기서 확인을 클릭하면 해당하는 주소가 지워지고 다시 첫화면을 뿌려줍니다.

새로운 멤버 추가 시나리오
첫 화면의 빈 칸들에 적당한 문자들을 입력한 후 add버튼을 클릭합니다. 이 때 입력된 값들이 적당한 값들인지 확인 하고 email이 중복 됐거나 얼토당토 않은 문자들이 입력 됐을 때는 해당하는 메시지를 출력하고 적당한 값들이 입력 됐다면 저장이 되었음을 알려주는 팝업창을 띄워주고 다시 첫 화면을 뿌려줍니다.

수정하기 시나리오
첫 화면의 오른쪽에 있는 modify 버튼을 클릭하면 두 번째 화면(수정 화면)으로 넘어가고 그 곳에는 첫 번째 화면에서 수정을 원했던 사용자의 정보들이 input box안에 적혀 있습니다.(이건 또 어떻게 하지;;) 그리고 수정할 부분의 input box에 원하는 문자열로 수정한 뒤 Commit 버튼을 클릭하면 "새로운 멤버 추가 시나리오"에서 거쳤던 검증을 거친 뒤에 첫 번째 화면을 다시 뿌려줍니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
top

  1. Favicon of http://thepush.blog25.net BlogIcon TP 2006.12.19 19:15 PERM. MOD/DEL REPLY

    신기하네요..

  2. Favicon of http://cavin.egloos.com BlogIcon cavin 2006.12.19 19:27 PERM. MOD/DEL REPLY

    테스트할 수 있는 링크도 올려봐요~ :)

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.19 20:16 PERM MOD/DEL

    아직은 안됩니다. :)
    현재 돌아가는 건 아무것도 없습니다. ㅋㅋㅋ

Write a comment.


중간점검



GUI를 그려보면서 진작에 화면 부터 그려볼껄... 이라는 생각을 했습니다.

그리다보니 현재 구현한 기능 중에 일부는 행방이 묘연해 진 것도 있고 이런 저런 기능들이 더 있으면 좋겠구나 라는 생각이 들었습니다. 처음부터 요구사항을 완벽하게 정하고 시작하지 않았기 때문에 거의 제 맘대로 작성을 하면 되는 프로그램이였기에 이제부터라도 다시 시작하면 될 것같습니다.

1. Gmail이 모델인 만큼 주소록에 있는 사람들을 분류할 수 있는 기능이 있으면 좋겠다는 생각을 했습니다. 그러려면 DB도 바껴야 할 것 같고 어쩌면 테이블이 만들어질지도 모르겠습니다.

2. HTML/CSS 공부하는 것이 만만치 않다는 것을 느꼈습니다. 기본을 소홀히 하면 어떤 댓가를 치루게 되는지 절실하게 느끼는 중입니다.

3. Spring공부를 하려고 개발하기 시작한 것인데.. TDD, Easymock, Abstract Test, iBATIS, HTML, CSS등 공부할 것이 많았습니다. Spring만 공부하려던 것이 개발에 필요한 기본기를 배우게 되는 것 같아 주제가 바뀐 것 같지만 그런면에서도 만족을 합니다.

앞으로 방학이기도 하고 좀더 열심히 해서 언능 마무리하자 기선아


'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
top

TAG 느낀점

Write a comment.


HTML 공부 중 2탄



오늘은 http://www.w3schools.com/html/html_forms.asp 여기 공부합니다.
입력 하는 부분 만들어야 해서요.

폼 태그
<form name="input" action="html_form_action.asp" method="get">

Type your first name:
<input type="text" name="FirstName" value="Mickey" size="20">
<br>Type your last name:
<input type="text" name="LastName" value="Mouse" size="20">
<br>
<input type="submit" value="Submit">

</form>

form의 name은 어디에 쓰이는지 모르겠지만;;; action은 입력 된 것을 넘겨줄 다음 페이지를 지정하고 method에는 get방식인지 post방식인지 설정합니다.
input 태그는 type으로  radio, checkbox, text, submit 등으로 지정할 수 있으며 지정하는 태그에 따라 모양이 달라집니다. name은 input 부분에 입력 된 값을 가리킬 수 있는 변수명 이고 value는 이 변수명에 대입될 값입니다. text의 경우에는 입력된 값이 들어갑니다. size는 text 입력하는 부분의 길이를 지정합니다

이거랑 table이랑 합쳐서 입력 화면을 만들었습니다. 이것도 역시 gmail이 모델인데 오늘도 역시 웃음만 나옵니다. 크헤헤헷;;;

모델
사용자 삽입 이미지

나의 것
사용자 삽입 이미지


'Spring > 주소록 만들기' 카테고리의 다른 글

이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
top

  1. Favicon of http://chanwook.tistory.com/ BlogIcon 찬욱 2006.12.14 19:14 PERM. MOD/DEL REPLY

    오호~그럴싸 한데요..

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.14 19:17 PERM MOD/DEL

    놀리는 거냐 ㅋㅋㅋ

Write a comment.


Strict HTML 4.01 지침서



Head First HTML with CSS & XHTML을 참고합니다.
p291쪽에 잘 정리되어 있습니다.

- 모든 웹 페이지는 다음과 같은 Doctype으로 시작합니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

- <html> 엘리먼트가 Doctype 바로 다음에 오는 최상위 루트 엘리먼트가 되어야 합니다.

- <head>와 <body> 만 <html>에 들어가고 나머지는 <head>나 <body>안에 들어갑니다.

- <head>안에 <title> 꼭 넣기
<head> 엘리먼트 안에는 <title> <meta> <style>를 넣을 수 있는 유일한 장소~

- <body>안에는 블럭 엘리먼트만 넣기

- 인라인 엘리먼트는 블럭 엘리먼트안에 넣기
인라인 엘리먼트 안에는 텍스트 or 다른 인라인 엘리먼트

- <ul> 과 <ol> 안에는 <li> 만 올수 있습니다.

- <li> 안에는 무엇이든(텍스트, 인라인 엘리먼트, 블럭 엘리먼트) 넣을 수 있습니다.

- <blockquote>에는 블럭 엘리먼트들만 넣습니다.

블럭 엘리먼트들 보러가기
인라인 엘리먼트들 보러가기

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
top

  1. Favicon of https://minq.tistory.com BlogIcon Keating 2006.12.14 14:26 신고 PERM. MOD/DEL REPLY

    저두 헤드퍼스트 XHTML 책 가지고 있는데^^; 방가운걸요~ㅎㅎㅎ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.14 14:30 신고 PERM MOD/DEL

    넵 ^^ 전 Head First EJB 빼곤 다 모았답니다. ㅎㅎㅎ

    Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2006.12.14 15:56 신고 PERM MOD/DEL

    전 EJB도 있답니다~ㅎㅎㅎ

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.14 16:02 PERM MOD/DEL

    ㅇㅇ넌 H.F 매니아자나. ㅋㅋ
    H.F OOAD 도 나온다더라.

  2. Favicon of http://chanwook.tistory.com/ BlogIcon 찬욱 2006.12.14 17:55 PERM. MOD/DEL REPLY

    매니아보다.. 어느 분 글에서 believer 라는 말을 쓰셨더라구요 ..

    전 believer 할 겁니다.ㅋ

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.14 18:15 PERM MOD/DEL

    오... 괜찮은 표현이군 :)
    belieber괜찮네

Write a comment.


HTML 공부 중



참조 : http://www.w3schools.com/html/html_intro.asp
위 링크를 참조하며 공부하고 있습니다.

앵커 태그
<a href="whiteship.tistory.com">My Blog</a>
이렇게 쓰는것이 가장 기본 형태 같습니다.

<a name="index">목차</a>
<a href="#index">목차로 이동</a>
목차로 이동을 클릭하면 목차로 이동하게 됩니다. 인덱스 기능이네요.

<a herf="whiteship.tistory.com" target="_blank">새창에서 Blog 열기</a>
타겟을 지정해주면 새창에서 열립니다. _top 으로 하면 현재 창에서 열립니다.(프레임 무시)

<a href="mailto:whiteship2000@gmil.com?subject=Hello%20again">보내기</a>
메일 보내는 페이지로 이동합니다.(firefox에서는 Gmail로 탭이 생기던데... IE에서는 전자 메일이 실행됩니다.) 이동하면서 이 메일 제목은 Hello again이고 두 단어 사이를 %20 만큼 띱니다.

좀 더 복잡한 E-mail 링크 걸기 예제는 참조를 클릭해 주세요.

프레임 태그
<frameset rows="15%,70%,15%">
  <frame noresize="noresize" src="upMenu.htm">
  <frame noresize="noresize" name="center" src="list.htm">
  <frame noresize="noresize" src="downMenu.htm">
</frameset>

frameset에 rows는 가로로 쪼개고 cols는 세로로 쪼개기 입니다.
noresize="noresize"로 해주면 프레임 나누고 있는 막대기를 드래그 하지 못하게 설정합니다.
각각의 프레임에 이름을 설정해 줘서 앵커 태그의 targer 속성에 적어줄 수 있습니다.

주의 할 것 frameset 태그를 쓰면 body 태그를 쓰지 못한다는거~

테이블 태그
<table border="1">
   <tr>
       <th>Index</th>
       <th>Name</th>
       <th>Blog</th>
   </tr>
   <tr>
       <td>1</td>
       <td>백기선</td>
       <td><a href="http://whiteship.tistory.com/" target="_blank">보러가기</a></td>
   </tr>
</table>

th는 테이블의 헤드 부분이며 굵은 글씨에 중앙 정렬이 됩니다. <td></td> 이렇게 빈칸으로 두면 기본 보더 스타일에서 내부의 조그만 사각형이 안그려 지는데 &nbsp; 를 넣어서 만들 수 있습니다.

colspan="2' rowspan="2" 를 사용해서 셀 병합 시킬 수 있습니다.
cellspacing="10" 은 셀 두깨 cellpadding="3"은 셀 안에 있는 글자와 셀의 간격
background="bgdesert.jpg" 으로 배경 넣을 수 있습니다.

오늘의 결과물
사용자 삽입 이미지
GMail을 모델 삼았는데 이거 정말 웃음 밖에 안나오는군요. ㅎㅎㅎㅎㅎ

'Spring > 주소록 만들기' 카테고리의 다른 글

CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
top

  1. Favicon of http://chanwook.tistory.com/ BlogIcon 찬욱 2006.12.13 16:24 PERM. MOD/DEL REPLY

    저는 frame tag 보다는 body tag 사용해서 div 쓰는게 좋은 것 같던데욤.^^

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.13 18:24 PERM MOD/DEL

    글쿤;; 아직 진도가 안나가서..div 알아봐야겠다. 쌩큐 :)

Write a comment.


페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)



1. 먼저 MemberRepositoryTest에 다음과 같이 Easymock을 이용한 Test코드를 추가합니다.
   @Test
   public void pagsing(){
       final Member member = new Member();
       List<Member> members = null;

       mockMemberDao.add(member);
       expectLastCall().times(15);
       expect(mockMemberDao.list(1)).andReturn(members);

       replay(mockMemberDao);
       for (int i = 0; i < 15; i++) {
           memberRepository.add(member);
       }
       assertEquals(members, memberRepository.list(1));

       verify(mockMemberDao);
   }
=> 여기서 의문이 드는 것은 "빨간색으로 표시된 부분이 올바른 표현인가?" 모르겠습니다. Return 타입을 예상하는 부분으로 기억이 나는데 다시 공부할 필요가 있겠습니다.
=> 또하나 의문이 드는 것은 return type인 "List의 크기를 예측할 순 없을까"하는 것입니다. 왠지 방법이 있을 것 같은데 이것도 좀더 공부할 필요가 있겠습니다.

이 테스트를 통과 시키기 위해서는 MemberDao 인터페이스에 새로운 메소드가 추가되어야 하며 MemberRepository 인터페이스에도 새로운 메소드가 추가되어야 합니다. 그리고 그 메소드를 구현한 MemberRepositoryImpl 에서 새로 추가한 메소드를 구현해 두어야 합니다. MemberDao의 list()를 호출하도록 수정하면 위 테스트는 간단하게 통과 합니다.

2. 이번에는 Dao Test를 하기 위해서 SqlmapMemberDaoTest 클래스에 다음의 테스트 코드를 추가합니다.
   public void testPaging(){
       final int numberOfMembers = 15;
       insertMembers(numberOfMembers);

       List<Member> members = memberDao.list(1);
       assertNotNull(members);
       assertEquals(12, members.size());

       members = memberDao.list(2);
       assertEquals(3, members.size());
   }
=> 이 테스트를 통과시키면 구현이 끝나게 됩니다.

3. 테스트를 통과 시키기 위해서 SqlmapMemberDao에 list를 아래와 같이 구현합니다.
public List<Member> list(int page) {
       Map<String, Integer> params = new HashMap<String, Integer>();
       params.put("defaultSize", 12);
       params.put("offset", 12 * (page-1));
       return getSqlMapClientTemplate().queryForList("Member.list", params);
   }
=> 아직도 테스트를 통과하지 못합니다. iBATIS에 list라는 id를 가진 SQL을 작성해야 합니다.

4. Member.xml에 다음과 같이 추가하면 테스트는 통과하고 기능 추가가 끝나게 됩니다.
<select id="list" resultMap="memberMap">
       SELECT *
       FROM Member
       ORDER BY id
       LIMIT #defaultSize# OFFSET #offset#
   </select>
=> LIMIT에 대한 MySQL document를 참조했습니다.
기본구조)  [LIMIT {[offset] row_count | row_count OFFSET offset}]
예) LIMIT 5 => 상위 5 줄
    LIMIT 2, 5 => 상위에서 2줄 버리고 5 줄
    LIMIT 5 OFFSET 2 => 상위에서 2줄 버리고 5줄

5. 코드에 수정할 부분을 찾아서 리팩토링 합니다. 한 페이지에 12개 씩 보여주기로 정했습니다.(제 맘대로ㅋㅋ) 그래서 위에 표시해 둔 12라는 숫자는 의미가 있는 숫자입니다. MemberRepository에 DEFAULT_LIST_SIZE 상수로 바꿉니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
top

  1. Favicon of http://younghoe.info/ BlogIcon 영회 2006.12.12 00:48 PERM. MOD/DEL REPLY

    http://blog.empas.com/ahnyounghoe/read.html?a=14022746

    예전에 썼던 시리즈에 보면 Spring의 PagedListHolder 쓴 거 있는데
    이거 쓰면 페이징을 화면에 표현할 때 좋지.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.12 07:33 신고 PERM MOD/DEL

    네. 아~ Spring Korea 개발할 때도 살짝 봤었던 것 같네요. 개발을 마무리 하진 못했지만 많은 걸 반추하며 배울 수 있어서 좋습니다. :)

Write a comment.


Easymock 연습하기 3탄



Easymock 연습하기 2탄에서는 mock 객체를 이용해서 void 형태의 메소드를 테스트 했습니다. 즉 올바른 인자가 들어가는지 확인을 한것입니다.

이번에는 나오는 값도 테스트를 해보겠습니다. 나오는 값을 테스트하기 위해서는 expect라는 메소드와 andReturn메소드를 사용합니다.

소스보기

expect를 이용해서 리턴값이 있는 메소드를 감싸고 그 뒤에 andReturn을 호출하면서 반활 될 타입의 객체를 지정해 줍니다. => "memberDao에 get메소드를 호출하면 member가 나온다."

그리고 replay를 실행하여 실제로 member를 추가한 뒤에 memberRepository를 이용해서 get을 호출하면 memberRepository 안에 있는 memberDao의 Mock 객체가 member를 반환해주게 됩니다. 따라서 시나리오와 액션이 일치하게 되며 verify를 이용해서 확인할 수 있습니다.


위 메소드의 내용을 한번 그려봤습니다. Dao 쪽은 Mock으로 처리하고 Service만 test를 할 수 있게 되었습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
top

Write a comment.


Easymock 연습하기 2탄



import static org.easymock.EasyMock.*;
import org.junit.*;
import net.webapp2.member.dao.MemberDao;
import net.webapp2.member.domain.Member;

public class MemberRepositoryTest {

   MemberDao mockMemberDao;
   MemberRepository memberRepository;

   @Before
   public void setup(){
       mockMemberDao = createMock(MemberDao.class);
       memberRepository = new MemberRepositoryImpl();

       memberRepository.setMemberDao(mockMemberDao);

   }

   @Test
   public void add(){
       final Member member = new Member();
       mockMemberDao.add(member);

       replay(mockMemberDao);
       memberRepository.add(member);

       verify(mockMemberDao);
   }
}

먼저 Test할 대상 클래스와 Mock 테스트를 할 클래스 타입의 객체를 만듭니다.(하늘색) 그리고 memberRepository에서 memberDao객체를 사용해야 하기 때문에 setter를 사용하여 위에서 만든 Mock 객체로 setting 해줍니다.(첫번째 분홍색)

그리고 시나리오를 생각해 봅니다.
"Member를 추가하는 기능이기 때문에 memberRepository의 add(Member)를 호출하면 memberDao의 add(Member)가 호출이 되서 DB에 들어가겠구나 리턴값은 없고..."

다음 테스트 메소드를 작성하기 시작하는데 먼저 시나리오에 해당하는 부분(두번째 분홍색 윗부분)에서 Mock 객체(mockMemberDao)에게 일어날 일을 생각합니다. mockMemberDao.add(member); 이것 밖에 없네요.

이제 시나리오 대로 돌아가는지 replay(Mock 객체) 시켜봅니다. replay 시키면서 당연히 "액션"을 취해 줘야 하는데 이 "액션"이 여기서는 memberRepository.add(member) 가 됩니다.

그리고 시나리오 대로 액션이 이뤄졌는지 verify(Mock 객체)를 합니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
top

TAG EasyMock

Write a comment.


Easymock 연습하기



http://www.easymock.org/Downloads.html
위 링크에서 Easymock을 다운로드 합니다.

압축을 풀면 easymock.jar 파일이 있습니다. 이것을 Eclipse 프로젝트에 추가합니다. 그리고 JUnit 도 추가합니다. JDK는 5.0 이상에서 작동합니다. (easymock 버젼 2 부터 그런 것 같습니다.)

MemberRepositoryImpl 클래스를 테스트 하기 위한 코드 입니다.
import static org.easymock.EasyMock.*;
import org.junit.*;
import net.webapp2.member.dao.MemberDao;

public class MemberRepositoryTest {

   MemberDao mockMemberDao;
   MemberRepository memberRepository;

   @Before
   public void setup(){
       mockMemberDao = createMock(MemberDao.class);
       memberRepository = new MemberRepositoryImpl();
   }

   @Test
   public void add(){
       //recoding

       //verify
   }
}

이 전에는 MemberDao 까지 거쳐서 테스트를 했었지만 위의 상태는 아래의 그림과 같이 MemberRepository에만 국한 될 수 있습니다.

Easymock을 사용하는 방법은 세 단계로 나뉘어 집니다. 먼저 createMock(Interface Type)을 사용하여 Mock 객체를 만들게 됩니다. 인터페이스 타입의 객체는 못만들기 때문에 MemberDao를 사용하고 있던 MemberRepositoryImpl에서 SqlmapMemberDao(MemberDao 구현체) 까지 사용해가며 테스트를 했었는데 이제는 거기까지 가지 않고 MemberDao에서 끊기게 됩니다.

그 다음 어떤 활동이 벌어질지 시나리오를 작성하고(recoding) 실제 작업이 돌아갈 때 결과가 시나리오와 일치 하는지 확인(verify)합니다.

참고 :
Easymock Document
Easymock 시작하기
단위 테스트의 '단위'
단위 테스트의 경계 : 어디까지가 단위 테스트인가?

'Spring > 주소록 만들기' 카테고리의 다른 글

Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
log4j.properties 파일 위치 시키기  (2) 2006.12.04
top

Write a comment.


단위 테스트 모르겠슴 ㅠ.ㅠ



기본의 테스트 클래스 모습입니다.

이 그림은 현재 개발 중인 어플리케이션의 클래스 다이어그램 입니다. 왼쪽의 파란 테스트 클래스가 테스트 하는 대상이 현재 MemberRepository와 MemberDao 두 계층을 모두 통과합니다. 그 뿐만 아니라 DAO를 통해서 DB까지도 들렸다 오지요.

그래서 이전 수정 사항 중에 하나로 저 테스트 클래스를 Service 을 통해서 Dao 로 가지 않고 바로 MemberDao를 사용하도록 수정하였습니다.
이상태도 단위 테스트라고 할 수 있을지 의심이 됩니다. 의심이 된다는 자체가... 좀... 아 어지럽네요. 이렇게 안하고 어떻게 MemberDao 인터페이스가 제대로 동작하는지 확인 할 수 있을까요?

EasyMock이라는 것을 공부하다가 머리가 더 복잡해져서 잠시 쉬면서 현재 상태를 정리해 둡니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
log4j.properties 파일 위치 시키기  (2) 2006.12.04
log4j 설정하기(in spring)  (0) 2006.12.02
top

Write a comment.


Eclipse에서 Rename Method 리팩토링




getNumberOfMembers() 메소드 이름을 count()로 바꾸는 것이 좋겠다는 의견을 받았습니다. 생각해보니 주소록 어플리케이션에서 숫자를 셀 것이 몇명이나 등록되어 있는지 밖에 없는데 굳이 "몇 명이 있는지 세어라" 라고 할 필요 없이 "몇이냐" 라고 물어보는게 타당하다는 생각이 듭니다.

문제는 getNumberOfMembers() 메소드를 사방에서 사용하고 있다는 것입니다. memberDao 인터페이스에 만들어둔 이 메소드를 count()로 변경하게 되면 여러 클래스에서 에러가 발생하게 되고 각 클래스들을 돌아가니며 수정을 해도 되겠지만...Eclipse가 그 모습을 본다면 매우 안타까워 할 것 같습니다.

Alt + Shift + R 을 클릭합니다.
변경하고 싶은 이름을 입력한 뒤 Preview를 눌러 확인 해 볼 수 도 있습니다.
어디서(class) 어떤 부분이 바뀌게 될지 확인 할 수 있습니다.

OK를 눌러주면 리팩토링 끝입니다. :)

참고 :
Rename Method -> http://www.refactoring.com/catalog/renameMethod.html


top

Write a comment.