레이블이 자바쓰레드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바쓰레드인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 22일 화요일

[JSP강좌]JSP 페이지 지시자 지시자는 JSP가 JSP 콘테이너에게

[JSP강좌]JSP 페이지 지시자 

지시자는 JSP가 JSP 콘테이너에게 어떠한 메시지를 보내기 위한 것
 클래스선언, 구현할 메소드, Content-Type등의 값을 설정
 클라이언트에 어떠한 출력도 내보내지 않는다.
 모든 지시자들은 JSP 파일 전체에 대한 범위를 가진다.
 지시자는 태그 안에서 @로 시작한다.
 page, include, taglib 지시자 등이 있다.

[page 지시자]
language :  <%@ page language=“java” %> 사용언어 지정 기본값은 java

extends :  생성될 클래스가 확장해야하는 슈퍼클래스의 완전한 이름을 지정, 상속할 Class지정, 생략시 콘테이너가 자동으로 HttpJspPage 인터페이스를 구현한 클래스를 지정하므로 보통 사용안함, 톰캣의 경우 변환된 .java File을 확인하면 HttpJspPage 를 구현한HttpJspBAse를 상속함
<%@ page extends=“확장할 클래스명” %>

import : 일반적인 자바클래스의 import, 여러개인 경우 ,로 구분 ,기본적으로 임포트 되는것 : java.lang.*, javax.servlet.*, javax.servlet.http.*, javax.servlet.jsp.*
session : 페이지가 하나의 HTTP 세션에 참여하는지의 여부, session은 서블릿의 javax.servlet.http.HttpSession 객체와 대응되는 것으로 JSP컨테이너에서는 session이라는 별명으로 제공, 세션을 사용할려면 반드시 “true”, 기본값 true

buffer : Client 출력 스트림에 쓰일 버퍼링 방식을 지정 JSP에서의 출력버퍼의 크기를 지정, ‘none’으로 설정되면 JspWriter 객체를 이용한 출력시 버퍼를 이용하지 않고 JSP에서 출력되는 내용은 즉시 Client에 응답한다.
<%@ page buffer=“8kb” %>
autoFlush : “true”인 경우 출력버퍼가 꽉 차면 자동적으로 버퍼가 비워짐, “false”인 경우 overflow발생(예외)
<%@ page autoFlash=“true” %>
Buffer 속성을 “none” 으로 한 경우 autoFlash=“false”로 설정 할 수 없다.
isThreadSafe : “false”인 경우 JSP처리기는 요청들을 도착한 순서대로 Queue에 쌓은후 순서대로 요청들을 하나씩 처리, 이는 서블릿에서 SingleThreadModel을 구현 할 때와 같은 방식이다. 즉 true로 설정되면 _jspService 메소드가 Synchronized를 이용하여 동기화 된다. 즉 HTTP 요청을 처리하기 위한 스레드가 종료 한 후에 다른 스레드가 수행된다.

info : 페이지의 Servlet.getServletInfo() 메소드의 구현으로 얻을수 있는 정보문자열을 정의, 내용이나 길이의 제한은 없으며 제작자 이름, 버전, 저작권 정보등이 포함된다.


isErrorPage : 현재 JSP Page가 다른 JSP Page의 에러페이지인지의 여부를 결정 “true”이면 이 페이지는 에러 Page의 역할을 하며 Exception 개체를 제어 가능 하다. 이 Exception 개체는 java.lang.Throwable 클래스의 인스턴스 이다. 
errorPage : 점검(catch)되지 않은 RunTime 에러가 발생시 호출될 에러 page의 URL을 기술한다. 에러페이지와 에러를 발생시킨 페이지는 같은 서버에 존재해야 한다. 출력 스트림이 버퍼로 설정되어 출력이 Client로 안 갔다면 error page의 호출이 가능하나, 출력이 이미 Client로 전송되었다면 에러페이지의 호출은 불가능하다. 기본적으로 버퍼는 8kb이므로 8kb이하로 출력을 했다면 에러페이지의 호출은 가능. 결국 에러페이지는 클라이언트로 아무것도 넘어가지 않은 경우 Exception이 발생했을때 가능<%@ page errorPage=“../error.jsp %> 

contentType  : JSP Page의 MIME Type을 설정<%@ page contentType= “text/html; charset=euc-kr” %> 

pageEncoding : JSP Page를 위한 문자 인코딩을 지정
<%@ page pageEncoding=“euc-kr” %> 




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


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]


2013년 8월 8일 목요일

Struts 커스텀 태그 개요 (custom tag)

JSP의 커스텀 태그에 관련 부분은 JSP강좌를 참고 하시기를 바라며 여기서는 Struts의 Taglib에 대해 살펴 보도록 하겠습니다.


------------------------------------------------------------------
먼저 TagLib을 위한 설치/사용 과정에 대해 잠시 정리해 보도록 하겠습니다.
------------------------------------------------------------------

1. taglib을 사용하기 위해서는 우선 JAR파일을 /WEB-INF/lib에 복사를 한 후 tld파일들은 꼭은 아니지만 대부분 /WEB-INF/ 폴더에 위치를 시킵니다.

2. 필수 사항은 아니지만 web.xml에 uri와 location을 설정 합니다. 아래의 예를 볼까요…

<web-app>
        <taglib-uri>/tags/struts-bean</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</web-app>

이러한 식으로 매핑을 하게 되는데 이 과정을 생략하고 JSP에서 직접 tld 파일을 부르게 되는 경우에는 추후 파일의 이름이나 위치가 바뀌는 경우 모든 JSP 파일에서 일일이 수정을 해야 하는 번거로움이 있으니 web.xml에서의 매핑은 필요한 것 입니다. 또한 uri와 location을 같게 하면 추후 TLD 파일의 위치가 변경되면 문제가 발생할 수도 있습니다.

때에 따라서는 tld와 jar를 /WEB-INF/lib에 두기도 하며 tld를 위해 별도의 폴더를 만들기도 합니다.

3. 새롭게 정의한 taglib을 JSP에서 사용 하기
taglib을 가지고 올 때 web.xml의 uri를 통해 참조하게 되는데 taglib 지시자에서 다음과 같이 정의 합니다.

<%@ taglib uri=”/tags/struts-bean” prefix=”bean” %>

그런 다음 JSP페이지에서 prefix를 이용하여 다음과 같이 사용 합니다.

<bean:write name=”userInfo” property=”lastName”/>



--------------------------------
자바 빈 사용하기
--------------------------------

애플리케이션을 만들 때 스트럿츠에서 제공하는 태그 라이브러리만 이용하라는 법은 없습니다. SUN의 JSTL, Jakarta Taglibs, Improve의 Struts-Layout등의 다른 표준 태그 라이브러리도 이용 가능 합니다.

스트럿츠에는 bean, html, logic, nested와 같은 4가지의 핵심 태그 라이브러리를 제공 합니다.

bean : 자바빈의 프로퍼티에 접근하기가 용이하며 새로운 자바 빈을 정의하는데도 사용 됩니다.

html : 스트럿츠 프레임워크와 상호 작용 가능한 HTML 입력 폼을 생성하는데 사용 또는 HTML Tag와 관련된 태그

logic : 조건적인 결과물의 실행, 반복실행, 애플리케이션의 흐름을 관리하는 태그
nested : 다른 스트럿츠 태그들의 기능을 포함하는 확장된 성능을 제공 하는 태그


-------------------------------------------
Struts 태그와 함께 자바 빈 사용 하기
-------------------------------------------

대부분의 경우 태그 라이브러리에 있는 태그들을 자바 빈즈와 함께 사용 합니다. 태그들과 함께 사용되는 자바 빈즈는 HTML의 입력 폼 필드에 대응하는 ActionForm 일 수도 있지만 ActionForm이 아닌 경우 보통 MODEL Layer의 VO(Value Object) 입니다. 이러한 VO는 Page, Request, Session, Application등의 Scope안에 존재 할 수 있습니다.



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



