- 방법 1
<jsp:useBean id="year" scope="request" type="java.lang.String"/>
<jsp:useBean id="month" scope="request" type="java.lang.String"/>
<jsp:useBean id="last" scope="request" type="java.lang.Integer"/>
<jsp:useBean id="map" scope="request" type="java.util.Map<?,?>"/>
<jsp:useBean id="list" scope="request" type="java.util.List<com.acroem.undine.bean.Sensor>"/>

- 방법 2
String year = (String)request.getAttribute("year");
String month = (String)request.getAttribute("month");
Integer last = (Integer)request.getAttribute("last");
java.util.Map<?,?> map = (java.util.Map<?,?>)request.getAttribute("map");
java.util.List<?> list = (java.util.List<?>)request.getAttribute("list");

아직 어느방법이 좋다고 할순 없지만

방법 1의 경우에는 request 받을때 null이 들어 올 경우 오류가 발생함
방법 2의 경우에는 null이 와도 if문을 이용하여 null체크가 가능

아직 머가 좋다고 말 못하겠음 ㅋ
Posted by 나비:D
:

jsp :: Commons-DbUtils

2008. 3. 6. 11:07
 
출처 Min Gun | 민군
원문 http://blog.naver.com/levin01/100011050694

Commons-DbUtils

 

I. 어디서 다운을 받나요?


http://jakarta.apache.org/site/downloads/downloads_commons-dbutils.cgi


II. 설치는 어떻게 하나요?

다운 받은 commons-beanutils.jar는 자신의 /WEB-INF/lib/ 에 복사합니다


III. DbUtils란 무엇인가요?

DbUtils는 JDBC 작업을 좀더 쉽게 할수있도록 해주는 작은 클래스 집합입니다.


IV. 왜 DbUtils를 사용해야 하는가요?

① resource 누출에 대한 어떠한 가능성도 없습니다
  JDBC코딩을 하는데 있어서 쉽지않고 양도 만만치 않으며 지루해 지기 쉽습니다
  이러다 보면 자기도 모르게 Connection 누수를 발생시킬수 있는데 이러한 가능성을 배재해 줍니다


② 코드의 가독성이 높아집니다
  데이터베이스 처리하는데 필요한 코드의 양을 절대적으로 줄여야 합니다.
  남아있는 코드로 당신의 의도를 정확하게 나타내어야 합니다.


③ ResultSet으로 부터 JavaBean property로 세팅을 해줍니다!
  더이상 setter메소드를 이용하여 ResultSet으로부터 컬럼값을 가져오는 코딩을 하지 않아도 됩니다
  ResultSet 각각의 row는 bean instance의 에 완벽하게 전달해 줍니다


