搭建SSH框架順序和注意事項
環境為 myeclipse8.6 資料庫 mysql5.0 Jdk 1.6 WindowsXp TomCat 6.0
首先建立一個 New => Web Project 起名 demo
然後在專案名稱上 點選滑鼠右鍵 選擇 MyEclipse => Add Speing Capabilites...
接下來 就是選擇需要載入 Spring 的版本 我在這裡選擇 3.0
選擇需要載入的庫檔案 Spring 3.0 Aop Libraries,core Libraries,Persistence Core Lisbraries,
還有一個 Web Libraries
後面基本上沒啥了 直接 Finish 吧。
然後接著新增 hibernate
還是專案名稱上 點選滑鼠右鍵 選擇 MyEclipse => Add Hibernate Capabilites...
在這裡我選擇的hibernate版本是3.2
庫檔案分別是 Annotations & Entity Manager 和 Core Libraries
選擇 Copy checked library Jars to project folder and add to build-path 將庫檔案複製到 /WebRoot /Web-INF/lib 目錄下
接下來 選擇 Next 進入下一配置頁面 選擇 Spring configuration file(applicationContext.xml) 讓Spring 託管 hibernate的配置檔案
選擇 Existing Spring Configuration file
接下來配置資料庫連線引數 jdbc
MYSql 配置如下:
Driver Class:com.mysql.jdbc.Driver
Username:root
password:root
Dialect:MySQL
接下來 將 Create SessionFactory class 選項 取消,最後 Finish
最後我們來新增Struts2
還是專案名稱上 點選滑鼠右鍵 選擇 MyEclipse => Add Struts Capabilites...
我們選擇 struts的版本為 2.1 過濾器名稱 預設為 struts2 攔截 URL pattern 選擇 /* 對所有連結都進行過濾監測
接下來選擇 載入庫檔案 在這裡我選了 Core Libraries,DOJO Libraries,Spring Libraries(這是Struts 支援Spring 的庫檔案)
最後 選擇 FINISH.
結束新增SSH框架的第一部;
接下來我們要配置 Web.xml 檔案 新增 spring 的監聽器 WebRoot/WEB-INf/web.xml
<!-- Struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 設定spring監聽 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 通用返回頁面 -->
<error-page>
<error-code>404</error-code>
<location>/page/comm/404Error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/page/comm/500Error.jsp</location>
</error-page>
配置 applicationContext.xml 的 aop 頭 檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
配置 資料庫c3p0連線池
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 1.需要更改資料庫ip、埠、資料庫名稱 -->
<property name="jdbcUrl"
value="jdbc:mysql://127.0.0.1:3306/system_showapp?useUnicode=true&characterEncoding=utf-8" />
<!-- 2.資料庫使用者名稱 -->
<property name="user" value="root" />
<!-- 3.資料庫密碼 -->
<property name="password" value="rootroot" />
<!--連線池中保留的最小連線數。Default: 3 -->
<property name="minPoolSize" value="5" />
<!--連線池中保留的最大連線數。Default: 15 -->
<property name="maxPoolSize" value="20" />
<!--初始化時獲取三個連線,取值應在minPoolSize與maxPoolSize之間。Default: 3 -->
<property name="initialPoolSize" value="10" />
<!--最大空閒時間,60秒內未使用則連線被丟棄。若為0則永不丟棄。Default: 0 -->
<property name="maxIdleTime" value="20" />
<!--當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。Default: 3 -->
<property name="acquireIncrement" value="3" />
<!--定義在從資料庫獲取新連線失敗後重復嘗試的次數。Default: 30 -->
<property name="acquireRetryAttempts" value="30" />
<!--兩次連線中間隔時間,單位毫秒。Default: 1000 -->
<property name="acquireRetryDelay" value="1000"></property>
<!--連線關閉時預設將所有未提交的操作回滾。Default: false -->
<property name="autoCommitOnClose" value="false"></property>
<!--
JDBC的標準引數,用以控制資料來源內載入的PreparedStatements數量。但由於預快取的statements屬於單個connection而不是整個 連線池。所以設定這個引數需要考慮到多方面的因素。
如果maxStatements與maxStatementsPerConnection均為0,則快取被關閉。Default: 0
-->
<property name="maxStatements" value="0" />
<!--每60秒檢查所有連線池中的空閒連線-->
<property name="idleConnectionTestPeriod" value="60" />
<!--
maxStatementsPerConnection定義了連線池內單個連線所擁有的最大快取statements數。Default: 0
-->
<property name="maxStatementsPerConnection" value="0"></property>
<!--
因效能消耗大請只在需要的時候使用它。如果設為true那麼在每個connection提交的時候都將校驗其有效性。建議使用 idleConnectionTestPeriod或automaticTestTable
等方法來提升連線測試的效能。Default: false
-->
<property name="testConnectionOnCheckout" value="false"></property>
<!--如果設為true那麼在取得連線的同時將校驗連線的有效性。Default: false -->
<property name="testConnectionOnCheckin" value="true"></property>
</bean>
如果有多個 applicationContext.xml檔案可以在web.xml內配置
<!-- 設定spring監聽 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
接著配置 struts.xml 可以多配置檔案 通過 <include file="struts-1.xml"></include> 標籤匯入
<constant name="struts.i18n.encoding" value="UTF-8" />
<include file="struts-1.xml"></include>
<include file="struts-2.xml"></include>
<include file="struts-3.xml"></include>
<package name="System" extends="struts-default" namespace="/">
</package>
<!--
通用攔截器 請在package 內設定繼承 extends="mystruts" 每個action內新增
-攔截器- 就可以進行不登陸攔截
<interceptor-ref name="mystack"></interceptor-ref>
-->
<package name="mystruts" extends="struts-default" namespace="/">
<!-- 攔截器設定 -->
<interceptors>
<!-- 定義的許可權攔截器 -->
<interceptor name="myauth" class="com.dw.util.AuthorizationInterceptor"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myauth"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 通用返回 -->
<global-results>
<result name="input" type="redirect">/index.jsp</result>
</global-results>
</package>
新增 log4j.properties
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile
log4j.appender.syslog.encoding=GBK
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#log4j.appender.logfile.File=${petstore.root}/WEB-INF/petstore.log
log4j.appender.logfile.File=D\:\\log4j.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n