레이블이 JSP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JSP인 게시물을 표시합니다. 모든 게시물 표시

2010년 2월 22일 월요일

MS949 로 한글 엔코딩

보통의 경우에는 euc-kr 또는 ksc5601 로 한글엔코딩을 해주면 문제가 없지만.

아주 특별한경우(?)에는 MS949로 한글엔코딩을 해주어야만 한다.

대개의 경우에는 로그창에 엔코딩되지 않은 문장를 찍어보면

#$%... 와 같은 특수문자형식으로 문자열이 찍혀지지만,

#12345;#67890; . . . . 과 같은 일정한 배열의 형식으로 문자열이 찍히는 경우가 있다.

이런형식의 문자열의 경우에는 euc-kr이나 ksc5601의 변환이 적용이 되질 않는다.

그것에 대한 정확한 설명은.. 지식이 부족한 탓에 할수가 없음이 안타깝지만

개인적인 생각으론 기본적인 문자열의 형식이 다르기 때문이라고 생각된다.

그럼 MS949 라는 형식을 통해 한글엔코딩 하는 방식을 알아보자.

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

page1 ---> page2 로 한글파라미터를 넘기는 경우.

대부분 JSP페이지 상단에 <%@ page contentType="text/html;charset=euc-kr" %>이라는 코드가

삽입이 된다.

이것을 page1에서는 <%@ page contentType="text/html;charset=MS949" %>를 삽입하고,

page2 에서는 <%@ page pageEncoding="MS949" %> 를 삽입하여 기존의 코드를 대체한다.

그런후 page2에서 받은 파라미터를 아래와 같이 euc-kr이나 ksc5601로 한글엔코딩을 하면

String str = new String(param.getBytes("8859_1") ,"ksc5601");

정상적인 한글로 문자가 변환된다.

 

2009년 9월 14일 월요일

out 객체

out 객체는 JSP 페이지의 결과를 웹 브라우저에 전송해 주는 출력 스트림을 나타내며 JSP페이지가 웹 브라우저에게 보내는 모든 정보는 out객체로 통해서 전달이 된다.

 

out객체는 java.io.Writer 클래스를 상송 받은 javax.servlet.jsp.JspWriter클래스 타입의 객체이며 out객체로 사용한다.

 

주로 많이 사용되는 메소드는 웹 브라우저에 출력을 하기 위한 println() 메소드이다.

 

out 내부 객체의 메소드

 

boolean isAutoFlush() 출력버퍼가 다 채워진 경우에 자동으로 flush했을 경우는 true를 리턴, 그렇지 않은 경우는 false 를 리턴한다.

 

int getBufferSize() 출력 버퍼의 전체의 크기를 바이트 단위로 리턴한다.

 

int getRemaining() 출력 버퍼의 남은 양을 바이트 단위로 리턴한다.

 

void clearBuffer()  현재 출력 버퍼에 저장된 내용을 취소한다.(비운다.)

 

String println(string) 현재 출력 버퍼에 저장된 내용르 웹 브라우저로 전송하고 버퍼를 비운다.

 

void close() 출력 버퍼의 내용을 flush하고 스트림을 닫는다.

 

 리턴타입

메소드명

설명

 없음  clear()

 출력버퍼에 저장된 내용을 버림.

 비었을 경우 예외발생

 없음  clearBuffer()

 clear()메소드와 같은 역할이지만,

 버퍼가 빈경우에도 예외발생않고 현재 버퍼를 비움

 없음  flush()

 현재 버퍼에 저장된 내용을 클라이언트로

 전송하고 버퍼를 비움.

 없음  close()

 출력 버퍼를 클라이언트로 전송하고

 출력스트림 종료

 boolean  isAutoFlush()  page지시어의 autoFlush속성으로 지정된 값을 리턴
 int  getBufferSize()  출력 버퍼의 크기를 바이트 단위
 int  getRemaining()  출력 버퍼의 남은 양
 없음  print(String str )  출력 스트림으로 str 문자열 출력 

 

 

Cannot load JDBC driver class

tomcat/common/lib/ 아래에

ojdbc14라이브러리 추가

 

아울러 jdk1.5/lib 안에도 꼭 있어야 함..

jdk1.5/jre/lib/ext 안에는 있으나 마나이다..

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

위 작업 끝난 다음에...도 jdbc 드라이버가 인식이 안됫었는데 알보고니 철자가 틀려서 그런거였다;;

ㅠㅠ;;;

'oracle.jdbc.dirver.OracleDriver' 로 써 있었던 것이였다 =>'oracle.jdbc.driver.OracleDriver' 로 바꿔야 햇는데;;

 

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
 at org.apache.jsp.index_jsp._jspService(index_jsp.java:62)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
 ... 22 more

2009년 7월 27일 월요일

Log4j logging

Logging Messages from Servlets and JSPs

웹 어플리케이션에서 로그를 기록하는 법은 크게 2가지가 있습니다.
하나는 ServletContext.log() 를 이용하는 것이고 다른 하나는 Log4j 를 이용하는 것입니다. 먼저 ServletContext.log()를 사용해서 로그를 남기는 방법을 보겠습니다.

