넷빈(Netbeans)6.8에서 stateless 세션과 servlet 3.0 연동하기 - basic

0

Written on 오전 6:38 by 강여사(J.Y.Kang)

이번 예제에서는 서블릿 3.0 에다 EJB 무상태 세션 빈(Stateless Session Bean)을 연결해보도록 하겠습니다.

우선 작업환경은 다음과 같습니다.

넷빈: 6.8
서버: 글래스피시 v3 도메인
버전: EE 6 Web

그럼 프로젝트를 새로 만듭니다.

파일 - 새 프로젝트

Java Web - Web Application 선택
다음 클릭

프로젝트 명은 StatelessServlet 이라고 줬습니다.
경로 적당히
다음 클릭

서버를 글래스피시 v3 도메인으로
버전은 EE 6 Web 으로 줍니다.
마침 클릭

그럼 기본 웹 어플리케이션이 만들어집니다.
여기에 서블릿을 새로 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other

Web - Servlet 선택
다음 클릭

이름을 StatelessServlet 이라고 줬습니다.
패키지는 stateless 라고 줍니다.
다음 클릭

역시 자바 서블릿 3.0 에서는 web.xml 이 옵션가능이므로 체크가 해제되어 있습니다.
기본 그대로
마침 클릭

만들어진 서블릿 소스에
@WebServlet 어노테이션과 함께 지정된 내용들이 작성되어 있는 것을 확인해볼 수 있습니다.
==================================================================

@WebServlet(name="NewServlet", urlPatterns={"/NewServlet"})
public class NewServlet extends HttpServlet {

==================================================================

자 그럼 이 서블릿에서 호출할 무상태 세션빈을 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other

Java EE - Session Bean 선택
다음 클릭

클래스 이름은 NewSessionBean
패키지 이름은 stateless
유형에 Stateless 를 선택합니다.
다음 클릭

만들어진 세션 빈 소스에서 주석에 나온대로 메소드를 추가하기 위해 소스 삽입(insert code: ALT+INSERT)를 선택합니다. 그럼 그림처럼 add business method 메뉴가 나타납니다.
클릭

팝업창이 뜨면 그림과 같이 작성합니다.
메소드 이름 sayHello
리턴유형 java.lang.String
파라미터 추가(add)버튼을 눌러
파라미터 변수 이름에 name (<-parameter대신) 바꿉니다.
OK

작성된 코드에서 return null; 부분을 다음과 같이 바꿉니다.
==========================================================
return "Hello, " + name + "!\n";

==========================================================

이제 서블릿 소스로 다시 돌아와 좀전에 작성한 EJB 비즈니스를 호출하도록 하겠습니다.
서블릿 소스에서 소스 삽입(insert code:ALT+INSERT)를 선택하면 메뉴 중 call Enterprise Bean 메뉴가 있습니다.
클릭.

팝업창에 EJB 빈이 나타나는데 확장해서 위에 작성한 NewSessionBean 을 선택합니다.
OK 클릭

그럼 다음 소스와 같이 작성됩니다.(확인)
--------------------------------------------------------------------------------
@EJB
private NewSessionBean newSessionBean;
--------------------------------------------------------------------------------

이번에는 게시물의 try 안의 주석으로 되어 있는 부분 대신 다음 코드를 복사해서 붙여넣습니다. (직접 작성하셔도 됩니다. ^^)
================================================================================
out.println("<html>");
out.println("<head>");
out.println("<title>무상태 세션 빈 연동 서블릿 테스트</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>이름을 넣어주십시오</h1>");
out.println("<form method=\"POST\">");
out.println("<TABLE>");
out.println("<tr><td>Name: </td>");
out.println("<td><input type=\"text\" name=\"name\"> </td>");
out.println("</tr><tr><td></td>");
out.println("<td><input type=\"submit\" name=\"sub\"> </td>");
out.println("</tr>");
out.println("</TABLE>");
out.println("</form>");
String val = request.getParameter("name");
if ((val != null) && (val.trim().length() > 0)) {
out.println("<FONT size=+1 color=red> Greeting from StatelessSessionBean: </FONT> "
+ newSessionBean.sayHello(val) + "<br>");
}
out.println("</body>");
out.println("</html>");

================================================================================

이제 이 서블릿을 실행해야 하는데 프로젝트에서 서블릿으로 바로 호출되도록 등록정보를 수정하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - 등록 정보(properties)

Run 부분에서 그림과 같이 relative URL 값에다 /NewServlet 를 적어줍니다.

프로젝트 실행 (RUN)

그럼 브라우저에서 입력박스가 나타납니다.
적당히 abc 라고 줍니다.

해당 내용이 무상태 세션 빈을 통해 다시 서블릿으로 출력됩니다.


수고하셨습니다.

자 그럼 퀴즈~~

여기서 값을 "가나다"로 온전히 출력하려면 어떻게 하면 될까요? ㅎㅎ

아시는 분은 답글을..



넷빈(Netbeans)6.8에서 JSF 2.0 사용하기-소개-03

0

Written on 오후 10:08 by 강여사(J.Y.Kang)

이제 JSF 템플릿을 사용해보도록 하겠습니다.
우선 템플릿이 될 파일을 만듭니다.
프로젝트에서 마우스 오른쪽 클릭 - new - other

JavaServer Faces 에서 Facelet Templates 을 선택합니다.
다음 클릭

템플릿 이름은 template 으로 주고
아래 css 레이아웃에 아래쪽 3번째를 선택했습니다.
마침 클릭

기본 작업되어 있는 내용이 제시됩니다.
이번 예제에서는 계속 쓰던 css 를 이 템플릿을 이용하여 사용할 것이기 때문에 만들어진 내용을 다 지우고
아래 소스로 바꿔넣습니다.
=========================================================================
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">

<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="css/stylesheet.css" rel="stylesheet" type="text/css" />
<title><ui:insert name="title">Facelets Template</ui:insert></title>
</h:head>
<h:body>
<div id="mainContainer">
<div id="left" class="subContainer greyBox">
<ui:insert name="box">Box Content Here</ui:insert>
</div>
<div id="right" class="subContainer">
<img src="duke.png" alt="Duke waving" />
</div>
</div>
</h:body>
</html>
=========================================================================

그리고 이 파일을 실행해보면 (프로젝트를 다시 실행하고 주소 표시줄에 해당 파일 이름을 입력하면 됩니다)
다음 그림과 같이 css 가 잘 작업되어 나옵니다.

이제 템플릿의 클라이언트 파일을 만들도록 하겠습니다.
프로젝트에서 마우스 오른쪽 클릭 - new - other

JavaServer Faces 에서 Facelets Template Client 를 선택
다음 클릭

파일 이름은 greeting 이라고 주고
아래쪽의 template 파일에서 browse... 버튼을 눌러 좀전에 작성한 template.xhtml 파일을 선택합니다(select file) 클릭.

그런 다음 만들어진 greeting.xhtml 에서 <ui:define> 안의 내용을 title -> Greeting 으로 바꿉니다.

그리고 body 부분에다가 다음 소스로 바꿔 넣습니다.
============================================================================
<ui:composition template="./template.xhtml">
<ui:define name="title">
Greeting
</ui:define>
<ui:define name="box">
<h4>Hi, my name is Duke!</h4>
<h5>I'm thinking of a number
<br/>
between
<span class="highlight">0</span> and
<span class="highlight">10</span>.</h5>
<h5>Can you guess it?</h5>
<h:form>
<h:inputText size="2" maxlength="2" value="#{UserNumberBean.userNumber}" />
<h:commandButton id="submit" value="submit" action="response" />
</h:form>
</ui:define>
</ui:composition>
============================================================================

이제 response.xhtml 에서도 템플릿을 적용하도록 하겠습니다.
다음 내용으로 바디 부분을 변경합니다.
-----------------------------------------------------------------------------
<ui:composition template="./template.xhtml">
<ui:define name="title">
Response
</ui:define>
<ui:define name="box">
<h4><h:outputText escape="false" value="#{UserNumberBean.response}"/></h4>
<h:form prependId="false">
<h:commandButton id="backButton" value="Back" action="greeting" />
</h:form>
</ui:define>
</ui:composition>
-----------------------------------------------------------------------------

이제 첫 화면을 greeting이 뜨도록 하기 위해 web.xml 에서 다음과 같이 수정합니다.
web.xml 을 열어 Pages 탭을 누르면 welcome files 이 index.xhtml 로 되어 있습니다. 이를 greeting.xhtml 으로 바꿉니다.

그런 다음 프로젝트를 실행 (run) 합니다.(css 까지 잘 적용된 그림)

8을 주고 submit 버튼을 눌렀을 때 입니다. Yay~ 가 잘 나오는군요..

back 버튼도 잘 작동하는 지 확인해봅시다~


수고하셨습니다. *^^*

넷빈(Netbeans)6.8에서 JSF 2.0 사용하기-소개-02

0

Written on 오후 6:38 by 강여사(J.Y.Kang)

이제 페이지에 좀전에 작성한 빈을 연결하도록 하겠습니다.

우선 기본으로 만들어진 index.xhtml 을 엽니다.
바디부분에 다음과 같은 내용을 작성해서 넣습니다.
------------------------------------------------------------------
<h:body>
<h5>Can you Guess It?</h5>
<h:form>
<h:inputText size="2" maxlength="15" >
</h:inputText>
<h:commandButton id="submit" value="submit" >
</h:commandButton>
</h:form>

------------------------------------------------------------------
태그를 동적으로 만들어 놓고 빈과의 연결을 시도합니다.
-------------------------------------------------------------------
<h:body>
<h5>Can you Guess It?</h5>
<h:form>
<h:inputText size="2" maxlength="15" value="#{UserNumberBean.userNumber}">
</h:inputText>
<h:commandButton id="submit" value="submit" >
</h:commandButton>
</h:form>
-------------------------------------------------------------------

-------------------------------------------------------------------
<h:body>
<h5>Can you Guess It?</h5>
<h:form>
<h:inputText size="2" maxlength="15" value="#{UserNumberBean.userNumber}">
</h:inputText>
<h:commandButton id="submit" value="submit" action="response" >
</h:commandButton>
</h:form>
-------------------------------------------------------------------

이제 페이지 네비게이션을 위한 구성파일을 만들도록 하겠습니다.

이전과는 달리 JSF 프레임워크를 선택하였더라도 facelets를 선택했다면 face-config.xml 은 기본 작업되지 않습니다. 따라서 이 파일을 만들어야 합니다.

프로젝트에서 마우스 오른쪽 클릭 - new - other

JavaServer Faces 를 선택하고 JSF Configuration File 을 선택합니다.
다음 클릭

파일 이름으로 faces-config 를 줍니다
마침 클릭

만들어진 구성파일에 네비게이션 룰을 다음과 같이 작성하여 넣습니다.
--------------------------------------------------------------------
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>

<navigation-case>
<from-outcome>response</from-outcome>
<to-view-id>/response.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
--------------------------------------------------------------------

이제 response.xhtml 파일을 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other

JavaServer Faces 에서 JSF Page 선택
다음 클릭

이름은 response 라고 줍니다.
마침 클릭

그리고 body 부분에 다음과 같이 작성해 넣습니다.
==================================================================
<body>
<div id="mainContainer">
<div id="left" class="subContainer greyBox">
<h4><h:outputText value="#{UserNumberBean.response}"/></h4>
<!--<form action="index.xhtml">
<input type="submit" id="backButton" value="Back" />
</form>-->
<h:form>
<h:commandButton id="backButton" value="Back" action="index" />
</h:form>
</div>
<div id="right" class="subContainer">
<img src="duke.png" alt="Duke waving" />
<!--<h:graphicImage url="/duke.png" alt="Duke waving" />-->
</div>
</div>
</body>
===================================================================

이번 예제에서 사용할 stylesheet.css 를 해당 폴더(css)에 넣습니다. - 첨부파일 참조

프로젝트를 실행합니다.
숫자를 입력할 수 있는 칸이 뜹니다.
3으로 입력하고 submit 버튼을 누릅니다.

잘못된 추측이라고 나옵니다.

현재 이 상태에는 약간의 오류가 있는데 첫번째는 <p> 태그가 그냥 나온다는 점이고, 두번째는 back 버튼이 정상 동작하지 않습니다.
따라서 아까의 부분에 다음의 내용을 추가합니다.
-----------------------------------------------------------------------------
<h4><h:outputText escape="false" value="#{UserNumberBean.response}"/></h4>
-----------------------------------------------------------------------------

-----------------------------------------------------------------------------
<h:form prependId="false">
-----------------------------------------------------------------------------

이제 다시 프로젝트를 실행(run)한 후 서버(server.log)창에서 적혀있는 값을 확인하여 그 값을 넣어줍니다.

그럼 다음 그림과 같이 맞다고 나옵니다.

이제 다음에는 여기에 템플릿을 사용해보도록 하겠습니다. 계속...