레이블이 JAVA AWT Text Event인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JAVA AWT Text Event인 게시물을 표시합니다. 모든 게시물 표시

2013년 8월 6일 화요일

[오라클자바교육강좌]Easy Struts를 이용한 예제

Easy Struts를 이용한 예제 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



1.Tomcat Project를 하나 만듭니다.

- File  --> New를 선택 후 “Project”를 선택 합니다.

-Java 옵션의 “Tomcat Project”를 선택 후 적절한 프로젝트 이름을 입력 합니다. 그런 다음 Next 하시구요…
(우린 EasyStruts라고 하자구요~)

-“Can update server.xml”을 check 확인 하시구요(이건 디폴트 입니다)

-“Finish” 합니다.

2.Easy Struts가 사용 가능하도록 합니다.

- “New” (좌측 상단에 위치) 버튼을 클릭 합니다.
-“Java” 옵션의 하위 옵션인 “Easy Struts”를 선택 합니다.

 

오른쪽에 보이는 것은 Easy Struts가 제공하는 10가지의 Function 입니다.

- Base package for generation : com.asprise.struts
-“Add Easy Struts support" 를 선택 후 Next 합니다.
-"Copy Struts binary" 와"Copy Struts TLD" 를 체크 합니다.



3.“Easy Action Associated with a Form”을 이용하여 작업 하기

좌 상단의 New 버튼을 누른 후 “Easy Struts Function View”를 띄웁니다. “Easy Action associated with a form" 을 선택하고 아래의 과정을 따라 합니다.

Use case, Forn Name 과 FornType을 변경 합니다. (이건 화면을 띄우면 기본적으로 값이 채워져 있습니다.)

Use case : owner
Form name : ownerForm
Form Type : com.asprise.form.OwnerForm

그런 다음 Form properties에서 “Add”를 클릭 합니다.
아래와 같이 속성을 줍니다.

이름 :: 타입 :: 초기치 :: JSP input type
----------------------------------------------
greet :: java.lang.String : Mr. : :: select
name :: java.lang.String : : :: text
email :: java.lang.String : : :: text
tel :: java.lang.String:: :: text
address :: java.lang.String : : :: text

위와 같이 속성을 주게되면 struts에서는 자동으로 setter와 getter를 생성 하게 되는 겁니다.

그런 다음 아래에서 처음 두 개의 체크 박스를 체크 하시구요 다음으로 넘어 갑니다.

       
4. 위에서 Next를 하게 되면 화면이 하나 나타나는데 기본적으로 input value는 “/form/owner.jsp”로 되어 있을 겁니다.
이 JSP 파일의 Location은 수작업 또는 Preference Setting을 통해 수정 하는 것이 가능 합니다. Preference Setting을 수정
하기 위해서는 “Window” 메뉴의 “Preference”로 이동 후 “Easy Struts” 옵션을 선택 합니다. 그런 다음 “Style” 탭을 선택하고
적절하게 “JSP form localtion”을 수정 합니다. 만약 공백으로 준다면 지금 나타나는 화면에서 /owner.jsp로 나타날 겁니다.
아래에 각 항목에 대한 설명이 있습니다.

Path. 서브밋 되는 Request의 Path이며 반드시 “/”로 시작 해야 합니다.
Type. ActionMapping,에서 사용되는 Action Class의 이름
Attribute. Request Scope나 Session Scope에서 폼빈에 대한 이름
Scope: 폼빈이 이 매핑을 통해 존재하게 될 Scope
input. : 에러 등이 나게 되면 Return하게 되는 context-relative path 
Validate : 이걸 체크하게 되면 ActionForm.validate() method 가 Call 됩니다.
Parameter. Action에게 넘겨 줄 파라미터 등을 기술

Path : /owner
Type : com.asprise.struts.OwnerAction
Attribute : ownerForm
Scope : Request
(Create JSP)Input : /owner.jsp

 
4.위화면에서 Next를 누르게 되면 Forward와 Exception을 설정 하게 되는데 그 내용은 아래와 같습니다.

Forward : Action이 포워드될 Servlet이나 JSP 자원에 대한 Context-relative 경로
Exception : 이 mapping과 관련된 Exception Handler

아래와 같이 Forward를 만듭니다.

