구동하려는 Dynamic Web Project가 선택한 서버에서 지원하지 않아서 나는 오류이다. 

프로젝트 생성 시 Dynamic web module version을 3.0으로 설정했는데, 아래처럼 Tomcat v6.0에서 구동하려니 지원하지 않아서 발생하는 것이다.


Dynamic web module version 3.0은 Tomcat v7.0 부터 지원하므로 Tomcat v7.0으로 구동하면 된다.

그러나 Tomcat v6.0을 사용해야만 하는 경우는 프로젝트의 Dynamic web module version을 2.5로 낮추면 된다.


프로젝트의 Properties -> Project Facets 를 보면 해당 프로젝트의 Dynamic Web Module이 보일 것이다. 이를 2.5로 변경한다.


버전 변경 후 Apply 버튼을 눌러 변환 작업을 시작한다.


그러나 아래처럼 2.5로 바꿀 수 없다고 나오는 경우가 있다.


구글링 해보니 이는 해당 프로젝트의 .settings\org.eclipse.wst.common.project.facet.core.xml 파일을 수정해야 한다고 한다.


Properties 창을 닫고 org.eclipse.wst.common.project.facet.core.xml 파일을 수정한다. 

Tomcat 버전을 6.0으로 jst.web 버전을 2.5로 변경한다.


프로젝트를 닫고 다시 열어서 Project Facet 화면을 보면 버전이 2.5로 바뀌어 있고 Apply 버튼이 활성화 되어 있을 것이다. 

변경 작업을 진행한 후 Tomcat v6.0에 올려본다.


잘~ 될 것이다~

Posted by 후니아부지
:

[Eclipse] Properties Editor

앎/tool 2014. 3. 27. 19:25 |

다국어를 지원하기 위해서는 리소스의 텍스트를 properties 파일로 분리해야 한다.

한글과 같은 non-latin 문자는 unicode 형식으로 저장해야 하는데, Properties Editor는 이를 작업하기 위한 도구이다.


설치

Eclipse의 메뉴에서 Help -> Install New Software


add를 클릭하여 다음과 같이 추가한다.


다음과 같이 PropertiesEditor를 체크하고 설치를 진행한다.


설치 후 .properties 파일을 더블 클릭하거나 다음과 같이 파일을 열 수 있다.


PropertiesEditor로 작업 시 한글은 다음과 같이 표시된다.


작업 파일을 일반 편집기로 열면 다음과 같이 표시된다.



Posted by 후니아부지
:

JSTL SQL Tags


JSTL sql 태그는 이름 그대로 sql 관련 작업을 처리하기 위한 태그 라이브러리이다.


JSP의 시작 부분에 taglib 정의를 추가한다.

1
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>



<sql:setDataSource> Tag

DataSource를 지정한다.

<sql:setDataSource {dataSource="데이터소스" | url="jdbc Url"}

                              driver="드라이버 클래스 명"

                              user="DB 사용자 계정"

                              password="DB 사용자 패스워드"

                              var="변수에 DataSource 스펙 저장"

                              scope="{page | request | session | application"} />

 Name

 Required

 Request-time  Type Desc

 var

 false  false  java.lang.String

 변수에 DataSource 스펙 저장

 scope

 false

 false 

 java.lang.String

 변수 공유 범위

 dataSource

 false

 true

 java.lang.String

 컨텍스트에 JNDI 설정 시 Resource Name

 driver

 false

 true

 java.lang.String

 드라이버 클래스 명

 url

 false

 true

 java.lang.String

 JDBC URL

 user

 false

 true

 java.lang.String

 DB 사용자 계정

 password

 false

 true

 java.lang.String

 DB 사용자 패스워드


MySQL의 경우로 예를 들어 보자.

MySQL Community Server 설치 시 기본적으로 만들어지는 world 테이블을 이용한다.

사용자 계정은 root를 사용하고 패스워드는 12345678 이다.

		<sql:setDataSource url="jdbc:mysql://localhost:3306/world" 
		                           driver="com.mysql.jdbc.Driver" 
		                           user="root" 
		                           password="12345678" 
		                           var="ds" 
		                           scope="session" />


이렇게 생성한 DataSource인 ds는 <sql:query> 태그에서 사용할 수 있다.


DataSource를 얻는 다른 방법으로 DBCP를 사용할 수 있다.

※ 참고: [Servlet] DBCP(Database Connection Pool)를 사용한 DB 연결


프로젝트/META-INF/Context.xml에 다음과 같이 연결 정보를 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource name="jdbc/myconn" 
		       auth="Container" 
		       type="javax.sql.DataSource"
		       factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
		       driverClassName="org.gjt.mm.mysql.Driver"
		       url="jdbc:mysql://localhost:3306/world?AutoReconnect=true" 
		       username="root"
		       password="12345678" 
		       maxActive="100" 
		       maxIdle="30" 
		       maxWait="60"
		       removeAbandoned="true" 
		       removeAbandonedTiemout="60" />
</Context>


DBCP를 사용할 때는 다음과 같이 dataSource 속성에 리소스 이름을 쓰면 된다. 

<sql:setDataSource dataSource="jdbc/myconn" var="ds" scope="session" />


<sql:param>, <sql:dateParam> Tag

날짜 형식 파라미터에는 <sql:dataParam>을 문자열 형식 파라미터에는 <sql:param> 을 사용한다.

<sql:param value="값" />

 Name

 Required

 Request-time

 Type

 Desc 

 value

 false

 true

 java.lang.String

 파라미터 값


<sql:dateParam value="값" type="{timestamp | time | date}"  />

 Name 

 Required 

 Request-time

 Type

 Desc

 value

 true

 true

 java.lang.String

 DATE, TIME, TIMESTAMP 값

 type

 false

 true

 java.lang.String

 data, time, timestamp 중 하나를 쓴다.


<sql:query> Tag

sql 태그의 속성 또는 body에 정의된 쿼리 문장을 실행한다.

<sql:qeury var="varName" 

                dataSource="dataSource"

                sql="sqlQuery" 

                scope="{page | request | session | application}" 

                maxRows="maxRows" 

                startRow="startRow" />

 Name

 Required

 Request-time

 Type

 Desc

 var

 true

 false

 java.lang.String

 쿼리의 결과를 저장. 

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 sql

 false

 true

 java.lang.String

 쿼리 문장

 scope

 false

 false

 java.lang.String

 변수 공유 범위

 maxRows

 false

 true

 java.lang.String

 쿼리 결과에 포함될 최대 행의 수

 startRow

 false

 true

 java.lang.String

 쿼리 결과에 포함될 시작 행 번호. 0부터 시작.


다음은 모두 동일한 결과를 보인다.

        <sql:query sql="select * from country where Continent='Asia' and Region='Middle East'" 
                   var="rs" dataSource="${ds}" />
	<c:set var="param1" value="Asia" />
	<c:set var="param2" value="Middle East" />
	
	<sql:query sql="select * from country where Continent=? and Region=?" 
               var="rs" dataSource="${ds}">
		<sql:param value="${param1}" />
		<sql:param value="${param2}" />
	</sql:query> 

	<c:set var="param1" value="Asia" />
	<c:set var="param2" value="Middle East" />
	
	<sql:query var="rs" dataSource="${ds}">
		select * from country where Continent=? and Region=?
		<sql:param value="${param1}" />
		<sql:param value="${param2}" />
	</sql:query>


<sql:update> Tag

INSERT, UPDATE, DELETE 과 같은 데이터를 반환하지 않는 SQL 문장을 실행시키는데 사용한다.

<sql:update var="varName" 

                  dataSource="dataSource"

                  sql="sqlQuery" 

                  scope="{page | request | session | application}"  />

 Name

 Required

 Request-time

 Type

 Desc

 var

 true

 false

 java.lang.String

 쿼리에 영향을 받은 rows 카운트

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 sql

 false

 true

 java.lang.String

 쿼리 문장

 scope

 false

 false

 java.lang.String

 변수 공유 범위


<sql:param> 태그 과 함께 사용하는 방법은 <sql:query> 태그와 동일하다.


<sql:transaction> Tag

transaction을 만들 때 사용한다. 한 transaction에 여러 개의 query, update를 사용할 수 있다.

<sql:transaction dataSource="dataSource" isolation="isolationLevel">

<sql:query>

<sql:update>

....

</sql:transaction>

 Name

 Required

 Request-time

 Type

 Desc

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 isolation

 false

 true

 java.lang.String

 READ_COMMITED, READ_UNCOMMITED, REPEATABLE_READ, SERIALIZABLE 중 한 값을 가진다. 기본 값으로 dataSource에 설정된 값이 사용된다.


예제)


Posted by 후니아부지
: