본문 바로가기

Java, Spring/10일

10일차 1 - context.xml에 Resouce 등록, Deploy(서버환경에서 띄우기)

지난번에 server.xml에 Resource 등록했었는데 단점이 있어..

프로젝트 삭제했다가 다시 붙이면 context가 다시 생겨서 resource 링크 잡아놓은것이 사라져버려.. 그래서 server.xml을 수정하는건 좋지않아. 그래서..

우선 server.xml 다시 원상복귀 시키고

http://tomcat.apache.org –> Documentation –> Tomcat 7.0 –> 8. JNDI Resources  참조(http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html)

META-INF에 context.xml만들고 저번의 Resource붙여..

<?xml version="1.0" encoding="UTF-8"?>
<Context>
   	<Resource name="OracleCP"
  		auth="Container"
  		driverClassName="oracle.jdbc.OracleDriver"
  		type="javax.sql.DataSource"
  		url="jdbc:oracle:thin:@localhost:1521:xe"
  		username="oraclejava"
  		password="oraclejava"
  		maxActive="200"
  		maxWait="-1"  		
  	/>
</Context>

 

/webdev/WebContent/jdbc/dbcpTest.jsp 실행하면 잘 되네..

 

실행되는 과정을 보면.. context.xml이 실행될 때 자동으로 resource link를 만들어 집어넣어..

C:\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\server.xml보면

이렇게 자동으로 들어가있네.. 그러니까 지가 알아서 잘 실행이 된다는거지..

여기까지 잘 실행되었으면..

 

이제 BoardDao 수정해주자..

package board.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDao {
	private Connection cn = null; 		
	private PreparedStatement st = null;
	private ResultSet rs = null;	
	
/*	public BoardDao() {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	//드라이버 로드..
	}*/
	
	public void getConnection(){
		try {
/*			cn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:xe", 
					"oraclejava", "oraclejava");*/
			Context init = new InitialContext();
			DataSource ds = (DataSource) init.lookup("java:comp/env/OracleCP");
			cn = ds.getConnection();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	
	//아래 생략..

index.jsp로 잘 수행되나 확인해봐..

굿..!

아.. UserDao도 고쳐야지..

package user.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class UserDao {
	private Connection cn = null; 		
	private PreparedStatement st = null;
	private ResultSet rs = null;	
	
/*	public UserDao() {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}	
	}*/
	
	public void getConnection(){
		try {
/*			cn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:xe", 
					"oraclejava", "oraclejava");*/
			Context init = new InitialContext();
			DataSource ds = (DataSource) init.lookup("java:comp/env/OracleCP");
			cn = ds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
	//아래생략..

 

로그인도 잘 되네.. 굿..!

 

C:\Java\apache-tomcat-7.0.27\webapps\webdev.war Finish (단, 기존의 webdev폴더는 먼저 삭제하고)

이클립스 웹서버는 stop하고

C:\Java\apache-tomcat-7.0.27\bin\startup.bat실행.. 그러면 디플로이된거 보일거야..

이제 http://localhost/webdev/Login.do 실행해봐.. 안되네..

 

혹시 경로때문인가..

dispatcher-servlet.properties를 controller밑으로 옮기고.. (conf폴더는 지워)

web.xml 수정 (mapping은 그냥 이름바꾼거야.. 의미맞게)

  
  <servlet>
  	<servlet-name>dispatcher</servlet-name>
  	<servlet-class>controller.DispatcherServlet</servlet-class>
  	
  	<init-param>
  		<param-name>mapping</param-name>
  		<param-value>dispatcher-servlet.properties</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcher</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>    
  

DispatcherServlet 수정

public class DispatcherServlet extends HttpServlet {
	
	//properties 받을 맵 생성
	private Map<String, AbstractController> commandMap
		= new HashMap<String, AbstractController>();

	//servlet 최초에 실행하는 메서드
	@Override
	public void init(ServletConfig config) throws ServletException {
		
		//param-value(property 파일의 경로)를 읽어와				
		String props = 
				this.getClass().getResource("").getPath()+config.getInitParameter("mapping");

그거 때문이 아니구나..

 

JAVA_HOME을 맨처음 이클립스 띄울때 안잡아 놨었잖아.. 그러면 default로 jre찾는 경로가 C:\Java\jdk1.7.0_03\jre가 아니라 자바기본폴더의 jre를 잡아. 그 경로가 틀린 거 때문에 ojdbc6.jar를 못읽어서 그런거같아..

C:\Java\jre7\lib\ext\ojdbc6.jar를

C:\Java\jdk1.7.0_03\jre\lib\ext\ 폴더에 복사해줘..

그리고 다시 해봐