SimpleFormController

참조 : org.springframework.web.portlet.mvc.SimpleFormController

주로 새로운 정보를 입력 또는 수정할 때 사용하는 컨트롤러라고 합니다. 그런데 저는 간단한 검색을 할 때 사용해 봤던 적이 있지요. ㅎㅎㅎ;; 사용하면 안되는건 아니지만 권총으로 맞출 과녁을 대포로 쏴서 맞춘격에 비유할 수 있는 것 같습니다.

이녀석을 사용할 때 설정 해 줄 것이 몇 개 있는데요. form에서 정보 받아올 command 객체(이름과 class)랑 form이 있는 view, 그리고 에러 없이 command 객체를 받아서 전해 줄 successView 이름을 줄 수 있습니다. form이 있는 view는 생략이 가능합니다. 그리고 부가적으로 command 객체에 정보를 검증할 수 있는 validation을 만들어서 사용할 수 있습니다.

사용자 삽입 이미지이런식으로 동작하게 됩니다. sequence diagram보다 이게 더 보기 좋군요.
Controller와의 관계를 보기 위해 클래스 다이어그램을 보겠습니다.
사용자 삽입 이미지와.. 기네요~ 이렇게 계층화가 잘 되어 있기 때문에 확장성이 좋다고 하는 것 같습니다. 계층화가 잘 되어 있으면 원하는 지점에서 상속 받아서 사용하면 되기 때문이겠죠?

Controller

참조 : org.springframework.web.servlet.mvc.Controller

MVC 모델에서 C에 해당하는 녀석으로 주로 Servlet이 이 역할을 담당하고 있었고 Struts에서는 Action이라는 것이 역할을 하고 있었는데 Spring MVC를 사용하면 Servlet = Controller or Action = Controller 라고 외우지 않아도 “Controller는 Controller다.” 라고 그냥 받아 들이면 되서 편하네요.

Controller API를 보면 책임이 딱 한 개 있는 것이 보입니다.

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception

HttpServletRequest와 HttpServletResponse 객체를 받아서 ModelAndView 객체를 반환합니다.
사용자 삽입 이미지이렇게 그리면 되는건지.. 흠..시퀀스 다이어그램은 익숙치가 않아서 많이 보고 그려봐야겠네요.

Word 2007로 블로깅하기

티스토리 기능 업데이트 안내 – BlogAPI, Callback

MS 오피스로 티스토리에 글 쓰기

tistory BlogAPI 설정은 반드시 IE에서

특히 맨 마지막 게시물이 완전 주의 사항입니다. 저도 불여우에서만 계속 설정 하면서 새로 고침 하면 체크가 지워져 있고 블로그로 갔다가 오면 또 다시 체크가 지워져 있어서 스트레스를 좀 받았었습니다. IE에서 설정을 해줘야 한다는 군요.

사용자 삽입 이미지
게시물의 분류를 설정하려면 위에 보이는 메뉴 중에 “범주 삽입”을 이용하면 되네요~

1. 불여우에서는 설정이 안먹 힌다는 것.
2. 발행 설정은 안된다는 것.
3. 태그 먹이는 방법을 모르겠군요.

Stream 인코딩 바꾸기

제 블로그 RSS URL을 날리면 어떤 HTML이 날아오는지 보고 싶습니다.

String request – “http://whiteship.tistory.com”;
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();

이렇게 커넥션 객체를 생성한 다음에.. 이 커넥션에서 다시 InputStream을 얻어서 다시 아래 처럼 InputStreamReader로 그리고 이걸 다시 버퍼를 사용해서 읽을 수 있도록 BufferedReader에 연결 시킵니다.[footnote]정말 이 부분은 외워 지지가 않네요. 매번 코드를 찾아보게 되는 부분입니다.[/footnote]

BufferedReader br = BufferedReader(new InputStreamReader(connection.getInputStream()));

그리고 이후에는 br.readLine() 으로 한줄씩 읽어서 StringBuilder에 쌓아 뒀다가 출력해보면 됩니다.

