//Tomcat 5.X설치

Servlet/JSP Spec     Tomacat
2.5/2.1              6.0.13
2.4/2.0   5.5.23  <--EL 추가
2.3/1.2   4.1.36
2.2/1.1   3.3.2

http://jakarta.apache.org   -> Tomcat클릭

Tomcat 5.5.23버전 다운 
 -Core 에 Windows Service Installer
 -Administration Web Application  <-- 관리자창 따로 설치해야함

c:\Tomcat 5.5 에 설치
admin도 같은 경로에 덮어씌우기

http://localhost:8090/admin 입력하면 관리자창


/실습에선 5.0.28 버전 설치
Windows Service installer 다운 (관리자창 포함)

/환경변수 설정
JAVA_HOME : C:\Program Files\Java\jdk1.6.0
PATH : C:\Program Files\Java\jdk1.6.0\bin
CATALINA : C:\Tomcat 5.0
CLASSPATH = .;cd:\Tomcat 5.0\common\lib\servlet-api.jar   <--5.X버전대
                                        servlet.jar   <--4.X버전대

/실행
시작>프로그램에서 실행 Configure Tomcat  -> UI 창에서 START & STOP
또는 startup.bat shutdown.bat

/admin접속하기
id, pwd 입력

/Context생성
 webapp로 컨텍스트 생성, DataSource작성

/Context설정파일 
4.X conf\server.xml
5.X 는 conf\Catalina\localhost\만든Context명.xml


//EL(Expression Language)
JSP2.0 스펙에 포함, 데이터 출력하기위한 확장된 표현언어
변수와 연산자 포함, JSP scope에 저장된 속성 및 자바 빈 속성도 EL의 변수로 사용가능
내장객체 제공, 숫자, 문자열, boolean값, null 가능

방법 : ${표현식}

기본적으로 EL은 사용하지 못하도록 되어있으므로 반드시 page Directive에서 isELIgnured='false' 로 설정함

예제) EL이용 자바빈 속성출력
*
form action = member.jsp

*member.jsp
<%@page import='java.util.*, test.web.*' contentType='text/html;charset=euc-kr' isELIgnored='false'%>
<%
  request.setChracterEncoding('EUC-KR');
%>
<jsp:useBean id='m' class='test.web.MemberBean'/>
<jsp:setProperty name='m' property='*' />
<table>
  <tr>~~~ </tr>
  <tr>
   <td>${m.name}</td>
   <td>${m.age}</td>
   <td>${m.weight}</td>
   <td>${m.height}</td>
   <td>${m.sex}</td>
  </tr>
</table>

예제) has a 관계 자바 빈 속성 출력
*
MemberBean에
private Address addr;
public Address getAddr(){
  return addr;
}
public void setAddr(Address a){
  addr = a;
}
추가

*Address.java
public class Address implements Serializable{
  private String address;
  public Address(){}
  set()/get()
}

*member.jsp
에서
<jsp:useBean id='addr' class='test.web.Address'/>
<jsp:setProperty name='addr' property='address' value='서울'/>
~~~~~~~
<td>${m.addr.address}</td>


//EL내장객체
pageScope
requestScope
sessionScope
applicationScope

param
paramValues

header
headerValues

initParam
pageContext

예제) EL scope실습
<jsp:useBean id='m' class='test.web.MemberBean' scope='application'/>     //<--scope를 application 으로
~~~
<td>${applicationScope.m.name}</td>                                      

예제) EL param실습
*
form에서 데이터를 보내면

*member.jsp
${param.name}

예제) EL Collection실습
*member.jsp
<jsp:useBean id='vector' class='java.util.Vector'/>
<%
  vector.add(m);
%>
~~
<td>${vector[0].name}</td>

예제) EL initParam실습
web.xml에서 설정한 context파라미터를 얻는다
*web.xml
<web-app>
  <context-param>
    <param-name>driver</param-name>
    <param-value>oracle.jdbc.driver.OracleDriver</param-value>
  </context-param>
</web-app>

*member.jsp
<td>${initParam.driver}</td>

 

//커스텀태그
EL이나 JSP의 표준액션으로 구현하기 어려운 부분을 해결하기 위해 만든태그
종류 :
-JSTL(JSP Standard Tag Library)
 JSTL라이브러리를 다운받아 클래스패스에 설정
 JSP에서 taglib태그로 사용할 라이브러리 지정
-개발자가 작성한 커스텀태그
 특정 개발자가 필요에 의해 만든 커스텀태그

/JSTL
처리영역(4개의 커스텀태그와 문자열을 다루는 함수들)

-Core라이브러리
일반적인것  <c:out>  JSP의 표현식을 대체한다. 값출력시 사용
            <c:set>  Scope의 setAttribute()
  <c:remove> Scope의 removeAttribute()
  <c:catch> body에서 실행되는 코드의 예외처리 담당