V. 어떻게 사용하나요?

  Connection, Statement, ResultSet 의 close를 간단하게!

    이럴때는 org.apache.commons.dbutils.DbUtils 클래스를 이용하자!

    이 클래스는 모두 static 메소드들로 구성되어있습니다

   

    사용예)

    DbUtils.close(conn);  
    DbUtils.close(stmt);
    DbUtils.close(rs);
    DbUtils.closeQuietly(conn);
    DbUtils.closeQuietly(stmt);
    DbUtils.closeQuietly(rs);
    DbUtils.closeQuietly(conn, stmt, rs);
    DbUtils.commitAndClose(conn);

    DbUtils.commitAndCloseQuietly(conn);
    DbUtils.loadDriver("com.mysql.jdbc.Driver");
    DbUtils.rollback(conn);


    closeQuietly 메소드처럼 뒤에 Quietly라고 붙어 있는 메소드는 익셉션 처리는 자체적으로 처리합니다,

    즉 자신을 call한곳으로 throw 하지 않습니다

    commitAndCloses는 connection을 commit 후 close 하며 rollback는 connection을 rollback 합니다

    loadDriver 는 JDBC 드라이버를 로딩 합니다


 파일로 저장된 SQL을 사용하자!

    이럴 때는 org.apache.commons.dbutils.QueryLoader 클래스를 이용합니다

    이 클래스는 SingleTone 패턴의 클래스입니다

    즉 파일로 저장된 SQL을 읽어 HashMap으로 로드하는 클래스 입니다

   

    사용예)

    QueryLoader queryloader = QueryLoader.getInstance();   //싱글톤
    HashMap hashmap = queryloader.load("sql");      

    queryloader.upload("sql");


    queryloader는 싱클톤이므로 위와같이 객체를 얻어옵니다

    load 함수는 Properties 클래스를 이용하여 sql.properties 파일을 읽어

    HashMap으로 저장하여 리턴하여 줍니다

    unload는 load시 따로 메모리에 저장해 놓았던 sql 정보를 해제합니다


  Setter함수로 더이상 머리 아프지 말자!

   이럴때는 org.apache.commons.dbutils.QueryRunner 클래스를 이용합니다


   사용예)

    ...  

    BoardVO boardVO = null;

    ArrayList arraylist = new ArrayList();

 

    resultset = statement.executeQuery("SELECT * FROM board_t");

    while (resultset.next()) {

        boardVO = new BoardVO();

        boardVO.setTitle("title");

        boardVO.setContent("content");

        boardVO.setWriter("writer");

        arraylist.add(boardVO);       

    }

    ..

   와 같은 코드는 다음과 같이 간략화 됩니다


   ResultSetHandler rsh= new BeanListHandler(BoardVO.class);
   QueryRunner queryRunner = new QueryRunner();

   List list = (List)queryRunner.query(conn, "SELECT * FROM board_t", rsh);


   정말 간단해 집니다 만약 테이블에 컬럼이 30~40개가 된다면..

   select 한문장 할려면 코드수가 몇십줄 입니다. 더이상 노가다 하지 맙시다~


   QueryRunner는 다음과 같은 함수를 지원합니다

   사용예)

  QueryRunner queryrunner = new QueryRunner();
   QueryRunner queryrunner = new QueryRunner(DataSource ds);
//datasource를 바로 이용할 수 있다

  queryRunner.query(Connection conn, String sql, ResultSetHandler rsh)
   queryRunner.query(Connection conn, String sql, Object param, ResultSetHandler rsh)
   queryRunner.query(Connection conn, String sql, Object[] params, ResultSetHandler rsh)


   여기서 말하는 Object param은 파라미터 전달시 사용됩니다

   ArrayList params = new ArrayList();
   params.add("100");

   params.add("200");

   ResultSetHandler rsh = new BeanListHandler(BoardVO.class);
   QueryRunner queryRunner = new QueryRunner();

   List list = (List)queryRunner.query(conn, "SELECT * FROM board_t WHERE boardNo > ? and boardNo < ?", params.toArray(), rsh);


   select 뿐만 아니라 update, delete역시 가능합니다

   사용예)

   QueryRunner queryRunner = new QueryRunner();

   queryRunner.update(Connection conn, String sql)
   queryRunner.update(Connection conn, String sql, Object param)
   queryRunner.update(Connection conn, String sql, Object params[])

  

   ArrayList params = new ArrayList();
   params.add(boardId);
   queryRunner.update(connection, "UPDATE board_t SET read = read + 1 WHERE boardNo = ?", params.toArray());

   와 같이 사용할 수 있습니다



VI. 샘플코드

public class DbUtilsExample() {

   public static void main(String[] args) {

       HashMap map = QueryLoader.getInstance().load("sql");  // (주의) load함수는 실행할때마다 파일을 읽습니다


       Connection conn = null;

       try {

           DbUtils.loadDriver("com.mysql.jdbc.Driver");

           conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql", "root", "");


           ArrayList params = new ArrayList();
           params.add(args[0]);


           ResultSetHandler rsh = new BeanListHandler(BoardVO.class);

           QueryRunner qr = new QueryRunner();

           List list = qr.query(conn, (String)map.get("select"), params.toArray(), rsh);


           for (int i = 0; i < list.size(); i++) {

               BoardVO board = (BoardV)list.get(i);

               System.out.println(board.getTitle());

               System.out.println(board.getContent());

               System.out.println(board.getWriter());

          )

       } catch (Exception e) {

           System.out.println(e);

       } finally {

           DbUtils.closeQuitely(conn);

       }

   }

}



Posted by 나비:D
:

JavaBeans 란?

2007. 12. 15. 10:18
JSP 에서 HTML Code 와 Java Code 를 별도 file 에 독립시키기 위해서는 JavaBeans 를 이용한 방법과 Custom tag 를 이용하는 방법을 활용할 수 있다. 즉 site 를 방문한 user 에게 보여줄 content page 와 business logic page 를 별도로 나눠서 개발할 수 있는 것이다. 여기서는 먼저 JavaBeans 를 이용하는 방법에 대해 나눠보자.

1. JavaBeans 의 기본
JavaBeans 는 Java 로 Software Component 를 만들기 위한 기술이다.  먼저 Component 에 대해 잠시 정리해 보자.
자동차를 제작할 때 engine 이나 차체 등 이미 만들어져 있는 각종 부품을 조립하는데 비해, program 작성시에는 처음부터 한 줄 한 줄 코딩을 하는 경우가 많다. 당연히 부품을 조립하는 방식보다 모든 것을 처음부터 하는 방식이 비효율적일 것이다. 그래서 program 작성의 효율을 높이기 위해서 software component (부품)을 만들어서 활용하는 방법에 대한 연구가 진행되었고, 각종 component 제작 표준이 발표되었는데,  JavaBeans 도 그 중 하나이다. JavaBeans 라는 용어는 Java Component 제작 표준을 가리킬 때 쓰고, 제작 표준에 따라 작성한 각각의 component 를 bean 이라고 한다.


2. Bean 작성 규칙

  1. member variable 는 private 로 선언한다.
  2. (필요하다면) member variable 에 값을 설정하는 setXxx() method 를 만들고, public 으로 선언한다. member variable 의 이름이 xxx이면 setXxx() 형태가 되어야 한다.
  3. (필요하다면)  member variable 에 값을 읽어오는 getXxx() method 를 만들고, public 으로 선언한다. member variable 의 이름이 xxx이면 getXxx() 형태가 되어야 한다.
  4. member variable 가 boolean 형일 경우, getXxx() method 대신에 isXxx()method 를 만든다.
    기타 필요한 member variable 와 method 를 만든다.
  5. 반드시 bean component는 WEB-INF\classes에 package 별로 저장되어야 한다.
  6. Constructor method 는 parameter 가 없어야 한다. 즉 default constructor 여야 한다.

※ bean 의 member variable 중에서 setXxx() 또는 getXxx() method 가 선언되어 있어서 외부에서 참조할 수 있는 member variable 를 property 라고 한다. primitive data type 뿐만 아니라, array 도 bean 의 property 가 될 수 있고, array 의 경우 indexed property 라고 부른다.


3. bean 의 간단한 예제


4. <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>

JSP 에서 bean 을 이용하기 위해서는 <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> action tag 를 활용해야 한다. <jsp:useBean> action tag 는 JSP page 에서 bean 을 초기화하는데 사용하고, <jsp:setProperty> action tag 는 bean 의 property 에 값을 넣어주기 위해서 사용하며, <jsp:getProperty> action tag 는 bean 의 property 에서 값을 가져오기 위해 사용한다.
먼저, bean 을 초기화하는 <jsp:useBean> 의 문법을 보자.
 <jsp:useBean id="bean 이름" class="class 이름" scope="범위지정" />
이번에는 <jsp:setProperty>의 문법을 보자.
 <jsp:setProperty name="bean 이름" property="propery 이름" value="값" />
만일, HTML form 에서 입력한 parameter 를 곧바로 bean 의 property 저장할 수 있는 기능을 보자.
 <jsp:setProperty name="bean 이름" property="propery 이름" param="parameter 이름" />
가령, HTML form 의 parameter 와 bean 의 property 이름이 같다면, 아래와 같이 사용할 수 있다.
 <jsp:setProperty name="bean 이름" property="*" />
또, <jsp:getProperty>의 문법을 보자.
 <jsp:getProperty name="bean 이름" property="property 이름" />

Posted by 나비:D
:

JSP 내장객체 9가지

2007. 12. 15. 09:29

출처 - http://www.jungil.pe.kr

JSP 내장객체  9가지

 

■ request
클라이언트로부터의 요청을 처리하는 객체

메소드 설 명 비 고
getParameterName() 모든 요청 매개변수의 이름을 리턴합니다. 요청 매개변수를
액세스하기 위한
메소드
getParameter(name) name에 해당하는 매개변수의 값을 리턴합니다.
getParameterValues(name) name에 해당하는 매개변수의 모든 값을 리턴합니다.
getHeaderNames() 요청에 대한 헤더의 이름을 리턴합니다. 요청 헤더를

읽어내는 메소드
getHeader(name) name에 대한 헤더 값을 String형으로 리턴합니다.
getHeaders(name) name에 대한 모든 헤더 값을 리턴합니다.
getIntHeader(name) name에 대한 헤더 값을 int형으로 리턴합니다.
getDateHeader(name) name에 대한 헤더의 날짜값을 리턴합니다.
getCookies() 요청에 대한 모든 쿠키를 리턴합니다.
getMethod() 요청에 대한 HTTP(GET,POST) 메소드를 리턴합니다.
getRequestURL() 요청 URL을 리턴합니다. (질의 문자열은 안 한다.)
getQueryString() 요청 URL을 리턴합니다. (질의 문자열 포함)
getSession(flag) 들어온 요청의 세션데이터를 리턴합니다.
getRequestDispatcher(path) Path에 지정된 로컬URL에 대한 요청 전달자를 리턴합니다.
getRemoteHost() 요청을 보낸 호스트의 이름을 리턴합니다.
getRemoteAddr() 요청을 보낸 호스트의 IP를 리턴합니다.
getRemoteUser() 요청을 보낸 사용자의 이름을 리턴합니다.


■ response
서버가 클라이언트에게 처리결과를 응답하는 객체
메소드 설 명 비 고
setContentType() 응답되는 컨텐츠의 MIME타입을 설정합니다. 컨텐츠 설정에
필요한 메소드
setCharacterEncodeing() 응답되는 컨텐츠의 문자 인코딩 스타일을 리턴합니다.
AddCookie(cookie) 쿠키를 추가합니다. 응답헤더 세팅을

위한 메소드
AddHeader(name,value) 해당이름의 헤더에 값(String)을 추가합니다.
AddIntHeader(name,value) 해당이름의 헤더에 값(int)을 추가합니다.
AddDateHeader(name,date) 해당이름의 헤더에 날자값을 추가합니다.
ContainsHeader(name) 해당이름의 헤더가 포함 되어 있는지 체크합니다.
SetHeader(name,value) 해당이름의 헤더에 값(String)을 넣습니다.
SetIntHeader(name,value) 해당이름의 헤더에 값(int)을 넣습니다.
SetDateHeader(name,value) 해당이름의 헤더에 날짜값을 넣습니다.
setStatus(code) 응답 상태코드를 설정합니다.
sendError(status,msg) 응답코드와 에러 메세지를 설정합니다.
sendRedirect(url) 다른 URL로 이동합니다.
EncodeRedirectURL(url) SendRedirect() 메소드에 넣을 url을 인코딩합니다.
EncodeURL(name) 링크에 넣을 url을 인코딩합니다.


■ session
사용자 개개인의 정보를 처리하는 객체로 사용자가 웹 서버에 접근하면 생성되어 종료 할 때까지 따라다니져..
메소드 설 명
getId() session의 ID를 리턴합니다.
getCreationTime() session이 생성된 시간을 long형으로 리턴합니다.
getLastAccessedTime() session이 마지막으로 액세스된 시간을 리턴합니다.
getMaxInactiveInterval() session이 유지되는 최대시간을 초단위로 리턴합니다.
getMaxInactiveInterval(time) session이 유지되는 최대시간을 초단위로 설정합니다.
isNew() session 값이 없으면 true를 리턴합니다.
invalidate() session 객체를 소멸시킵니다.
session에 저장되어 있던 정보는 모두 삭제됩니다.
getAttribute(name) 세션변수(name)에 설정된 값을 리턴합니다.
setAttribute(name,value) 세션변수(name)에 값(value)을 설정합니다.


■ page
현재 JSP페이지를 나타내는 객체

■ pageContext
JSP 실행에 대한 context 정보를 담고 있는 객체
메소드 설 명 비 고
getException() exception 객체를 리턴합니다. 객체 내부 속성을

알 수 있는

메소드
getOut() out 내부객체를 리턴합니다.
getsession() session 내부객체를 리턴합니다.
getServletConfig() config 내부객체를 리턴합니다.
getServletContext() application 객체를 리턴합니다.
getPage() page 내부객체를 리턴합니다.
getRequest() request 내부객체를 리턴합니다.
getReponse() reponse 내부객체를 리턴합니다.
forward(path) 다른 path에 해당하는 URL로 전달합니다. 요청 전달 메소드
include(path) 다른 path의 페이지를 현제 페이지에 포함합니다.
setAttribute(key,value,scope) Scope의 시간동안 key의 값(value)를 저장합니다. scope속성을

제어 할 수 있는

메소드
getAttributeNamesInScope(scope) 특정 scope의 모든 속성을 리턴합니다.
getAttribute(key,scope) Key에 대한 scope를 리턴합니다.
removeAttribute(key,scope) Key에 대한 scope를 제거합니다.
findAttribute(name) Name에 지정된 속성의 scope를 찾습니다.
getAttributeScope(name) Name에 해당하는 scope를 리턴합니다.


■ out
클라이언트에게 응답하기 위한 output 스트림을 처리하는 객체입니다.
메소드 설 명
print() 내용이 줄바꿈 없이 이어서 출력됩니다.
println() 내용이 줄단위로 출력됩니다.
getBufferSize() 출력버퍼의 크기를 Byte로 리턴합니다.
getRemaining() 출력버퍼의 빈부분 크기를 Byte로 리턴합니다.
clearBuffer() 출력 버퍼를 비웁니다.
clear() 출력 버퍼를 비웁니다. (만약 전에 flush되어 있으면 에러를 발생합니다.)
flush() 출력버퍼를 flush시킵니다.
close() 출력스트림을 닫습니다.


■ application
웹서버의 애플리케이션이 실행되는 실행환경에 대한 정보를 처리하는 객체입니다..
메소드 설 명 비 고
getServerInfo() 컨테이너의 이름과 버전을 리턴합니다. 컨테이너 버전을

알 수 있는 메소드
getMajorVersion() 컨테이너의 주버전을 리턴합니다.
getMinorVersion() 컨테이너의 부버전을 리턴합니다.
getContext(path) Path에 대한 외부환경 정보를 리턴합니다. 서버측의 경로를

알 수 있는 메소드
getRealPath(path) path에 대한 절대경로를 리턴합니다.
getResource(path) path에 지정된 URL을 액세스 객체로 바꾸어줍니다.
getResourceAsStream(path) path에 URL을 읽을 수 있는 입력 스트림으로 바꾸어줍니다.
GetMimeType(filename) filename에 해당하는 파일의 MIME타입을 리턴합니다.
log(msg) msg를 로그파일에 기록합니다. 로그파일 관련 메소드
log(msg,exception) msg와 exception(예외상황)을 로그파일에 기록합니다.


■ config
JSP페이지가 컨테이너에 의해 컴파일되어 서블릿 클래스가 될 때 서블릿의 구성데이터로 초기값과 변수를 저장하는 객체입니다.
메소드 설 명
getInitParameterNames() 변수의 이름을 리턴합니다.
getInitParameter(name) 변수의 이름을 넣을 경우에는 값을 리턴합니다.


■ exception
프로그램에서 예외상황이 발생했을 때 이를 처리하는 객체
exception객체를 다루려면 page지시자의 isErrorPage 속성을 true로 해놓아야 합니다.
<%@ page isErrorPage="true" %>
메소드 설 명
GetMessage() 에러 메세지를 리턴합니다.
ToString() 에러메세지를 String형으로 리턴합니다.
PrintStackTrace(out) 에러발생시 출력스트림을 통하여 출력합니다.
Posted by 나비:D
:

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Total :
Today : Yesterday :