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 閱讀(1686) 評論(0)  編輯  收藏 所屬分類: J2EE

          主站蜘蛛池模板: 台北市| 巴彦淖尔市| 贵溪市| 镇原县| 肃南| 定日县| 修武县| 汾阳市| 内黄县| 高要市| 台北市| 黄大仙区| 桃江县| 石屏县| 鲁甸县| 昂仁县| 重庆市| 昌江| 湾仔区| 刚察县| 石渠县| 张家界市| 五河县| 桦川县| 陕西省| 本溪市| 富顺县| 招远市| 山西省| 万荣县| 六枝特区| 许昌县| 根河市| 仁寿县| 莫力| 兴城市| 襄城县| 都江堰市| 阿荣旗| 虹口区| 阿拉善右旗|