조건   <c:if>   조건문을 사용할떄 쓴다.
  <c:choose> switch문과 같다. 조건에 문자열도 가능하다. 한개 이상의 <c:when>과 한개의 <c:otherwise>서브태그를 갖는다.
  <c:when> <c:choose>의 서브태그로 조건을 만족했을때 사용
  <c:otherwise> <c:choose>의 서브태그로 조건을 만족하지 못했을떄 사용된다. switch에서 default에 해당
URL관련  <c:import> 웹 어플리케이션의 내부자원과 외부자원을 사용할때 쓴다.
  <c:url>  요청파라미터로부터 URL생성
  <c:redirect> response.sendRedirect()
  <c:param>
반복  <c:forEach> 반복실행할때
  <c:forEachToken>

-포맷팅 라이브러리
국제화  <fmt:message>
  <fmt:setLocale>
  <fmt:bundle>
  <fmt:setBundle>
  <fmt:param>
  <fmt:requestEncoding> 
포맷   <fmt:timeZone>  
  <fmt:setTimeZone> 
  <fmt:formatNumber>
  <fmt:parseNumber>
  <fmt:parseDate>

-XML라이브러리
코어XML액션  <x:parse>
  <x:out>
  <x:set>
XML흐름제어 <x:if>
  <x:choose>
  <x:when>
  <x:otherwise>
  <x:forEach>
변환액션 <x:transform>
  <x:param>

-SQL라이브러리
데이터베이스접근<sql:query>  executeQuery()
  <sql:update>  executeUpdate()
  <sql:setDataSource> javax.sql.DataSource지정
  <sql:param>  java.sql.PreparedStatement.setString()
  <sql:dataParam>  java.sql.PreparedStatement.setTimestamp()
                <sql:transaction> 트랜잭션 처리


/JSTL설치
http:jakarta.apache.org -> Taglibs ->Downloads -> Binary -> 최신날짜.zip다운
압축을 푼뒤 standard\lib폴더로 들어가면 jstl.jar + standard.jar   <-- 복사 c:\webappTest\WEB-INF\lib 폴더에 붙여넣기

/JSP에서 taglib태그 설정
라이브러리  URI     prefix(접두어)
Core  http://java.sun.com/jsp/jstl/core c
XML  http://java.sun.com/jsp/jstl/xml x
Formatting http://java.sun.com/jsp/jstl/fmt fmt
SQL   http://java.sun.com/jsp/jstl/sql sql
Functions http://java.sun.com/jsp/jstl/functions fn

<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>   //<--이런식으로 설정

/standard-examples.war실습방법(예제연습)
webapps폴더에 복사
컨테이너 실행하면 자동으로 context가 생성
브라우저에서 요청
http://localhost:8090/standard-examples/                    


//JSTL Core라이브러리

/<c:out>  화면에 변수값 출력
<c:out value='변수명' default='기본값' escapeXml='boolean값'/>
escapeXml기본값은 true이다. true로 설정되면 값 중에 포함된 <>&'"값등을 escape 문자로 출력한다(&lt; &gt;등)
변수명 값이 null일 경우 공백으로 출력한다.

예제) <c:out>
*
form action='member.jsp'

*member.jsp
<td><c:out value='${m.name}' /></td>

/<c:set>
JSP의 setAttribute()메소드와 같은 역활 scope에 속성설정
<c:set var='변수명' value='변수값' target='자바빈/Map객체' property='자바빈/Map객체의 속성명' scope='scope중 하나' />
scope의 기본값은 page이다.

<c:set var='varName' value='value'/>
<c:set var='varName' value='value' scope='request'/>
<c:set var='varName' value='value' target='ObjectName' property='propertyName'/>

예제) <c:set>
*member.jsp
<jsp:useBean id='m' class='test.web.MemberBean' />
<jsp:setProperty name='m' property='m'/>
<c:set var='str' value='강대철' target='test.web.MemberBean' property='name'/>
~~~
<td><c:out value='${str}'/></td>


/<c:remove>
JSP의 removeAttribute()메소드와 같은 역활 scope의 속성값 제거
<c:remove var='변수명' scope='scope중하나'/>
scope의 기본값 page, scope가 맞지 않으면 제거되지 않는다.

예제) <c:remove>
*member.jsp
<c:set var='str' value='강대철' target='test.web.MemberBean' property='name'/>
<c:remove var='str'>    //<--  추가

/<c:if>
조건문 사용, else구현은 <c:choose>로 사용
<c:if test='조건식' var='변수명' scope='scope'중하나'/>
if문의 결과값이 var로 리턴

예제) <c:if>
*
<c:if test='${m.name == null}'>
  이름입력하세요
</c:if>
<c:if test='${m.name != null}'>
  강대철
</c:if>


/<c:choose>
자바의 switch문, 문자열도 사용가능
<c:choose>
  <c:when test='조건식'>body내용</c:when>
  <c:when test='조건식2'>body내용</c:when>
  <c:otherwise>body내용</c:otherwise>
</c:choose>
조건식 만족하면body내용 수행, 없을경우 otherwise수행

예제) <c:choose>
*
<c:choose>
  <c:when test='${m.name ==null}'>
  이름입력하세요
  </c:when>
  <c:when test='${m.name != null}'>
  강대철
  </c:when>
</c:choose>

/<c:forEach>
반목문 실행
<c:forEach items='반복할 객체명' begin='시작값' end='마지막값' step='증가값' var='변수명' varStatus='반복횟수변수명'/>
반복횟수는 varStatus의 변수 count프라퍼티로 구한다

예제) <c:forEach>
*
<c:forEach var='h' items='${headerValues}'>
 파라미터 변수 : <c:out value='${h.key}'><br>
 파라미터 값
  <c:forEach var='v' items='${h.value}'>
    <c:out value='${v}'/>
  </c:forEach>
</c:forEach>


/<c:import>
내부자원을 포함할떄 사용, HTTP, FTP같은 외부자원도 포함할수있음
<c:import url='읽어올 자원' var='읽어올 데이터를 저장할 변수명' scope='scope' varReader='자원을 Reader객체로 읽어올때 사용'  charEncoding='읽어온 데이터의 캐릭터셋지정'/>

예제) <c:import>
<c:set var='url' value='http://www.expernet.co.kr'/>
<c:import url='${url} var='u' charEncoding='EUC-KR'/>
<c:out value='${url}/> import하기

<pre><c:out value='${u} /></pre>


//JSTL의 SQL라이브러리

/<sql:setDataSource>
javax.sql.DataSource를 지정, 지정되어있다면 <sql:query>태그이용해서 사용가능

<sql:setDataSource dataSource='jdbc/Oracle9i' uri='jdbc:oracle:thin:@localhost:oracle'
     driver='oracle.jdbc.driver.OracleDriver' user='scott' password='tiger'
     var='ds' scope='application'/>

/<sql:query>
쿼리 문장 실행시 사용, executeQuery()메소드와 동일

1.속성에 SQL쿼리문장을 기술한경우
<sql:query sql='쿼리문' vqr='쿼리결과를 저장변수명' scope='scope' dataSource='JNDI명'
     maxRows='쿼리결과에 포함할 최대행수'  startRow='쿼리결과에 포함될 시작행-번호 0부터시작'/>
2.속성에 SQL쿼리문장을 기술하고 파라미터가 body에 있는경우
<sql:query sql='쿼리문' var='쿼리결과를 저장변수명' scope='scope dataSource='JNDI명'
     maxRows='쿼리결과에 포함될 최대행수' startRow='쿼리결과에 포함될 시작행-번호0부터시작'>
  <sql:param>태그들
</sql:query>
3.body에 SQL쿼리문장과 파라미터를 기술한경우
<sql:query var='쿼리결과를 저장변수명' scope='scope dataSource='JNDI명'
     maxRows='쿼리결과에 포함될 최대행수' startRow='쿼리결과에 포함될 시작행-번호0부터시작'>
  SQL쿼리문장
  <sql:param>태그들
</sql:query>


/<sql:update>
 쿼리문자를 실행할떄 사용, executeUpdate()와 동일

1.속성에 SQL쿼리문장을 기술한경우
<sql:update sql='쿼리문' dataSource='JNDI명' var='쿼리결과저장변수명' scope='scope'/>
2.속성에 SQL쿼리문장을 기술하고 파라미터가 body에 있는 경우
<sql:update sql='쿼리문' dataSource='JNDI명' var='쿼리결과저장변수명' scope='scope'>
  <sql:param>태그들
</sql:update>
3.body에 SQL쿼리 문장과 파라미터들을 기술한경우
<sql:update dataSource='JNDI명' var='쿼리결과 저장변수명' scope='scope'>
SQL쿼리문장
  </sql:param>태그들
</sql:update>


/<sql:dateParam>
날짜관련 파라미터 사용, PreparedStatement의 setTimestamp()와 동일
<sql:dataParam value='파라미터값' type='timestamp | time | date'/>

/<sql:param>
문자열 파라미터 사용, PreparedStatement의 setString()과 동일
<sql:param value='파라미터값' />

/<sql:transaction>
트랜잭션을 구현할때 사용
<sql:transaction dataSource='JNDI명' isolation='Level'>
  <sql:query>
  <sql:update>
</sql:transaction>
Level은 read_committed, read+uncommitted, repeatable_read, serializable중 하나