그렇게 해봤습니다.
[#M_ more.. | less.. | <?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″>
    <channel>
        <title>Whiteship&#039;s Note</title>
        <link>http://whiteship.tistory.com/</link>
        <description>?뻾蹂듯븳 媛쒕컻?옄媛? ?릺?졄?땲?떎.</description>
        <language>ko</language>
        <pubDate>Tue, 27 Feb 2007 23:16:34 +0900</pubDate>
        <generator>Tistory 1.1</generator>
        <image>
        <title>Whiteship&#039;s Note</title>
        <url><![CDATA[http://fs.tistory.com/attach/8148/1301078737.gif]]></url>
        <link>http://whiteship.tistory.com/</link>
        <description>?뻾蹂듯븳 媛쒕컻?옄媛? ?릺?졄?땲?떎.</description>
        </image>
        <item>
            <title>DAUM 留ㅼ돩?뾽 ?썑湲?</title>
            <link>http://whiteship.tistory.com/504</link>
            <description>?쑕.. ?뾼泥??궃 ?뿰媛뺤쓣 ?뱽怨? ?솕?뜑?땲 ?뵾怨ㅽ븯?꽕?슂. 5?떆 10遺? 遺??꽣 9?떆源뚯?? ?씠?뼱吏? 媛뺤쓽????뒿?땲?떎. ?꽕?씠踰꾩?? DAUM?쓽 ?삤?뵂API ?궗?슜踰뺢낵 ?떎?젣 ?삁?젣 肄붾뱶瑜? 蹂댁뿬 二쇱뀲?뒿?땲?떎. ?궗?떎 ?쟾 硫섑넗媛? ?쁿?뿉 遺숈뼱?꽌 ?떎?뒿?쓣 ?뻽?떎?뒗 吏??궃 25?씪?뿉 李몄뿬瑜? ?븯怨? ?떢?뿀?뒗?뜲 ?뿬?뻾?쓣 媛??빞?븯湲? ?븣臾몄뿉 ?븘?돺寃? 媛뺤쓽留? ?엳?뒗 ?삤?뒛?씠?씪?룄 李몄뿬?빐?꽌 ?떎?쓬 留ㅼ돩?뾽?쓽 遺꾩쐞湲곕?? ?뙆?븙?뻽?떎?뒗 寃껋쑝濡? 留뚯”?빐?빞 寃좎뒿?땲?떎. 媛뺤쓽媛? ?엳?뒗 諛⑹씠 ?쑀由щ줈 ?몮?윭 ?뙎?뿬 ?엳?뼱?꽌 諛뽰씠 蹂댁???뒗?뜲 ?뒭??? ?떆媛꾩뿉?룄 ?뿴?떖?엳 ?씪..&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://whiteship.tistory.com/504&quot;&gt;湲? ?쟾泥대낫湲?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
            <category>Thinking</category>
            <category>?떎?쓬 留ㅼ돩?뾽</category>
            <author>湲곗꽑</author>
            <guid>http://whiteship.tistory.com/504</guid>
            <comments>http://whiteship.tistory.com/504#entry504comment</comments>
            <pubDate>Tue, 27 Feb 2007 23:14:06 +0900</pubDate>
        </item>

_M#]이상한 글씨들이 콘솔창에 출력됩니다. OTL..

인코딩 문제인데 구글신에게 물어보니까 InputStreamReader의 생성자를 이용해서 인코딩을 바꿀 수 있다고 합니다. 현재 인코딩을 찍어보니까[footnote]InputStreamReader의 String getEncoding()을 사용하면됩니다.[/footnote] MS949라고 출력됩니다.

RSS나 기타 오픈API를 사용한 결과물은 UTF-8을 사용한다고 합니다. 그리고 InputStreamReader의 생성자를 보니까 다음과 같이 네개의 생성자가 있었습니다.
사용자 삽입 이미지
이 중에서 제일 아래 녀석을 사용해서 다음과 같이 수정해 줍니다.

br = BufferedReader(new InputStreamReader(connection.getInputStream(), “UTF-8”));

결과물을 확인해 보니 제대로 출력이 되는 걸 볼 수 있었습니다.
[#M_ more.. | less.. | <?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″>
    <channel>
        <title>Whiteship&#039;s Note</title>
        <link>http://whiteship.tistory.com/</link>
        <description>행복한 개발자가 되렵니다.</description>
        <language>ko</language>
        <pubDate>Tue, 27 Feb 2007 23:16:34 +0900</pubDate>
        <generator>Tistory 1.1</generator>
        <image>
        <title>Whiteship&#039;s Note</title>
        <url><![CDATA[http://fs.tistory.com/attach/8148/1301078737.gif]]></url>
        <link>http://whiteship.tistory.com/</link>
        <description>행복한 개발자가 되렵니다.</description>
        </image>
        <item>
            <title>DAUM 매쉬업 후기</title>
            <link>http://whiteship.tistory.com/504</link>
            <description>휴.. 엄청난 연강을 듣고 왔더니 피곤하네요. 5시 10분 부터 9시까지 이어진 강의였습니다. 네이버와 DAUM의 오픈API 사용법과 실제 예제 코드를 보여 주셨습니다. 사실 전 멘토가 옆에 붙어서 실습을 했다는 지난 25일에 참여를 하고 싶었는데 여행을 가야하기 때문에 아쉽게 강의만 있는 오늘이라도 참여해서 다음 매쉬업의 분위기를 파악했다는 것으로 만족해야 겠습니다. 강의가 있는 방이 유리로 둘러 쌓여 있어서 밖이 보였는데 늦은 시간에도 열심히 일..&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://whiteship.tistory.com/504&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
            <category>Thinking</category>
            <category>다음 매쉬업</category>
            <author>기선</author>
            <guid>http://whiteship.tistory.com/504</guid>
            <comments>http://whiteship.tistory.com/504#entry504comment</comments>
            <pubDate>Tue, 27 Feb 2007 23:14:06 +0900</pubDate>
        </item>

_M#]