1.        단순 프로퍼티의 접근


단순 프로퍼티의 접근은 JSP의 <jsp:getProperty>액션과 동일하게 수행 됩니다. “property=firstName”이라는 프로퍼티는 메소드 getForstName()이나 setFirstName()의 호출로 변환 됩니다.

2.        중첩된 프로퍼티의 접근

중첩된 프로퍼티들은 마침표(.)로 구분되는 이름 계층구조를 사용하여 프로퍼티에 접근 합니다. 다음과 같은 프로퍼티 레퍼런스가 있다면

“property=user.address.city” 이 레퍼런스는 다음과 같은 자바 구문으로 변환 됩니다.

getUser().getAddress().getCity()

만약 입력 폼에서 수행되는 setter에서 중첩된 레퍼런스를 사용 했다면 중첩된 레퍼런스의 맨마지막  프로퍼티에서는 setter가 호출 됩니다. 이 경우 앞의 프로퍼티 레퍼런스는 다음과 같은 자바 구문으로 변역 됩니다.

getUser().getAddress().setCity()

3.        인덱스 프로퍼티

인덱스가 있는 프로퍼티에서는 첨자를 사용하여 프로퍼티에 속한 각 요소에 접근 합니다. 예를 들어 다음과 같은 프로퍼티 레퍼런스가 있다고 할 때

“property=”address[2]”

이 레퍼런스 구문은 다음과 같은 자바 구문으로 변환 됩니다.

getAddress(2);

setter에서 같은 프로퍼티 레퍼런스를 사용했다면 setAddress(2, address); 와 같은 자바 구문으로 변환 됩니다. 

2013년 8월 1일 목요일

(Call By Reference)메소드로 객체가 전달되는 방식(Pass-by-Reference)

메소드롤 객체등이 전달되는 경우엔 참조가 전달된다...
아래의 예제를 이해하자!~

class MethodObject { 
      int i; 
      public MethodObject() { 
          i=10;
      }
      void testMethod2(MethodObject s1) { 
          //이메소드는 i값을 29로 바꾸는 메소드라고 가정
          s1.changeI(29); 
      }
      void changeI(int i) {
          this.i = i;
      }
      public static void main(String[] args) {
          MethodObject s = new MethodObject();
          System.out.println(s.i);
          s.testMethod2(s);
          System.out.println(s.i);
    }
}

2013년 7월 28일 일요일

(오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터)JAVA Nateive Thread/Green Thread 선점형/비선점형

Sun의 JDK 1.2/1.3에는 JIT(just-In-time) 기술이 도입되어 loading 시점에  바이트코드를 실제 기계에서 수행되는 코드로 바꾼 후 실행하게 함으로써 상당한 성능 향상을 가져왔다 
네이티브와 그린 쓰레드는 자바에서 사용되는 쓰레드의 실제 구현상의 차이를 나타내는 것이다. 쓰레드를 자바 가상 기계 내에서 처리하는 것이 그린 쓰레드이고, 커널의 쓰레드 지원 기능을 이용하는 것이 네이티브 쓰레드이다.


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




비선점형(Non-preemptive)멀티태스킹 :운영체제가 제어권을 가지고 있지 않고 응용 프로그램이 제어권을 가지고 있는 것으로 응용 프로그램이 제어권을 운영체제로 돌려주지 않고 중앙 처리 장치를 독점하면 컴퓨터가 다운되는 현상이 생길 수 있다.(Win3.1, MacOS)

선점형(preemptive) 멀티태스킹 : 운영체제가 제어권을 응용 프로그램에게 부여하는 것으로 응용 프로그램이 제어권을 독점하는 것을 방지하여 안정적인 작업 환경을 지원하는 체제이다.(Win95/98, WinNT, Unix)