這几天小試了一下JSP +Jndi + Spring + Hibernate組合的功能,想讓JSP網頁可以秀出Database裡的資料。試了老半天,發現要讓這組合成功運作,還真的是很麻煩,很多細節要注意。而且很多設定找不到文件,很讓人...
以下是這個組合成功運作所需注意的地方。
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設定檔,加入下面藍字所示的相關設定
2.2 接下來修改web.xml設定檔藍字所示內容
2.3 在/WEB-INF目錄裡面,增加beans-config.xml這個Srping設定檔,修改藍字所示內容
2.4 在/WEB-INF目錄裡面,增加log4j.properties這個log4j設定檔
3.大功告成...寫個測試的JSP網頁試試看吧... ...以下是我測試用的JSP,請自行修改以符合實務上需求
以下是這個組合成功運作所需注意的地方。
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 >
中略
< 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 >
< 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 >
<! 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
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網頁試試看吧... ...以下是我測試用的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 >
<% @ 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 >