Forward name : success
Forward path : /success.jsp

 

화면에서  Finish를 클릭하면 Struts 시스템에서는 자동으로 com.asprise.struts.form.OwnerForm.java and com.asprise.struts.action.OwnerAction.java 파일을 만들게 됩니다. (EasyStruts/WEB-INF/src/ 아래에 만듭니다) 이와 동시에 /owner.jsp 파일도 자동으로 만들어 집니다.  개발자는 적절히 이러한 파일들을 수정을 하면됩니다. 폼빈에서는 validate 메소드 등을 적절히 완성하면 됩니다.

5.이번에는 자동으로 만들어진 Action Class를 수정해 보도록 합니다.

아래의 소스가 자동으로 만들어진 Action Class 입니다. 여기에서 Interger라고 한 부분을 int로 수정 하시구요….

여러분들은 validate() 메소드를 추가해 주시면 됩니다. Validate가 추가된 소스는 다음에 있으니 참고 바랍니다.

Validate() 메소드가 추가된 OwnerForm.java 파일은 다음과 같습니다.

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

// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (No such file or directory))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

package com.asprise.struts.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
 * OwnerForm.java created by EasyStruts - XsltGen.
 * http://easystruts.sf.net
 * created on 01-25-2005
 *
 * XDoclet definition:
 * @struts:form name="ownerForm"
 */
public class OwnerForm extends ActionForm {

        // --------------------------------------------------------- Instance Variables

        /** greet property */
        private String greet = "Mr.";

        /** address property */
        private String address;

        /** email property */
        private String email;

        /** tel property */
        private String tel;

        /** name property */
        private String name;

        // --------------------------------------------------------- Methods

        /**
        * Method validate
        * @param ActionMapping mapping
        * @param HttpServletRequest request
        * @return ActionErrors
        */
        public ActionErrors validate(
                ActionMapping mapping,
                HttpServletRequest request) {

                        ActionErrors errors = new ActionErrors();
                  if (greet == null || greet.trim().equals("")) {
                        errors.add("greet", new ActionError("error.greet"));
                  }
                  if (name == null || name.trim().equals("")) {
                        errors.add("name", new ActionError("error.name"));
                  }
                  if (address == null || address.trim().equals("")) {
                        errors.add("address", new ActionError("error.address"));
                  }
                  if (email == null || email.trim().equals("")) {
                        errors.add("email", new ActionError("error.noEmail"));
                  }
                  else if (email.indexOf("@")==-1) {
                        errors.add("email", new ActionError("error.wrongEmail"));
                  }
                  if (tel == null || tel.trim().equals("")) {
                        errors.add("tel", new ActionError("error.tel"));
                  }
                  return errors;
    }

       

        /**
        * Method reset
        * @param ActionMapping mapping
        * @param HttpServletRequest request
        */
        public void  reset(ActionMapping mapping, HttpServletRequest request) {
                greet = "Mr.";
                address = "";
                email = "";
                tel = "";
                name = "";

        }

        /**
        * Returns the greet.
        * @return String
        */
        public String getGreet() {
                return greet;
        }

        /**
        * Set the greet.
        * @param greet The greet to set
        */
        public void setGreet(String greet) {
                this.greet = greet;
        }

        /**
        * Returns the address.
        * @return String
        */
        public String getAddress() {
                return address;
        }

        /**
        * Set the address.
        * @param address The address to set
        */
        public void setAddress(String address) {
                this.address = address;
        }

        /**
        * Returns the email.
        * @return String
        */
        public String getEmail() {
                return email;
        }

        /**
        * Set the email.
        * @param email The email to set
        */
        public void setEmail(String email) {
                this.email = email;
        }

        /**
        * Returns the tel.
        * @return String
        */
        public String getTel() {
                return tel;
        }

        /**
        * Set the tel.
        * @param tel The tel to set
        */
        public void setTel(String tel) {
                this.tel = tel;
        }

        /**
        * Returns the name.
        * @return String
        */
        public String getName() {
                return name;
        }

        /**
        * Set the name.
        * @param name The name to set
        */
        public void setName(String name) {
                this.name = name;
        }

}

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

6.이번에는 OwnerAction.java 에서 사용된 error key에 대한 부분을 ApplicationResources.properties 파일에 설정 합니다.

