paulwong

JSP + Jndi + Spring + Hibernate 心得筆記

這几天小試了一下JSP +Jndi + Spring + Hibernate組合的功能,想讓JSP網頁可以秀出Database裡的資料。試了老半天,發現要讓這組合成功運作,還真的是很麻煩,很多細節要注意。而且很多設定找不到文件,很讓人...DeadDeadDead


以下是這個組合成功運作所需注意的地方。


1.系統建置環境如下
AP Server : Tomcat 5.5.x
Database : Oracle 10g
Framework : Spring 1.2.x + Hibernate 3.x


2.相關重要修改設定如下
2.1 首先,我要利用Tomcat的DBCP Connection pool功能,所以必需先改Tomcat裡面的Server.xml設定檔,加入下面藍字所示的相關設定

<Host>
  
  中略
  
  
<Context 中略>
    
    
<!-- Tomcat5.5的DBCP設定方式寫法與之前版本完全不同 -->
    
<Resource 
      
name="jdbc/scott"
      auth
="Container"
      factory
="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"             
      type
="javax.sql.DataSource"
      driverClassName
="oracle.jdbc.driver.OracleDriver"            
      url
="jdbc:oracle:thin:@localhost:1521:orcl"              
      username
="scott"            
      password
="tiger"
      maxIdle
="10"
      maxWait
="1000"              
      maxActive
="100"/>    
      
  
</Context>
</Host>


2.2 接下來修改web.xml設定檔藍字所示內容

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
  xmlns
="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
  
<!-- 指定log4j設定檔位置 -->
  
<context-param>
    
<param-name>log4jConfigLocation</param-name>
    
<param-value>/WEB-INF/log4j.properties</param-value>
  
</context-param>
      
  
<!-- 指定spring設定檔位置 -->
  
<context-param>
    
<param-name>contextConfigLocation</param-name>
    
<param-value>/WEB-INF/beans-config.xml</param-value>
  
</context-param> 
  
  
<!-- 一定要在ContextLoaderListener設定之前加上Log4jConfigListener設定,如此一來ContextLoaderListener才可以正常運作 -->
  
<listener>
    
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  
</listener>
 
  
<listener>
    
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  
</listener>  
 
  
<!-- 指定此項Filter可使Spring取回的DomainObject在JSP(View層)作完所有的事情後,才將Hiberante Session給Close -->
  
<filter>
      
<filter-name>hibernateFilter</filter-name>
      
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  
</filter> 
  
  
<filter-mapping>
      
<filter-name>hibernateFilter</filter-name>
       
<url-pattern>/*</url-pattern>
  
</filter-mapping>
  
  
<!-- 指定JNDI JDBC DataSource -->
  
<resource-ref>
    
<description>JNDI JDBC DataSource</description>
    
<res-ref-name>jdbc/scott</res-ref-name>
    
<res-type>javax.sql.DataSource</res-type>
    
<res-auth>Container</res-auth>
  
</resource-ref>
  
  中略

</web-app>


2.3 在/WEB-INF目錄裡面,增加beans-config.xml這個Srping設定檔,修改藍字所示內容


<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
 "http://www.springframework.org/dtd/spring-beans.dtd"
> 
<beans> 
    中略
     
    
<!-- 利用JNDI的方式連結到DataSource -->
    
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
        
<property name="jndiName">  
            
<!-- 不可省略"java:comp/env/"字串,否則會出現異常 -->
            
<value>java:comp/env/jdbc/scott</value> 
        
</property>  
    
</bean>         
    
    中略
</beans>


2.4 在/WEB-INF目錄裡面,增加log4j.properties這個log4j設定檔

#這是我用的設定檔,請自行修改成以符合實務上需求
log4j.rootLogger=info,consoleAppender
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


3.大功告成...寫個測試的JSP網頁試試看吧...Big SmileBig SmileBig Smile...以下是我測試用的JSP,請自行修改以符合實務上需求

<%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
<%@ page import="org.springframework.web.context.WebApplicationContext"%>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@ page import="com.db.table.Emp"%>
<%@ page import="com.db.dao.IEmpDAO;"%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Spring Test</title>
</head>
<body>
<%
  WebApplicationContext context 
= WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());  
  IEmpDAO empDAO 
= (IEmpDAO)context.getBean("empDAOImpl");
  Emp emp 
= empDAO.find(new Short((short)7369));
  out.println(
"Ename: " + emp.getEname() + "<br>");
  out.println(
"Dname: " + emp.getDept().getDname() + "<br>");
%>
</body>
</html>

posted on 2006-12-20 14:53 paulwong 阅读(1682) 评论(0)  编辑  收藏 所属分类: J2EE


只有注册用户登录后才能发表评论。


网站导航: