친구가 학교에서 웹서비스를 배운다고 합니다.
저도 그 수업을 들었죠. 그 수업에서 웹서비스를 만드는 것은 정말 많은 노력이 들어가서 만드는 방법이였습니다. 필요한 라이브러리를 다 각각 복사하고, 컴파일도 직접하며, 톰캣도 이상한 웹서비스 톰캣을 사용하더라구요.
그렇게 하게되면 완전 원시적인 방법으로 배우게 되므로 많은 도움이 되긴 됐습니다만, 이렇게 손쉽게 만드는 방법도 알아두면 좋죠 ^^

이건 SOAP프로토콜을 이용한 웹서비스를 만들겁니다. 최근 RESTful을 이용한 어쩌구 하는데 이건 좀 더 공부가 필요하겠네요.

우선 넷빈즈를 실행합니다. 넷빈즈는 여기서 다운로드할 수 있습니다.
http://download.netbeans.org/netbeans/6.1/final/
왠만하면 다되는걸로 받으세요-_-; 다되면 좋잖아요 ^^

실행한 뒤 웹애플리케이션을 만듭니다.
New Project -> Web -> Web Application
ProjectName : HelloWebApp
server: GlassFish v2
(톰캣으로 해도 됩니다만, 톰캣은 테스트를 할 수 없더라구요. 예전에 수동으로 웹서비를 만들었을 때 테스트가 너무 힘들어서 삽질했던 기억을 생각하면...-_-; GlassFish도 참 대단한 was같네요)
Finish로 생성.

웹서비스를 만들기 위해서는 프로젝트이름의 마우스오른쪽버튼을 누르면 New -> WebService가 있습니다.
Web Service Name은 Hello라고 하고, package는 com.mudchobo.hellows라고 합시다.
Finish를 누르면 Design모드로 뭔가 뜹니다.
여기서 우리가 Operation을 하나 만들어봅시다.
Add Operation을 클릭합니다.
Name은 메소드명입니다. sayHello라고 합시다.
Return Type은 말그대로 리턴형입니다. 걍 냅둡시다.
parameter는 1개추가해서, Name을 name이라고 하고, 형은 java.lang.String으로 합시다.
이제 Source보기로 바꿉니다.

소스를 보면 WebService를 어노테이션으로 만들 수 있는 것을 볼 수 있습니다.
이건 정말 환상적이네요. 기존에 WSDP인가? 이걸로 할 때에는 미친듯이 삽질해도 웹서비스를 만드려면 엄청힘들었는데 이건뭐 그냥 어노테이션으로 끝내버리네요 ^^
[code]
@WebService()
public class Hello {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name = "name")
    String name) {
        //TODO write your implementation code here:
        return "Shit! " + name + " 바보!";
    }

}
[/code]
위와 같이 name이라는 파라메터를 넣으면 return은 Shit! 이름 바보! 라고 보내줍시다.
이제 한번 run을 해봅시다.
GlassFish가 시작되면서 브라우저로 웹페이지가 뜹니다.
Hello World!라고 뜨는군요. 이제 WebService를 테스트해봅시다.

WebService -> Hello에 오른쪽버튼 클릭 후 Test Web Service를 클릭합니다.


한글은 깨지는군요. 어쨌든 WSDL파일도 클릭하면 볼 수 있습니다.
테스트하면 잘 되는군요.

다음시간에는 클라이언트를 통해서 저 웹서비스를 호출해보도록 하겠습니다.
클라이언트 언어는 쉽게 WebService를 호출할 수 있는 Flex로 해보도록 합시다-_-;
클라이언트는 여기를 클릭하세요.
http://mudchobo.tomeii.com/tt/329
 
Posted by 머드초보
,
 

예전에 설치하다가 실패한 경험이 있어서-_-; 다시 해보았더니 이건 뭐 완전 쉽군요.
http://allting.egloos.com/1845643
이 분 포스트 보고 따라했습니다-_-;

우선 서브버전을 받습니다.
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
요기서 svn 1.4.6이 최신버전인 것 같습니다. 윈도우용 exe로 된 거-_-;
지가 알아서 설치해주는 버전으로 받아서 설치합니다.

설치하면 기본적으로 Program Files\Subversion\ 경로에 설치가 됩니다.

그 다음 저장소로 지정될 폴더를 만들어줍니다. 저는 C:\svn\mudchobo\ 경로를 생성했습니다.
그러면 이렇게 명령어를 써줘야합니다. svnadmin은 설치폴더에서 bin디렉토리에 있습니다.
[code]svnadmin create --fs-type bdb C:\svn\mudchobo[/code]
fs옵션이 파일시스템 옵션인데 보통 bdb로 하는 것 같아요-_-; 잘 몰라요 검색 고고싱~

해당 폴더에서 conf폴더에 보면 설정파일이 있는데요. svnserve.conf파일에 아래내용을 추가합니다.
위에 예시가 있어서 주석만 지우셔도 돼요.
[code][general]
anon-access = none
auth-access = write
password-db = passwd[/code]

설정 내용으로 보니, 익명접근자는 차단하고, 인증성공한사람은 쓰기권한이고, 비밀번호db는 passwd라는 파일에 있다라고 얘기하는 것 같습니다. 그러면 passwd에다가 계정을 추가해야합니다.
passwd파일을 열어봅시다.

[code][users]
# harry = harryssecret
# sally = sallyssecret
mudchobo = 1234[/code]
해리가 샐리를 만났을 때 인가요? 어쨌든-_-; 앞에는 아이디고 뒤에는 비밀번호입니다.
저렇게 지정해 두면 저 계정으로 로그인 할 수 있습니다.

설정이 끝났네요. 오 완전 쉽네. 그 다음에 이 놈도 서버인 관계로 서버를 실행해놔야돼요.
해당 bin디렉토리에 있는 svnserve.exe파일이 서버 실행파일입니다.
[code]svnserve -d -r c:\svn[/code]
요렇게 실행하게 되면, svn://localhost/mudchobo 로 접근이 됩니다.

이제 넷빈즈를 실행해봅시다.
넷빈즈는 이클립스처럼 subversive나 subclipse같은 플러그인 설치 없이 subversion Client를 내장하고 있습니다. 따로 플러그인 설치 안해도 됩니다.

프로젝트를 한번 만들어봅시다.
자바 프로젝트로 아무거나 한개 만든다음에, 프로젝트이름에 오른쪽 마우스를 클릭하고, Versioning선택하고, Import into Subversion Repository를 선택합니다.
Repository URL에는 svn://localhost/mudchobo 라고 합니다. 아까 우리가 만들었던 repository이름입니다.
User와 password는 passwd파일에 지정한 mudchobo와 1234를 넣어주면 됩니다.
Next를 누르면 Repository폴더를 작성하게 되는데 프로젝트명이랑 같게 해줍니다.
Specify the Message에다가 걍 뭐라고 써줍시다. 안써주면 Finish가 안돼요-_-;
Finish를 누르면 commit이 됩니다.

프로젝트를 지워버리고, 다시 가져오도록 해봅시다.
넷빈즈 메뉴에서 맨 위에 Versioning에 Subversion -> Checkout이 있습니다. 선택합니다.
Repository URL에 svn://localhost/mudchobo 아까 올렸던 주소를 쓰고,
User와 password에 mudchobo 1234를 넣습니다.
Repository Folders에 보면, 가져올 수 있는 폴더들이 보입니다.
방금 생성해서 커밋한 프로젝트가 있을 껍니다. 그걸 선택합시다.
그러면 CheckOut이 되었습니다. Open Project를 해서 가져온 프로젝트를 열어봅시다.
그러면 된 겁니다-_-;

이상!-_-;

 
Posted by 머드초보
,
 

저는 이클립스보다 넷빈즈를 더 좋아합니다-_-;
그 이유는 간단합니다. 이클립스는 IBM에서 지원하고, 넷빈즈는 SUN에서 지원합니다.
저는 IBM을 싫어합니다-_-; 미친 현대차 DB2가 말썽을 일으켜서-_-; 그래서 넷빈즈가 더 좋아요-_-;

회사에서 C를 주로 하는데 넷빈즈에서 C도 잘 돼서 그걸 이용해서 테스트를 하고 있어요 ^^
이클립스는 플러그인으로 C를 설치해야하는데 넷빈즈는 올인원을 제공해요.
게다가 Ruby도 지원하고, EJB, Struts, SOA, UML도 되네-_-; Swing도 마우스로 그릴 수 있는 인터페이스를 제공하고, 최근에는 php까지 지원하는 걸로 알고 있는데...
아....프로파일링인가? 그런 것도 되가지고, 그 성능체크같은 것을 할 수 있어요. 메모리가 얼마나 잡아먹고 뭐 그런거요 ^^ 무료툴 치고는 미친듯이 좋습니다.
또 좋은 것은 tutorial과 충분한 sample을 제공하죠. 그래서 좋긴 한데....
가장 중요한 것은 아직 스프링을 하기에는 이클립스가 더 좋은 것 같습니다-_-;

이번 6.1에서 springframework MVC를 지원하게 되었는데요. beans을 정의하는 xml을 validate를 해주는 것 같군요. class라고 하면 정의한 클래스명이 나오는군요. 하지만, 이클립스 플러그인으로 있는 Spring IDE보다는 좀 안좋아요. Spring IDE는 aop도 체크해주고, 그래프로도 자동으로 그려주는 기능이 있죠 ^^ Validate기능은 말할 것도 없구요 ^^ 그래서 넷빈즈에서 이정도로 지원하는 걸보니 스프링이 대세인가봅니다.

이번에 우리회사에서도 스프링으로 프레임워크를 바꿔서 시도해보고 있던데-_-;

뭐어쨌든, 넷빈즈는 계속 진화하는 모양입니다. 최근 진행하고 있는 듯한 자바원이라는 행사에서도 sun에서 넷빈즈를 그렇게 홍보를 했다죠. 어쨌든 더 진화했으면 좋겠네요 ^^

사용자 삽입 이미지

 
Posted by 머드초보
,
 

jsmooth는 jar를 exe파일로 생성해줍니다. JAVA가 없을시에는 경고메시지와 함께 홈페이지로 이동 시켜주는 기능도 해주지요 ^^

우선 jsmooth를 설치해봅시다.
http://sourceforge.net/project/showfiles.php?group_id=86730
최신버전은 0.9.9-7버전이군요. 다운로드해서 설치를 합니다.

그러면 우선 간단하게 넷빈즈를 이용해서 java Swing프로젝트를 하나 만들어봅시다.
Netbeans 6.0을 실행하고, File -> New Project에서 Java -> Java Desktop Application을 선택합니다.
Project Name은 Hello Swing을 하고, 아래에 Basic Application선택하고 Finish를 클릭합시다.

GUI화면이 나오는데 오른쪽에 Label을 드래그해서 프레임에 넣어봅시다.
그리고 Label에 대고 오른쪽버튼을 클릭하고 Edit Text를 클릭해서 "Hello Swing" 이라고 써봅시다.

사용자 삽입 이미지


F11을 눌러서 빌드하고(JAR로 만들어줍니다) F6을 눌러서 실행해봅시다.
사용자 삽입 이미지


아...잘나오는군요. 이제 해당프로젝트경로/dist/ 라는 폴더에는 jar파일과 실행에 필요한 jar파일이 생성되어 있습니다. 이것을 이용해서 jsmooth를 통해 exe파일을 만들 수 있습니다.

jsmooth를 실행합니다.
왼쪽메뉴에서 Skeleton을 선택합니다. 윈도우용 프로그램이므로 Windowed Wrapper를 선택합니다.

Executable을 선택합니다.
Executable Binary는 만들어질 실행파일(경로포함)을 써주면 되고, Executable Icon은 프로그램의 아이콘을 뭘로 할 것인가를 정하는 겁니다. Current Directory는 설정안해줘두 돼요. 여기서 주의사항은 Executable Binary는 꼭 경로/실행이름.exe 형식으로 exe형식으로 지정해줘야합니다.

Application을 선택합니다. 가장 중요한 부분이군요.
Embbeded jar settings에서 Embedded jar에서 Use an embedded jar체크 후에 우리가 만든 HelloSwing.jar파일을 선택합니다.
그리고 Classpath에는 이 프로그램이 실행되기 위해 외부jar가 쓰였으면 추가를 하는 것인데 dist폴더에 보면 lib폴더가 있고 2개의 jar파일이 있습니다. 이 두개도 포함이 되어야합니다.
+버튼을 클릭하고 2개를 추가해줍시다.
그리고나서 Main Class를 지정해줘야합니다. helloswing.HelloSwingApp가 아마 메인클래스 일껍니다.


사용자 삽입 이미지


그 다음 JVM Selection을 선택합니다.
Java version setting을 해줘야하는데 최소한 필요한 자바버전을 써주면 되고, 최대지원하는 자바버전을 써주면 됩니다. 만약 나의 애플리케이션이 1.4에서도 돌아간다면 1.4라고 쓰면됩니다.
저는 1.6에서 컴파일했으니 1.6이라고 쓰겠습니다. 컴에 1.6이 없으면 java홈페이지로 연결해서 받도록 됩니다.
나머지는 그냥 냅둬도 됩니다.

그러면 이제 Project메뉴 -> Compile 하면 exe파일이 생성됩니다.

실행해보면 똑같은 화면이 나올껍니다 ^^

 
Posted by 머드초보
,
 

Controller를 만들어봅시다.
우선 com.phpschool.guestbook.controller 패키지를 만듭시다.
New -> Java Class를 선택해서 ListController클래스를 만듭시다.

이 ListController는 Controller라는 인터페이스를 상속받습니다.
Controller는 org.springframework.web.servlet.mvc.Controller를 선택합시다.





ListController.java
[code]package com.phpschool.guestbook.controller;

import com.phpschool.guestbook.service.GuestbookManager;
import com.phpschool.guestbook.vo.GuestbookVo;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ListController implements Controller {

    private GuestbookManager guestbookManager;

    public void setGuestbookManager(GuestbookManager guestbookManager) {
        this.guestbookManager = guestbookManager;
    }

    public ModelAndView handleRequest
      (HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        List<GuestbookVo> contentslist = guestbookManager.getContents();

        return new ModelAndView("list", "contentslist", contentslist);
    }
}[/code]
Manager를 멤버변수로 선언하고 setter를 만듭시다. Manager를 통해 db에서 데이터를 가져와서 ModelAndView를 리턴하는데 contentslist라는 객체를 list.jsp로 넘겨주게 됩니다.

이제 서블릿에 해당요청이 들어올 때 처리하는 부분을 추가해봅시다.
dispatcher-servlet.xml파일을 열어봅시다.
[code]
<props>
<prop key="/index.htm">indexController</prop>
    <prop key="/list.htm">listController</prop>
</props>[/code]
list.htm 요청을 추가하고 저 요청이 들어오면 listController라는 컨트롤러에게 넘겨준다는 얘기입니다.
listController부분을 추가해줍시다.
[code]   
<bean name="listController"
          class="com.phpschool.guestbook.controller.ListController">
        <property name="guestbookManager" ref="guestbookManager" />
</bean>
[/code]
listController는 좀전에 구현한 ListController클래스입니다.

이제 jsp부분을 보도록 합시다.

index.jsp
[code]<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/taglibs.jsp" %>
<%@ include file="/WEB-INF/jsp/header.jsp" %>

<h5><a href="list.htm">스프링 + iBATIS 예제</a></h5>

<%@ include file="/WEB-INF/jsp/footer.jsp" %>
[/code]
상단에 UTF-8페이지임을 추가하고 중간에 list.htm을 요청하는 링크를 추가합니다.

list.jsp
[code]<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/taglibs.jsp" %>
<%@ include file="/WEB-INF/jsp/header.jsp" %>

<c:forEach var="contentslist" items="${contentslist}">
    <div>
        <p>이름 : ${contentslist.name}</p>
        <p>제목 : ${contentslist.subject}</p>
        <p>내용 : ${contentslist.content}</p>
        <p>아이피 : ${contentslist.ip}</p>
        <p>날짜 : ${contentslist.datetime}</p>
    </div>
    <hr />
</c:forEach>

<%@ include file="/WEB-INF/jsp/footer.jsp" %>[/code]
jstl문법을 이용해서 해당 객체를 출력하면 됩니다.
결과를 보도록 합시다.

사용자 삽입 이미지

음.....잘 나오네요.....-_-; 저걸 보려고 저렇게 많은 코드를.....-_-;
 
Posted by 머드초보
,