# Resources for parameter 'com.asprise.struts.ApplicationResources'
# Project P/EasyStruts

errors.header=<h4>Validation Error(s)</h4><ul>
errors.footer=</ul><hr>

error.greet=<li>Choose your greet
error.name=<li>Enter your name
error.address=<li>Enter your address
error.tel=<li>Enter your contact number
error.wrongEmail=<li>Correct your email
error.noEmail=<li>Enter your email


7.이번에는 OwnerAction.java 파일을 변경 합니다.

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

// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (No such file or directory))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

package com.asprise.struts.action;

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

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.asprise.struts.form.OwnerForm;

/**
 * OwnerAction.java created by EasyStruts - XsltGen.
 * http://easystruts.sf.net
 * created on 01-25-2005
 *
 * XDoclet definition:
 * @struts:action path="/owner" name="ownerForm" input="/owner.jsp" validate="true"
 * @struts:action-forward name="/success.jsp" path="/success.jsp"
 */
public class OwnerAction extends Action {


        /**
        * Method execute
        * @param ActionMapping mapping
        * @param ActionForm form
        * @param HttpServletRequest request
        * @param HttpServletResponse response
        * @return ActionForward
        * @throws Exception
        */
        public ActionForward execute(
                ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response)
                throws Exception {
                        OwnerForm ownerForm = (OwnerForm) form;
     
                  String greet = ownerForm.getGreet();
                  String name = ownerForm.getName();
                  request.setAttribute("name", name);
                  request.setAttribute("greet", greet);

                  // Forward control to the specified success target

                  return (mapping.findForward("success"));

        }

}

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

8.이번에는 owner.jsp를 수정 합니다.

“greet”라는 속성을 만들 때 select 형태로 주었습니다, 이 부분에 적절한 옵션을 추가해 주시면 됩니다.

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
  <head>
      <meta
        name = "Generator"
        content = "Easy Struts Xslt generator for Eclipse (http://easystruts.sf.net).">
      <title>Struts Form for ownerForm</title>
  </head>
  <body>
      <html:form action="/owner">
        greet : <html:select property="greet">
                    <html:option value=""></html:option>
                    <html:option value="Mr.">Mr.</html:option>
                    <html:option value="Miss">Miss</html:option>
                    <html:option value="Mrs.">Mrs.</html:option>
                </html:select><html:errors property="greet"/>
    name : <html:text property="name"/><html:errors property="name"/></br>
    address : <html:text property="address"/><html:errors property="address"/></br>
    email : <html:text property="email"/><html:errors property="email"/></br>
    tel : <html:text property="tel"/><html:errors property="tel"/></br>
        <html:submit/><html:cancel/>
      </html:form>
    <html:errors />
  <body>
</html>


9.이번에는 success.jsp를 만듭니다. (EasyStruts 프로젝트에서 New , File 한 후 추가 합니다)

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<logic:present name="name" scope="request">
Thank you,
  <logic:present name="greet" scope="request">
      <bean:write name="greet" scope="request"/>
  </logic:present>
  <bean:write name="name" scope="request"/>
</logic:present>


10.이번에는 struts-config.xml 파일을 열어 설정을 확인합니다. UI형태를 지원하므로 편리하게 struts-config.xml을 설정하는 것이 가능 합니다

Struts-config.xml을 클릭하면 다음과 같은 UI를 가진 화면이 나타나는데 여기서 기존 방법보다 좀 더 편리하게 struts의 설정을 할 수가 있습니다.

 

11.실행 결과 확인 

2013년 8월 5일 월요일

(자바프레임워크 스트럿츠, 자바교육,자바오라클교육)Struts 국제화 및 message/text의 한글화

국제화 및 VIEW의 message/text의 한글화


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 




국제화란 다양한 언어 및 지역을 지원하는 것을 말합니다. 즉 언어가 바뀌더라도 코드의 수정 없이 언어에 대한 것이 지원 되어야 하며 텍스트 요소, 메시지, 이미지 등을 소스 외부에 두어 다양한 환경 변화에 능동적으로 대처가 가능 해야 합니다.

자바 언어의 java.util.ResourceBundle은 주어진 지역에 다라 리소스를 따로 그룹핑 할 수 있는 기능을 제공 합니다. 이러한 리소스는 필드명, 버튼의 레이블, 상태를 나타내는 메시지등 인데 이미지 이름이나 에러 메시지 같은 것들도 해당 됩니다.

스트럿츠에서는 자바에서 제공 하는 리소스 번들을 사용하지 않는 대신 비슷한 기능을 하는 org.apache.struts.util.MessageResources와 이를 실제 구현한 하위 클래스인 org.apache.struts.util.PropertyMessageResources를 사용 합니다.

이전 강좌인 로그인 예제의 로그인 화면(login.jsp)의 경우 텍스트 글씨를 application.properties 에서 읽어 화면에 뿌려 주었던 것을 기억 하실 겁니다. 아마 이 파일 안에 메시지를 한글로 넣으신 분들은 한글이 깨지는 것을 보셨을 거구요…

이번에는 한글도 안 깨어지면서 다양한 언어에 따라 지원 할 수 있는 국제화에 대해 알아 보기로 하겠습니다.

주의) 리소스 번들 파일의 확장자는 .properties 이며, WEB-INF/classes 아래에 package 형태로 위치해 있어야 합니다.

web.xml에서 다음과 같이 선언 되었다면….

<!-- 아래는 스트러츠 Application에서 사용할 Message Resource들을 설정 -->
<!-- 확장자가 properties인 application.properties를 만들어 넣으면 된다 -->
<message-resources parameter="resources.application"/>

WEB-INF/classes/resources 아래 application.properties 파일이 존재하고 있어야 합니다.

application.properties 파일이 다음과 같다고 했을 때…
-----------------------------------------
login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = 사용자아이디  :
prompt.password= 비밀번호 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


아마도 아래처럼  login.jsp가 구성 되어 있다면 텍스트의 한글이 깨질것입니다.

나머지 부분은 생략 했습니다.

                <tr>
                        <!-- Submit 버튼과 Reset 버튼을 생성 -->
                        <!-- 버튼의 라벨은 application.properties에서 내용을 가져 옵니다 -->
                        <th></th>
                        <td>
                            <html:submit>
                                <bean:message key="login.login" />
                                  </html:submit>
                       
                            <html:reset>
                                <bean:message key="login.reset" />
                                  </html:reset>
                        </td>
                </tr>                               
-------------------------------------------

[실행 화면]

 


이번에는 한글 문제도 해결 하고 국제화 부분도 처리하도록 하겠습니다.


/WEB-INF/classes/resources 에 application_en.properties를 다음과 같이 만듭니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = User ID  :
prompt.password= Password :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


이번에는 application.properties 를 만듭니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = 사용자아이디  :
prompt.password= 비밀번호 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


명령프롬프트를 실행 하여 다음처럼 하세요…
(native2ascii는 안에 있는 내용을 \uXXXX 형식인 유니코드로 바꾸어 자바 프로그램에서 한글로 읽어 낼 수가 있도록 해 줍니다. 혹시 궁금하신 분은 Java 강좌의 “Properties 파일에서 한글 읽기”를 참고하시기 바랍니다.)

D:\Tomcat-Project\Login\WEB-INF\classes\resources>native2ascii application.properties application_kr.properties

이 명령을 실행 하면 application_kr.properties 파일이 만들어 질겁니다. 그럼 application_kr.properties 파일을 열어 전체 내용을 복사하여 application.properties에 전체 붙여 넣습니다.

여기까지 수행 하면 파일은 총3개가 만들어 졌습니다.

Default인 application.properties
브라우저의 언어가 한국어일 때 저절로 호출되는 application_kr.properties
브라우저의 언어가 영어권일 때 저절로 호출되는 application_en.properties

브라우저의 언어 설정이 한국어나 영어권이 아니면 default가 호출되며 한국어 이면 저절로 application_kr.properties 파일이 호출되며 영어권이면 application_en.properties 파일이 참조 됩니다. 그런데 _kr이 붙은 것과 default는 같은 내용으로 native2ascii 한 내용 입니다.(즉 한글을 디폴트로 했습니다.) 이 내용은 유니코드로 변환 한 것이기 때문에 한글이 깨지지 않고 나타납니다.

참고로 application_ke.properties 및 application.properties 의 내용은 아래와 같습니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = \uc0ac\uc6a9\uc790\uc544\uc774\ub514  :
prompt.password= \ube44\ubc00\ubc88\ud638 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


Tomcat을 종료 후 다시 시작 후 login.jsp를 실행 하시면 다음과 같은 결과를 얻을 수 있습니다. (사용자아이디 :, 비밀번호: 라고 한글이 잘 나타납니다.)

[결과]
 

혹시 한글이 아닌 영어가 나타나시는 분은 브라우저의 언어 설정이 영어로 되어 있어서 그러하니 도구  인터넷옵션  언어를 한글로 바꾸시기 바랍니다.

그럼 이번에는 브라우저의 언어 설정을 영어로 바꾸어 볼까요?

도구  인터넷옵션  언어를 클릭하시면 다이얼로그 창이 나타납니다.

여가서 영어가 없으신 분은 “추가”를 하셔서 영어를 추가 하시구요…

그런 다음 영어를 맨 위로 올리세요…(맨 위에 오는 언어가 기본이거든요) 

이젠 영어가 기본 언어로 설정 된 것입니다.

그런 다음 다시 login.jsp를 실행 하면(브라우저에서 reload 하세요)

아래와 같은 결과가 나타납니다. (이번엔 라벨이 User ID, Password 와 같이 영어로 나타 납니다.)

[결과]
 


이상 입니다. Native2ascii 명령 기억하시구여,,, 브라우저의 언어 설정에 따라 화면의 텍스트가 한글 또는 영어로 되는 것을 잊지 마세요…

(Struts Login Exam)스트럿츠 를 이용한 간단한 로그인 예제

Struts를 이용한 간단한 로그인 예제


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 




이번엔 웹 개발의 전형적인 예로써 사용자의 ID와 Password를 입력 받아 이를 인증 후 결과 페이지로 Forward 시키는 것을 Struts Framework을 이용하여 만들어 보겠습니다.

구성요소들은  다음과 같습니다.

1.        로그인  HTML 페이지
2.        Controller&Model 역할을 하는 LoginAction
3.        ActionForm, 폼빈 역할을 하는 LoginForm
4.        로그인이 성공 이었을 때 분기하는 success.html
5.        로그인이 실패했을 경우 분기하는 fail.html

사용자는 HTML 웹페이지를 이용하여 ID/Password를 입력 후 로그인 버튼을 누릅니다. 이 요청을 Controller 와 Model의 역할을 동시에 수행 하는(이 예제에서…)LoginAction이 이를 받아 폼빈(LoginForm, 사용자가 HTML 폼에서 입력한 정보들이 들어 있다.)을 통해 사용자가 입력 한 정보를 추출 후 인증을 수행 합니다.

폼빈(LoginForm)이 존재 하므로 LoginAction에서는 요청 파라미터를 추출 하는 일은 없습니다. 최근에 발표된 RC2 버전인 경우 매번 폼빈을 생성 할 필요 없이 동적으로 파라미터를 추출 할 수 있도록 했는데 이를 동적 폼빈 이라고 하며 DynaActionForm 클래스를 이용 합니다.

주)이 예제를 이클립스에서 실행 하기 위해서 이전 강좌(Eclipse에서 Struts(HelloWorld))와 같이 struts-test 라는 Tomcat 프로젝트에서 작성을 합니다. 그리고 프로젝트에서 마우스 우측 버튼을 누른 후 속성 - Java Build Path - library - add jars를 하신 후 WEB-INF/lib 아래의 struts를 다운 받아서 푼 jar 파일들을 선택 해 주신 후 아래의 예제를 돌리셔야 합니다.

1.        로그인을 위한 login.jsp를 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)

<%@ page language="java" contentType="text/html;charset=euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:form action="/login">
        ID : < html:text property="id"/><br>
        Password : <html:password property="pwd"/><br>
        <html:submit value="로긴"/>
</html:form>

2.        로그인이 성공 했을 때 분기할 페이지인 success.html을 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)
3.       

<html>
        <head><title>로그인 성공 화면</title></head>
        <body>
                로그인이 성공 되었습니다...
        </body>       
</html>

4.        로그인이 실패 했을 경우 분기 할 페이지인 fail.html을 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)

<html>
        <head><title>로그인 실패 화면</title></head>
        <body>
                로그인 실패!!
        </body>       
</html>

5.        사용자가 요청 시 넘기는 값들을 빈으로 저장 해 놓기 위해 Request Parameter와 같은 구조를 가지는 폼빈을 만듭니다. LoginForm.java (이클립스인 경우 WEB-INF/src에서 마우스 우측 버튼을 클릭 후 new, class 하신 후 만드세요)

이 클래스는 Form빈으로서 사용자가 입력 한 값을 적절한 변수(프로퍼티)로 설정 해 주는 역할을 합니다. getXXX, setXXX 메소드등을 이용하여 적절한 변수 값으로 설정 되는 것입니다.


package login;
import org.apache.struts.action.*;

public class LoginForm extends ActionForm {
        protected String id;
        protected String pwd;
       
        public String getId() {
                return id;
        }
       
        public String getPwd() {
                return pwd;
        }
       
        public void setId(String id) {
                this.id = id;
        }
       
        public void setPwd(String pwd) {
                this.pwd = pwd;
        }       
}

6.        이번에는 MVC 모델의 컨트롤러 및 모델의 역할을 동시에 수행하는 LoginAction.java 파일을 만듭니다. 아래 파일에서 AuthUser라는 모듈을 자바빈으로 빼 낸다면 이것이 모델에 해당 하게 될겁니다. 본예제에서는 편의상 컨트롤러와 모델의 기능을 통합 시켰습니다.

이 클래스는 사용자가 입력 한 파라미터(id, pwd)를 LoginForm(폼빈)으로부터 받아 이
값을 이용하여 인증을 한 후 적절한 View를 선택 하여 포워딩을 하는 것입니다.

예제의 간결함을 위해 본 예제에서는 AuthUser 메소드는 무조건 인증이 성공됨을 알
리는 true를 리턴 합니다. 이 부분을 Oracle과 같은 DB와 JDBC등을 이용한 적절한
인증을 구현 하시는 것은 여러분들의 몫으로 넘기겠습니다.


package login;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;

public class LoginAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                                              HttpServletRequest req, HttpServletResponse res) {
                String id = ((LoginForm)form).getId();
                String pwd = ((LoginForm)form).getPwd();
               
                boolean isOK = authUser(id, pwd);
               
                if (isOK) {
                        return (mapping.findForward("success"));
                }
                else {
                        return (mapping.findForward("fail"));
                }               
        }
       
        public boolean authUser(String id, String pwd) {
                //이곳에서 디비에 접속해서 ID와 Password가 맞는지 확인 한다.
                //본 예제에서는 무조건 인증이 된것으로 true를 리턴 합니다
                return true;
        }
}


7.        이번에는 web.xml을 만듭니다. (WEB-INF에서 마우스 우측 버튼을 누른 후 new, file 하신 후 만드세요)

web.xml 파일에서 추가 한 내용은 URL창에 확장자가 .do인 요청이 들어 오면 ora.apache.struts.action.ActionServlet으로 요청을 보내도록 설정을 했습니다. 그런다음 스트럿츠의 설정 파일인 struts-config.xml의 위치를 알려주고 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>Welcome to Tomcat</display-name>
  <description>
    Welcome to Tomcat
  </description>
        <!-- Struts Tag Library Descriptors -->
        <taglib>
            <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
        </taglib>
        <taglib>
            <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
        </taglib>
        <taglib>
            <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
        </taglib>   
       
        <!-- ActionServlet Congif =====================================-->
        <servlet>
                <servlet-name>action</servlet-name>
                <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                <init-param>
                        <param-name>config</param-name>
                        <param-value>/WEB-INF/struts-config.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>               
        </servlet>
       
       
        <!-- ActionServlet Mapping ====================================-->
        <servlet-mapping>
                <servlet-name>action</servlet-name>
                <url-pattern>*.do</url-pattern>
        </servlet-mapping>


</web-app>


8.        이번에는 struts 설정을 위한 struts-config.xml을 만듭니다. . (WEB-INF에서 마우스 우측 버튼을 누른 후 new, file 하신 후 만드세요)

이 파일에서는 프로그램에서 사용 할 폼빈을 LoginForm으로 설정 하고 프로그램에서 사용 할 포워딩 이름을 설정 하는데(물론 이 부분은 action 설정에서 할 수도 있지만 전역적으로 설정 하기 위해 global-forwards 로 설정을 했습니다.

그리고 실제 요청을 처리 할 action 부분을 설정 하는데 예제 에서는 URL에 “/login”이 포함되어 있는 경우에 처리하라고 지정 했는데 LoginAction이 그 일을 하는거죠… 또한 폼빈으로 LoginForm을 설정 했습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
     
    <!-- ========== Form Bean Definitions ================================== -->
    <form-beans>
        <form-bean name="LoginForm" type="login.LoginForm">         
        </form-bean>       
    </form-beans>
   
 
    <!-- ========== Global Forward Definitions =============================== -->
    <global-forwards>
        <forward name="success" path="/success.html" />
        <forward name="fail" path="/fail.html" />
    </global-forwards>
   
    <!-- ========== Action Mapping Definitions =============================== -->
    <action-mappings>
        <action         
                path="/login"
                type="login.LoginAction"
            name="LoginForm"                       
            validate="false"
        >
        </action>       
    </action-mappings> 
</struts-config>

위에서 주석 만드실 때 주의하세요… <!—다음에 줄 두개짜립니다. “====” 만약 다음과 같이 하시면 Tomcat 시작시 오류 뜹니다.<!-------------- 

그리고 이클립스에서 만드시면 별도로 LoginForm.java나 LoginAction.java를 별도로 컴파일 하실 필요는 없습니다. 브라우저에서 다음과 같이 입력 하신면 로그인 화면이 나타나며 적절한 ID/PWD를 입력하시면 인증이 성공 했다는 success.html이 실행 될겁니다.

실행 후 화면을 보시면 주소창에 /login.do 라고 나타나 있을 것입니다. 이 같이 함으로써 사용자의 입장에서는 마지막 결과가 어느 페이지에서 나오는지를 알 수가 없습니다.(멋지죠^^) 당연히 직접 그 페이지로 접근 한다는 것은 불가능 합니다.

그러므로 success.jsp와 같은 결과 페이지를 만드는 사람과 Action등을 만드는 사람의 업무가 분리가 가능 하다는 이야기 입니다. 결국 이러한 장점이 MVC 모델의 장점이 되는거구요…

다음 강좌부터는 이 로그인 예제를 하나씩 기능을 추가해 가도록 하죠^^

건투를 빕니다, 오타 주의 하세요~~~

2013년 8월 3일 토요일

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)


