Clean Code that Works.

[Xercer 파서 다운로드] (자바용)

위에 사이트로 들어 간후 Xerces-J-bin.2.9.0.zip 파일을 다운로드 해서 압축을 푼다.
압축을 풀면 5개의 여러가지 폴더와 파일과 5개의 .jar 파일을 볼 수 있다.
이중에서 xercesImpl.jar, xml-apis.jar 파일을
자바가 설치된 폴더의 /jre/lib/ext 폴더에 압축을 푼다.
ex: C:\Program Files\Java\jdk1.6.0\jre\lib\ext
그 후  

XMLReader reader
       = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

이러한 형식으로 사용 하면 된다.

2.3 이하의 버젼에서는 web.xml에

<taglib>
   <taglib-uri>http://itexper.com/guest-tablib</taglib-uri>
   <taglib-location>/WEB-INF/tld/guest-taglib.tld</taglib-location>
</taglib>
이렇게 사용했으면 됬지만

2.4 버젼에서는
<jsp-config>
  <taglib>
   <taglib-uri>http://itexper.com/guest-tablib</taglib-uri>
   <taglib-location>/WEB-INF/tld/guest-taglib.tld</taglib-location>
  </taglib>
</jsp-config>
이렇게 사용해야 한다.

JSTL을 등록해서 사용할 경우에는 따로 web.xml에 등록할 필요가 없고.
아파치 사이트 http://jakarta.apache.org/taglibs/ 에서 다운로드 링크를 클릭하여 다운 받을 수 있다.

그 다음에 웹애플리케이션의 /WEB-INF/lib 디렉토리에 필요한 라이브러리를 복사 하면된다.
파일 압축을 풀어 lib 디렉토리 아래에 있는 파일을 복사하면 된다.
사용할때는 아래와 같은 형식으로 사용 하면된다.
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>

커넥션 풀 설정하는 방법중에 한가지 라고 하는데 이 전 커넥션풀(jdc pool)설정은 그럭저럭 쉽게 할 수 있었는데 DBCP설정하는것은 영 어려워서 --; 이클립스로 작업하는데 이클립스 화면에서 따라할 수 있게 나온게 아니라서(그림으로 안되어 있으면 이해도가 떨어지는 1人) 좀 찾기가 어려웠다. --;

일단 DBCP를 설정할려면 4개의 jar 파일이 있어야 한다.
1. 오라클 jdbc 파일(ojcbc14.jar) : Tomcat5.5/common/lib 폴더에 위치시켜야 한다.
2. commons-collections-3.2.jar
3. commons-dbcp-1.2.2.jar
4. commons-pool-1.3.jar
1번 파일은 오라클 사이트에 들어가면 다운로드 받을 수 있고, 2~3번 파일은 아파치 사이트(Collections, DBCP, POOL)에 가면 받을 수 있다. 1번파일은 네이버에 검색해서 받는게 빠르다.(오라클 사이트 가입필요)
[2~3번 파일 받는곧]
사용자 삽입 이미지

2~3번 파일을 위의 이미지의 WebContent/WEB-INF/LIB 폴더에 위치 시키면
Java Resources:src/Libraries/Web App Libraires/ 에 3개의 파일의 있는것을 확인 할 수 있다.

이 파일들이 들어가 있는걸 확인했으면 다음 단계로 Tomcat 의 server.xml 파일과 위에 이미지의 web.xml(프로젝트의 web.xml)파일을 수정 해야 한다.
사용자 삽입 이미지

확대해서 보실려면 클릭하세요.


위와 같이 server.xml을 수정한 후 web.xml 파일에 아래와 같은 코드를 추가 해야 한다. <web-app>안에다가 추가 하면 된다.
<resource-ref>
  <description>Oracle Datasource example</description>
  <res-ref-name>jdbc/myoracle</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
그런 다음 커넥션을 만든다음에 테스트 하면 된다.

[DBCP연결 영문 사이트] [참고 블로그]
 

DBCP Pool 테스트중 아래와 같은 에러가 발생~!!!!
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '
' for connect URL 'null'

이것은 Tomcat의 server.xml 파일이 잘못되었기 때문이다~!
server.xml 파일을 열어보면.
<Context docBase="JSP_STUDY" path="/JSP_STUDY" reloadable="true" source="org.eclipse.jst.j2ee.server:JSP_STUDY"/></HOST>

