-
게시판 만들기 - 11. connectionPool 구현하기JAVA/웹 프로그래밍 - JSP 2020. 12. 4. 18:37
아래의 내용에 이어서 할 것인데, 부록의 느낌으로 보자.
designatedroom87.tistory.com/332
코드와 데이터를 분리한다는 의미는 데이터는 데이터 대로 코드는 코드 따로 분리 해서
명령으로 이들을 불러온다. 나중에 connectPool을 구현할 때, xml문서를 활용한다.여기서의 xml은 WebContent/WEB-INF폴더에 있는 web.xml 파일이다.
구현하기 전에 아래의 예제들을 충분히 보도록 하자.
WebContent폴더에 xmlParse.jsp파일을 만든다.
그리고 실행하고 웹 페이지 창을 우클릭해서 "페이지 소스보기"를 선택한다.
그러면 소스 코드를 볼 수 있다.
xmlParse.jsp
더보기<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p id="doc"></p> <script> text="<bookstore>" + "<book>" +"<booktitle>생쥐가 물에 빠진날</booktitle>" +"<author>홍길동</author>" +"<price>20000</price>" +"</book>" +"</bookstore>" document.getElementById("doc").innerHTML = text; </script> </body> </html>
위의 xmlParse.jsp 문서를 분리해보자. 그리고 실행해보자.
xmlParse.jsp
더보기<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p id="doc"></p> <script> text="<bookstore>" + "<book>" +"<booktitle>생쥐가 물에 빠진날</booktitle>" +"<author>홍길동</author>" +"<price>20000</price>" +"</book>" +"<book>" +"<booktitle>생쥐가 물에 빠진날1</booktitle>" +"<author>홍길동1</author>" +"<price>30000</price>" +"</book>" +"</bookstore>" document.getElementById("doc").innerHTML = text; </script> </body> </html>
그리고 아래의 내용도 실행해보자.
xmlParse.jsp
더보기<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p id="doc"></p> <script> text="<bookstore>" + "<book>" +"<booktitle>생쥐가 물에 빠진날</booktitle>" +"<author>홍길동</author>" +"<price>20000</price>" +"</book>" +"<book>" +"<booktitle>생쥐가 물에 빠진날1</booktitle>" +"<author>홍길동1</author>" +"<price>30000</price>" +"</book>" +"</bookstore>" /* document.getElementById("doc").innerHTML = text; */ var parser = new DOMParser(); var xmlDoc = parser.parseFromString(text,"text/html"); document.getElementById("doc").innerHTML = xmlDoc.getElementsByTagName("author")[1].childNodes[0].nodeValue; </script> </body> </html>
src폴더에 xmlparser패키지에 XmlParserTest.java 파일을 만든다.
현재 프로젝트의 바로 하위에 xml 파일을 하나 만들고 data 라 이름 붙인다.
XmlParserTest.java 자바 파일에서 xml내용을 읽을 거다.
XmlParserTest 자바 파일을 실행한다. 실행 시, "java Application"으로 실행을 한다.
data.xml
더보기<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book kind="인문"> <booktitle>생쥐가 물에 빠진날</booktitle> <author>홍길동</author> <price>20000</price> </book> <book> <booktitle>생쥐가 물에 빠진날1</booktitle> <author>홍길동1</author> <price>30000</price> </book> </bookstore>
XmlParserTest.java
더보기package xmlparser; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class XmlParserTest { public static void main(String[] args) { try { // 1. 빌더 팩토리 생성 DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance(); // 2. 빌더 팩토리로 부터 빌더 생성 DocumentBuilder builder = bf.newDocumentBuilder(); // 3. 빌더로부터 도큐먼트 생성 // 파일의 위치는 프로젝트가 기준이 되므로 프로젝트에 파일 생성 Document doc = builder.parse(new File("data.xml")); // normalize함수를 통해 문서 안정화 작업 doc.getDocumentElement().normalize(); // xml문서의 내용을 가지고 오는 작업 // book, bookstore, booktitle로 각 각 변경해서 결과를 확인하자. NodeList taglist = doc.getElementsByTagName("bookstore"); // 태그 이름을 찾는다. /* System.out.println("nodeName : " +taglist.item(0).getNodeName()); // tag의 이름 System.out.println("nodeValue : " +taglist.item(0).getNodeValue()); System.out.println("nodeContent : " +taglist.item(0).getTextContent()); // tag의 하위 내용 모두 출력 System.out.println("node Attribute : " +taglist.item(0). getAttributes().item(0).getNodeName()); System.out.println("node Attribute : " +taglist.item(0). getAttributes().item(0).getNodeValue()); System.out.println("tag length : " +taglist.getLength()); // tag 리스트의 길이 System.out.println("child Name : " +taglist.item(0).getChildNodes().item(0).getTextContent()); */ taglist = doc.getElementsByTagName("book"); System.out.println("child Node Count : " +taglist.item(0).getChildNodes().getLength()); System.out.println("0' child Name : " +taglist.item(0).getChildNodes().item(0).getNodeName()); System.out.println("1' child Name : " +taglist.item(0).getChildNodes().item(1).getNodeName()); System.out.println("1' child Value : " +taglist.item(0).getChildNodes().item(1).getTextContent()); System.out.println("2' child Name : " +taglist.item(0).getChildNodes().item(2).getNodeName()); System.out.println("3' child Name : " +taglist.item(0).getChildNodes().item(3).getNodeName()); System.out.println("4' child Name : " +taglist.item(0).getChildNodes().item(4).getNodeName()); System.out.println("5' child Name : " +taglist.item(0).getChildNodes().item(5).getNodeName()); System.out.println("6' child Name : " +taglist.item(0).getChildNodes().item(6).getNodeName()); } catch(Exception e) {} } }
본격적으로 connectionPoll을 만들어보자.
DB에 연결을 할 때, DAO에서 다음과 같이 connect 함수를 만들었다.
DB에 연결을 할 때, connect함수를 이용했는데, 이 내용을 우리가 원하는 내용만 빼와서 쓸 때 유용할 것 같다.
connection pool은 DB에 접속하기 위한 설정이다.
아래의 jar파일 2개를 다운로드하자. 이 두 파일을 CTRL + C해서WebContent/WEB-INF/lib폴더에 CTRL + V해서 복사 붙여넣자.
src/connectionPool패키지를 만들고, DBConn.java 파일을 만든다.
DBConn.java
더보기package connectionPool; import java.util.StringTokenizer; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; public class DBConn extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletException { try { // web.xml에서 정보를 가지고 옴 String drivers = config.getInitParameter("jdbcDriver"); StringTokenizer st = new StringTokenizer(drivers, ","); // 드라이버가 여러 개있을 수 있으므로 이에 대한 처리를 한다.(현재는 하나만 있다.) while (st.hasMoreTokens()) { String jdbcDriver = st.nextToken(); Class.forName(jdbcDriver); } Class.forName("org.apache.commons.dbcp.PoolingDriver"); } catch(Exception e) {} } }
src폴더에 아래의 pool.jocl 파일을 붙여넣는다.
(xml과 비슷한 역할)
위 파일의 내용은 아래와 같다.
<object class="org.apache.commons.dbcp.PoolableConnectionFactory" xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl"> <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory"> <string value="jdbc:oracle:thin:@localhost:1521/xe" /> <string value="hr" /> <string value="1234" /> </object> <object class="org.apache.commons.pool.impl.GenericObjectPool"> <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" /> </object> <object class="org.apache.commons.pool.KeyedObjectPoolFactory" null="true"/> <string null="true"/> <boolean value="false"/> <boolean value="true"/> </object>
위의 파일 내용에서 아래의 문구가 중요하다.
2번째, 3번째, 4번째 문장은 위의 connect함수의 DriverManager.getConnection함수의 매개변수들이다.
자신의 설정에 맞게 변경하도록 하자.
이 파일의 해석은 클래스로부터 객체를 만들겠다는 의미이다.(object 태그)
DB정보를 채워준다.DBConn클래스에 등록을 한다.
WebContent/WEB-INF/web.xml 파일의 내용을 수정해야 한다.
web.xml 의 내용
더보기<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Lji_Project</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>DBConn</servlet-name> <servlet-class>connectionPool.DBConn</servlet-class> <init-param> <param-name>jdbcDriver</param-name> <param-value>oracle.jdbc.driver.OracleDriver</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> </web-app>
위의 <servlet-class> 태그에서 DBConn클래스는 connectionPool패키지에 있으므로, 패키지의 경로까지 적어줘야 한다.
web.xml에서 DB정보를 넣어준다. DBConn을 자동으로 등록이 되게 된다.
WebContent에 getbook .jsp파일을 만들자.
getbook .jsp 파일에서는 위의 내용을 가지고 DB에 접속을 할 것이다.
그리고 기존의 앞에서 한 DB에 접속해서 book 데이터를 가지고 오자.
getbook.jsp 을 실행하자. 실행 시, "Run on Server"를 실행한다.getbook.jsp
더보기<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 연결 작업 --> <%@ page import="java.sql.*" %> <% Connection conn=null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = null; try{ // pool.jocl파일에 관련 정보가 다 들어 있다. // pool은 pool.jocl을 의미한다. conn = DriverManager.getConnection( "jdbc:apache:commons:dbcp:/pool"); if (conn != null) System.out.println("DB접속 성공"); else System.out.println("DB접속 실패"); sql = "select * from book"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while (rs.next()){ %> <%=rs.getInt(1) %> <%=rs.getString(2) %> <%=rs.getString(3) %> <%=rs.getInt(4) %> <%=rs.getString(5) %> <% } rs.close(); pstmt.close(); conn.close(); }catch(Exception e){e.printStackTrace();} %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> </body> </html>
'JAVA > 웹 프로그래밍 - JSP' 카테고리의 다른 글
게시판 만들기 - 10. 이미지 업로드 구현하기 (0) 2020.12.02 게시판 만들기 - 9. 검색 리스트 구현하기 (0) 2020.12.02 jsp:useBean 액션 태그 (0) 2020.12.01 게시판 만들기 - 8. 글 수정 & 글 삭제 구현하기 (0) 2020.12.01 게시판 만들기 - 7. 채팅 기능 추가 하기 (0) 2020.11.28