import javax.servlet.*;
import javax.servlet.http.*;
public class MyLog extends HttpServlet {
    public void goGet( HttpServletRequest request, HttpServeltResponse response ) throws SevletException, java.io.IOException {
    ServletContext context = getServletContext();

    context.log("에러가 발생했습니다.");
    context.log("에러가 발생했습니다.",new IllegalStateException("잘못된 파라메터입니다."));
    }
}

log 메서드는 2개가 있는데 하나는 String 변수만 받고 다른 하나는 String와 Throwable을 받습니다.

Log4j 를 사용하는 방법은 좀더 자세히 보겠습니다. 요것은 아주 유용하기 때문에 자세히 봐야 합니다.^^
먼저 Log4j를 셋업하는 방법부터 보겠습니다. 일단 셋업을 하기전에 다운받아 설치를 해야합니다.

http://jakarta.apache.org/log4j/docs/download.html

여기서 다운받아 톰켓의 WEB-INF/lib 에 가져다 놓습니다. 압축을 풀면 jakarta-log4j-1.2.8 파일이 나옵니다. 파일이름은 버젼마다 틀려집니다. 참고하세요. 압축을 풀고 WEB-INF/lib 에다가 가져다 놓았으면 properties 파일을 만들어야 합니다. 이는 단순히 text파일로 키,값으로 이루어져 로그파일에 대한 각종 정보들을 담아둡니다. 이 프로퍼티 파일로 log4j를 서블릿에서 사용하기 위해선 2개의 패키지를 import 해야 합니다.

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyCofigurator;

하지만 이 프로퍼티 파일을 이용하지 않고 싶을때는 log4j에서 지원하는 default configurator를 이용할 수 있습니다. 이때는 PropertyCofigurator 대신 BasicConfigurator를 임포트 합니다. 사용법은 약간 다르니 주의하세요.

import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;


import javax.servlet.*;
import javax.servlet.http.*;

public class LoggerDefaultConfig extends HttpServelt {
    private Logger log = null;
    public void init(){
        log = Logger.getRootLogger();
        BasicConfigurator.configurator();
    }
    public void goGet( HttpSevletRequest req, HttpServletResponse res ) throws ServletException, java.io.IOException {
        log.debug("디버깅 메시지입니다.");
        log.info("정보 메시지입니다.");
    }
}

다음은 configuration file 을 이용한 로그 사용법을 보겠습니다.
먼저 log4j.properties 파일을 만들고 web-inf/classes 폴더에다가 넣습니다. 그리고 사용하고자 하는 서블릿에다가 org.apache.log4j.Logger 를 import를 합니다. 그런다음 정적 메소드인 Logger.getRootLogger() 를 사용하여 레퍼런스를 얻어와서 로그를 남김니다.
이 로그파일에는 org.apache.log4j.ConsoleAppender 타입의 이름을 붙입니다. 여기서는 hans로 정하겠습니다.

log4j.rootLogger=DEBUG, hans
log4j.appender.hans=org.apache.log4j.ConsoleAppender
log4j.appender.hans.layout=org.apache.log4j.SimpleLayout

BasicConfigurator.configure( ) 이게 호출되지 않으면 자동으로 web-inf/classes 에서 log4j.properties 파일을 찾아 설정하게 됩니다.

log4j.rootLogger=DEBUG, cons
log4j.logger.com.jspservletcookbook=, myAppender
#the root logger's appender
log4j.appender.cons=org.apache.log4j.ConsoleAppender
#the com.jspservletcookbook logger's appender log4j.appender.myAppender=org.apache.log4j.RollingFileAppender
log4j.appender.myAppender.File=h:/home/example.log
log4j.appender.myAppender.MaxBackupIndex=1
log4j.appender.myAppender.MaxFileSize=1MB
#the root logger's layout
log4j.appender.cons.layout=org.apache.log4j.SimpleLayout
#the com.jspservletcookbook logger's layout
log4j.appender.myAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myAppender.layout.ConversionPattern=%-5p
Logger:%c{1} Date: %d{ISO8601} - %m%n

위 코드는 myAppender라는 이름으로 rootLogger를 상속하여 다양한 로그를 남기는 법을 보여줍니다.

the log4j Javadoc page: http://jakarta.apache.org/log4j/docs/api/index.html
the log4j project documentation page: http://jakarta.apache.org/log4j/docs/documentation.html 

2009년 7월 7일 화요일

각종 DBMS JDBC 드라이버 셋팅법 정리

각종 DBMS JDBC 드라이버 셋팅법 정리

/********** 각 경우별 드라이버 연동하기 **************/

** DB2 **
연결 URL : "jdbc:db2:Catalog된 DB명"
드라이버 클래스 : COM.ibm.db2.jdbc.app.DB2Driver

** JDK jdbc-odbc driver (Type1) **
연결 URL : "jdbc:odbc:"
드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver

** Oracle thin driver (Type4) **
연결 URL : "jdbc:oracle:thin:@:port:"
드라이버 클래스 : oracle.jdbc.driver.OracleDriver

** Oracle oci driver (Type2) **
연결 URL : "jdbc:oracle:oci:@"
드라이버 클래스 : oracle.jdbc.driver.OracleDriver

** Sybase jConnect driver (Type2) **
연결 URL : "jdbc:sybase:Tds::"
드라이버 클래스 : com.sybase.jdbc2.jdbc.SybDriver

** Informix JC1 driver (Type4) **
연결 URL : "jdbc:informix-sql://:/:INFORMIXSERVER"
드라이버 클래스 : com.informix.jdbc.IfxDriver

** mSQL Imaginary JDBC driver (Type4) **
연결 URL : "jdbc:msql://:/"
드라이버 클래스 : com.imaginary.sql.msql.MsqlDriver

** Postgres driver (Type4) **
연결 URL : "jdbc:postgresql://:/"
드라이버 클래스 : postgresql.driver

** MM MySQL driver (Type4) **
연결 URL : "jdbc:mysql://:/"
드라이버 클래스 : org.git.mm.mysql.Driver

** Access **

연결 URL : jdbc:odbc:설정한 odbc명

드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver


mysql은 JConnector 3.0 부터는 com.mysql.jdbc.Driver

연결 URL 은 jdbc:mysql://localhost/dbname?Unicode=true&characterEncoding=EUC_KR

같이 인코딩 타입을 직접 줌으로써 한글 변환문제에 좀더 쉽게 해결할 수 있음.



** Connected To IBM AS/400  **

Class.forName("com.ibm.as400.access.AS400JDBCDriver");
com = Driver.Manager.getConnection("jdbc:as400://10.20.30.40/testlib;user=user;password=pass");

** Connected To Unisql **

Class.forName("unisql.jdbc.driver.UniSQLDriver");
con = Driver.Manager.getConnection("jdbc:unisql:10.20.30.40:43300:demodb:::", "user","pass");


** Connected To Jdbc-Odbc Type - 1 Driver **

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// con = DriverManager.getConnection("Jdbc:Odbc:dsnname","userid","password");
con = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};Server=servername;Database=pubs","userid","password");

** Connected To Ms-Access JDBC ODBC Driver **

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("Jdbc:Odbc:dsnname","","");
// con = DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=G:/admin.mdb","","");

** Connected To Ms-Access Type-3 Driver **

Class.forName ("acs.jdbc.Driver");
String url = "jdbc:atinav:servername:5000:C:\\admin.mdb";
String username="Admin";
String password="";
Connection con = DriverManager.getConnection(url,username,password);

** Connected To Microsoft SQL **

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://servername:1433","userid","password");

** Connected To Merant. **

Class.forName("com.merant.datadirect.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:merant:sqlserver://servername:1433;User=userid;Password=password");

** Connected To Atinav SqlServer. **

Class.forName ("net.avenir.jdbc2.Driver");
con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");

**Connected To J-Turbo. **

String server="servername";
String database="pubs";
String user="userid";
String password="password";

Class.forName("com.ashna.jturbo.driver.Driver");
con= DriverManager.getConnection("jdbc:JTurbo://"+server+"/"+database,user,password);

** Connected To jk Jdbc Driver. **

String url= "jdbc:jk:server@pubs:1433";
Properties prop = new Properties();
prop.put("user","userid");//Set the user name
prop.put("password","password");//Set the password

Class.forName ("com.jk.jdbc.Driver").newInstance();
con = DriverManager.getConnection (url, prop);*/

** Connected To jNetDirect Type - 4 Driver **

String sConnect = "jdbc:JSQLConnect://127.0.0.1/database=pubs&user=userid&password=password";
Class.forName ("com.jnetdirect.jsql.JSQLDriver").newInstance();
Connection con= DriverManager.getConnection(sConnect);

** Connected To AvenirDriver Type - 4 Driver **

// String url= "jdbc: AvenirDriver: //servername:1433/pubs";
// java.util.Properties prop = new java.util.Properties ();
// prop.put("user","userid");
// prop.put("password","password");

Class.forName ("net.avenir.jdbc2.Driver");
System.out.println(" Connected To AvenirDriver Type - 4 Driver");
con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");

** Connected To iNet Sprinta2000 Type - 4 Driver **

String url="jdbc:inetdae7:servername:1433";
String login="userid";
String password="password";
Class.forName("com.inet.tds.TdsDriver");
System.out.println(" Connected To iNet Sprinta2000 Type - 4 Driver");
con=DriverManager.getConnection(url,login,password);

** Connected To iNet Opta2000 Type - 4 Driver **

String url="jdbc:inetdae7:servername:1433";
String login="sagar";
String password="sagar";
Class.forName("com.inet.tds.TdsDriver").newInstance();
System.out.println(" Connected To iNet Opta2000 Type - 4 Driver");
con=DriverManager.getConnection(url,login,password);