강좌명 (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)
교재 자체교재 or PDF 무료 제공
강좌 일정 08월09일(금) ~ 09월04일(수)((평일야간) 19:00~22:00, 14일) 총 42시간
강의 장소 [B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차 - 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료 - 680,000원
[고용주환급]대기업:20만원 전후,중소기업:270,000원
[개인수강지원(개인환급)]정규직 504,000 ,비정규직:전액환급
대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다.

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 (스프링 개발자 과정은 오엔제이프로그래밍 교육 센터 입니다!)

본 과정은 수료 후 자바기반 환경에서 스프링 웹개발이 가능하도록 하는 속성 스프링 개발자 과정 입니다. Ajax, jQuery를 기본으로, 스프링 개발을 위한 최소 구성요소(IoC, AOP, JDBC, MVC)를 학습하고 MyBatis, Hibernate를 학습 후 활용성이 높은 게시판 예제, XPlatform&Spring을 단계별로 학습하면서 이전에 배운 요소기술들을 하나씩 주입시켜 개발해 나가는 개발자 실습 과정 입니다. 게시판 버전을 1차, 2차로 나누어서 1차에서는 Spring DI를 중심으로 Spring JDBC, MVC요소를 결합시켜 작성하며 2차에서는 로그인 기능을 추가하고 Spring 로깅 AOP기능, MyBatis와의 결합을 구현해 나감으로써 스프링 기능 및 부가기능에 대한 응용 학습을 하게 되며, 마지막으로 최근 UI 개발의 필수 구성요소인 XPlatform과 Spring의 연동에 대해서도 학습을 하게 되어 어떠한 환경에서도 개발가능한 자바 웹 개발자를 만들어 드립니다.

본 과정을 이수 후 현장에서 즉시 개발가능한 스프링 개발자가 되는데 손색이 없도록 진행 예정입니다. (단 수강생 스스로도 열심히 학습해 주셔야 합니다)

[특징]
- 실습에 근거한 이론 취득
- 이론/실습 과제로 인한 개발력 UP
교육목표 - Ajax, jQuery 활용 능력
- Spring IoC, AOP에 대한 이해
- Spring JDBC, MVC에 대한 이해
- 스프링 웹 개발에 대한 이해
- 스프링 개발력 UP
교육대상 - Spring을 경험하지 못한 자바 개발자
- Spring을 배우고 싶은 자바 개발자
선수학습 - JAVA, JSP
 

Ajax Programming - Ajax란, 장점
- Ajax 사용예제 분석
- XMLHttpRequest 객체, 메소드, 속성
- Cross-Browsing
- innerHTML, CSV
- JavaFramework & Ajax
- Ajax 동적 XML 로딩
- Form 입력값 검증
- Auto refresh
DOM - DOM 개요
- JAVA for DOM
- Dynamic DOM 다루기
jQuery Programming - jQuery 개요, 다운로드, 설치
- $(document).ready() 메소드
- Selector
$(“*"), $("#ID"), $("DIV"),$(".classname"), $("p > a"),
$(“elementname.classname")
속성 선택자, 속성(attr)
입력양식 필터 선택자
위치와 관련된 필터 선택자
- jQuery 배열(Array) 관리
- jQuery 객체 확장
기본 필터링 메소드
특정 위치 문서 객체 선택
문서 객체에서 특정 태그를 선택하는 방법
innerHTML 속성과 관련된 jQuery 메서드
문서객체 생성 , 제거
- jQuery Event
이벤트 관련 메소드(발생, 제거)
이벤트 자동 발생
마우스/키보드/윈도우/입력양식 이벤트
- jQuery 기본효과, 사용자지정효과
- jQuery, Ajax
관련 메소드
XML 문서 다루기
입력양식 전송
Spring & ORM Basic - Spring의 도입배경 및 아키텍처에 대해 이해한다.
(자바빈의 태동부터 EJB, 그리고 현재까지)
- Eclipse, Maven, STS 플러그인에 대한 이해
(개발환경 설정의 이해)
- Spring IoC(DI, DL)
- Spring AOP
- AspectJ Annotation
- Spring Web MVC, JDBC
- Spring Controller에 대한 이해
- ORM에 대한 이해
Hibernate에 대한 이해
MyBatis에 대한 이해
Spring Project 스프링 게시판 작성하기(Step by Step으로 이해가 쏙쏙)

- 1차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 게시물 내용 미리보기(Ajax연동)
기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI

[절차]
게시물 보기 화면부터 구현 후 전체 기능 추가
Controller 구현
Model 영역 구현
DAO 구현
Service 구현
Ajax Manager 구현
View 구현
web.xml, 스프링 설정 파일 작성
TEST, 시연


- 2차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 로그인 기능(인증한 경우에만 글읽기, 입력,수정,삭제 가능) + 파일 업로드 + DB쪽 Spring AOP를 이용한 로깅 + SQL문을 MyBatis를 이용하여 별도 XML로 관리

기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI, Spring AOP, MyBatis 결합

[절차]
스프링 설정 파일 수정
Controller 수정
Model 영역 수정
DAO 수정
Service 수정
View 수정
TEST, 시연
 

2013년 8월 2일 금요일

JAVA AWT Text Event 예제

import java.awt.*;
import java.awt.event.*;

class TextEventTest extends Frame implements TextListener{
        TextArea ta;
       
        public TextEventTest() {
                ta = new TextArea("Text Area...");
                ta.addTextListener(this);
                add(ta, BorderLayout.CENTER);               
                addWindowListener(new WindowEventHandler());
        }
        class WindowEventHandler extends WindowAdapter {
                public void windowClosing(WindowEvent we) {
                        System.exit(0);
                }
               
        }
       
        public void textValueChanged(TextEvent te) {
                System.out.println(te.paramString());               
        }
       
        public static void main(String[] args) {
                Frame f = new TextEventTest();
                f.setSize(300,200);
                f.setVisible(true);
        }