<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@IPAddress:1521:orcl"
username="SCOTT" password="TIGER" maxActive="20" maxIdle="10"
maxWait="-1"/>


아마도 저렇게 되어있을 것이다.
이것을 수정 하려면 Context 안에 Resource를 포함 해야 한다.
<Context docBase="JSP_STUDY" path="/JSP_STUDY" reloadable="true" source="org.eclipse.jst.j2ee.server:JSP_STUDY">

<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@IPAddress:1521:orcl"
username="SCOTT" password="TIGER" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>
</Host>


이렇게 수정하면 완료~

오라클 10g 기준 첨부파일(ojdbc14.jar)파일을 톰캣 설치 폴더/common/lib 폴더에 복사하면 된다.
/common 디렉토리는 톰캣 서버와 모든 웹 애플리케이션이 공유하는 클래스 디렉토리이다.


JDBC에 연결하려면 적어도 JDBC URL과 user 계정과 비밀번호를 알아야 한다. 이것이 제대로 맞지 않으면 아래와 같은 Exception이 발생한다.


host 주소가 맞지 않은 경우 또는 listener가 떠있지 않은 상태
java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish then connection


db명(SID, 호스트 스트링)이 틀릴 경우
java.sql.SQLException: IO 예외 상황: Connection
refused(DESCRIPTION=(TMP=)(VSNNUM=135290990)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))


아이디와 패스워드가 틀릴 경우
java.sql.SQLException: 널 사용자나암호가 THIN 드라이버에서 지원되지 않습니다.

출처 : 모델 2로 다시 배우는 JSP

연결하기 전에 포트 SQL 서버 포트번호 확인하고 포토 열렸는지 확인한다.
ms-sql JDBC드라이버 설치한후 연결.테스트

<%@ page contentType = "text/html;charset=euc-kr" %>
<%@ page import = "java.sql.*" %>
<%
String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String dbUrl = "jdbc:microsoft:sqlserver://IPAddress:1433;DatabaseName=jsp";
String dbId = "sa";
String dbPw = "password";

Connection conn = null;
Statement stmt = null;

try
{
Class.forName( dbDriver );

conn = DriverManager.getConnection( dbUrl, dbId, dbPw );

stmt = conn.createStatement();

conn.close();

out.println("mssql jdbc test: connect ok!!");
}
catch( Exception e )
{
out.println(e);
}
%>

Set ConnDB = server.CreateObject("ADODB.Connection")
ConnDB.open "Driver={SQL Server};Server=IPADDRESS;Database=데이터베이스;UID=sa;PWD=1234;"

아무리 봐도 이게 가장 괜찮은거 같다.

Session.Abandon() 요고 한줄이면 세션 클리어!!
이게 생각이 안나서 --; 검색을 해봐야 하는데 검색 않고 session("변수") = "" 이렇게 했다는 --;;;



ASP Substring 찾다가 찾아낸 함수.
참조할 변수와 시작 점 그리고 길이를 입력 하면 된다.
참고 사이트는 http://www.w3schools.com/vbscriptASP가 비베를 사용하니깐 비베 사이트에 ~_~



The Mid function returns a specified number of characters from a string.

Tip: Use the Len function to determine the number of characters in a string.

Syntax

Mid(string,start[,length])

Parameter Description
string Required. The string expression from which characters are returned
start Required. Specifies the starting position. If set to greater than the number of characters in string, it returns an empty string ("")
length Optional. The number of characters to return

Example 1

dim txt
txt="This is a beautiful day!"
document.write(Mid(txt,1,1))
Output:
T

Example 2

dim txt
txt="This is a beautiful day!"
document.write(Mid(txt,1,11))
Output:
This is a b

Example 3

dim txt
txt="This is a beautiful day!"
document.write(Mid(txt,1))
Output:
This is a beautiful day!

Example 4

dim txt
txt="This is a beautiful day!"
document.write(Mid(txt,10))
Output:
beautiful day!


OKJSP 여비님 글 펌입니다.

아래서부터 시작.

------------------------------------------------------------------------------------------------------


오랫동안 검색되고 또 문의 받아온 부분인데 정리해서 올린다 올린다 하다가 이제서야 올리네요 ^^;

 내용은 현재 Tomcat 5.5 까지에서도 해결이 되지 않았던 한글첨부 파일 다운로드 문제에 대한 해결책중 하나 입니다.

 java/jsp 입문이나 실무에서 사용하시라고 올립니다.

테스트환경은 windows2003/SU linux kernel 2.6.x 에서 모두 정상 동작했으며 JDK 1.5.11 에서 돌렸습니다.

도움이 되시길 바랍니다 ^^;

소스 내려갑니다~

 import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import com.mpage.util.db.*;

/**
 * Servlet implementation class for Servlet: FileDownHelper
 *
 */
 public class FileDownHelper extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /**
  *
  */
 private static final long serialVersionUID = 1L;

 /* (non-Java-doc)
  * @see javax.servlet.http.HttpServlet#HttpServlet()
  */
 public FileDownHelper() {
  super();
 }    
 
 /* (non-Java-doc)
  * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  Connection con = null;
  Statement st = null;
  ResultSet rs = null;
 
  String idx = request.getParameter("idx");
 
  ServletContext sc = getServletContext();
 
  OutputStream out = null;
 
  try{
   File file = null;
   FileInputStream fis = null;
   byte[] buffer = null;
   String fileName = "";
   String ext = "";
   
   con = DBConnector.getConnection("mysql");
   st = con.createStatement();
   rs = st.executeQuery("select file_name, org_file from board where id=" + idx); // DB 에서 파일명을 가지고 온다.
   
   if(rs != null && rs.next()){
    String seper = "";
    if(System.getProperty("os.name").startsWith("Windows")){ // OS를 구분하여 구분자를 가지고 온다. -- 귀찮아서 프로퍼티에서 가져오기로 수정안함
     seper = "\\";
    }else{
     seper = "/";
    }
    String filePath = sc.getRealPath("/fileUpload") +seper+ rs.getString(1); // 현재 context의 실제 경로 하위의 경로를 설정
    fileName = rs.getString(2);
    ext = rs.getString(2).substring(rs.getString(2).lastIndexOf("."));
   
    file = new File(filePath);
    int size = 0;       // File available size 를 구해서 Buffer 의 크기 설정
   
    fis = new FileInputStream(file);
    size = fis.available();  // 파일의 사이즈를 가져온다
    buffer  = new byte[size];
    fis.read(buffer);
   
    fis.close();
   }
   /*
    * MIME type 설정하는 구문 (필요하면 더 추가하면 됨
    */
   if("zip".equals(ext)){
    ext = "application/zip";
   }else if("ppt".equals(ext)){
    ext = "application/vnd.ms-powerpoint";
   }else if("xls".equals(ext)){
    ext = "application/vnd.ms-excel";
   }else if("doc".equals(ext)){
    ext = "application/msword";
   }else if("txt".equals(ext)){
    ext = "text/plain";
   }else if("html".equals(ext)){
    ext = "text/html";
   }else if("htm".equals(ext)){
    ext = "text/html";
   }else if("jpg".equals(ext)){
    ext = "image/jpeg";
   }else if("jpeg".equals(ext)){
    ext = "image/jpeg";
   }else if("gif".equals(ext)){
    ext = "image/gif";
   }else if("psd".equals(ext)){
    ext = "image/x-photoshop";
   }else{
    ext = "application/zip";
   }
   response.setContentType(ext);
   out = response.getOutputStream();
   
   fileName = fileName.replaceAll(" ", "");
   
   // Browser 설정에 영향이 미치는 부분 처리
   if (request.getHeader("User-Agent").indexOf("MSIE 5.5") > -1) {
    response.setHeader("Content-Disposition", "filename=" +java.net.URLEncoder.encode(fileName, "euc-kr") + ";");
   }else if (request.getHeader("User-Agent").indexOf("MSIE 6.0") > -1) {
    response.setHeader("Content-Disposition", "filename=" +java.net.URLEncoder.encode(fileName, "UTF-8") + ";");
   }else{
    response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "euc-kr") + ";");
   }
   
   if(buffer != null && buffer.length > 0){
    out.write(buffer);
   }
   out.close();
  }catch(Exception e){
   //e.printStackTrace();
  }finally{
   if(out != null){try{out.flush();out.close();}catch(Exception e1){}}
  }
 }   
 
 /* (non-Java-doc)
  * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }          
}