예제) SQL
폼에서 Driver, URL, UserName, Password를 입력받고 session.jsp로 넘기면

*session.jsp
<c:set var='DBurl' value='${param.url}' scope='session'/>
<c:set var='DBdriver' value='${param.driver}' scope='session'/>
<c:set var='DBuser' value='${param.user}' scope='session'/>
<c:set var='DBpassword' value='${param.password'}' scope='session'/>

<$@ include file='links.jsp'%>

*link.jsp 에는 SELECT, UPDATE, index로 SELECT예제, Query파라미터예제, Transaction예제 가 있음


*SELECT실습예제
<sql:setDataSource
  var='example'
  driver='${sessionScope.DBdriver}'
  url='${sessionScope.DBurl}'
  user='${sessionScope.DBuser}'
  password='${sessionScope.DBpassword}'
/>
<sql:transaction dataSource='${example}'>
  <sql:update var='newTable'>
    create table mytable{
      id varchar2(50),
      name varchar2(50)
    }
  </sql:update>
  <sql:update var='updateCount'>
    INSERT INTO mytable VALUES(1,'강대철')
  </sql:update>
  <sql:update var='updateCount'>
    INSERT INTO mytable VALUES(2,'강대철님')
  </sql:update>
  <sql:update var='updateCount'>
    INSERT INTO mytable VALUES(3,'대절님')
  </sql:update>
  <sql:query var='select'>
    SELECT * FROM mytable
  </sql:query>
</sql:transaction>
---------------------------------------------------------------
<h2>index로 결과값얻기</h2>
<table>
  <c:forEach var='row' items='${select.rowsByIndex}'>
    <tr>
      <c:forEach var='column' items='${row}'>
        <td><c:out value='${column}'/></td>
      </c:forEach>
    </tr>
  </c:forEach>
</table>
<hr>

<h2>index없이 결과값얻기</h2>
<table>
  <c:forEach var='row' items='${select.rows}'>
    <tr>
      <td>Name : <c:out value='${row.id}/></td>
      <td>Name : <c:out value='${row.name}/></td>
    </tr>
  </c:forEach>
</table>
<hr>

<h2>column 이름 포함 모두 출력</h2>
<table>
<tr>
  <c:forEach var='row' items='${select.columnNames}'>
  <th><c:out value='${columnNames}'/></th>
  </c:forEach>
  <c:forEach var='row' items='${select.rowsByindex}'>
    <tr>
      <c:forEach var='column' items='${row}'>
        <td><c:out value='${column}'/></td>
      </c:forEach>
  </c:forEach> 
</table>

 

*update예제
----------------------------------------
<table>
<c:forEach var='columnName' items='${select.columnNames)'>
  <th><c:out value='${columnName}'/></th>
</c:forEach>
<c:forEach var='row' items='${select.rows}'>
  <tr>
  <c:forEach var='column' items='${row}'>
    <td><c:out value='${column.value}'/></td>
  </c:forEach>
  </tr>
</c:forEach>
</table>

<h2>2번쨰 레코드 삭제</h2>

<sql:update var='updateCount' dataSource='${example}'>
  DELETE FROM mytable WHERE id=2
</sql:update>


*index를 이용한 select예제
---------------------------------------------------
<h2>column이름과 row index검색 </h2>
Row[0].id:<c:out value='${select.row[0].id}'/>
Row[0].name:<c:out value='${select.row[0].name}'/>
Row[1].id:<c:out value='${select.row[1].id}'/>
Row[1].name:<c:out value='${select.row[1].name}'/>
Row[2].id:<c:out value='${select.row[2].id}'/>
Row[2].name:<c:out value='${select.row[2].name}'/>

<h2>column과 row모두 index검색</h2>
Row[0][0]:<c:out value='${select.rowsByindex[0][0]'/>
Row[0][1]:<c:out value='${select.rowsByindex[0][1]'/>
Row[1][0]:<c:out value='${select.rowsByindex[1][0]'/>
Row[1][1]:<c:out value='${select.rowsByindex[1][1]'/>
Row[2][0]:<c:out value='${select.rowsByindex[2][0]'/>
Row[2][1]:<c:out value='${select.rowsByindex[2][1]'/>

<sql:update var='newTable' dataSource='${example}'>
  DROP TABLE mytable
</sql:update>

 

*parameter 실습예제
<% request.setAttribute('newName', new String('대절님')); %>
업데이트 할때
<sql:update var='updateCount'>
 INSERT INTO mytable VALUES(?,?)
  <sql:param value='3'/>
  <sql:param value=${newName}'/>
</sql:update>


*Transaction예제
테이블생성과 업데이트를 transaction으로 묶어줌

 

 

 

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 대절님
TAG ,

댓글을 달아 주세요



티스토리 툴바