一、Hibernate
1、 主鍵生成策略
1.1<!-- 數值類型 -->
<!-- assigned手工生成 -->
<!--
<id name="tid" column="tid">
<generator class="assigned"></generator>
</id>
-->
<!-- native通用(如果是mysql或sqlserver自動查找自增長列,如果是oralce或則db2會找hibernate_sequence的序列,hibernate_sequence需要在數據庫裏創建) -->
<!--
<id name="tid" column="tid">
<generator class="native"></generator>
</id>
-->
<!-- identity 只針對sqlserver使用,oralce不能用 -->
<!--
<id name="tid" column="tid">
<generator class="identity"></generator>
</id>
-->
<!-- increment 查詢數據字段中最大致加1方式生成主鍵(併發操作有問題) -->
<!--
<id name="tid" column="tid">
<generator class="increment"></generator>
</id>
-->
<!-- sequence 使用序列,只有Oracle可以用 -->
<!--
<id name="tid" column="tid">
<generator class="sequence">
<param name="sequence">seq_temp_tid</param>
</generator>
</id>
-->
1.2<!-- 字符類型 -->
<!-- assigned手工生成 -->
<!--
<id name="tid" column="tid">
<generator class="assigned"></generator>
</id>
-->
<!-- uuid 主鍵爲隨機生成的32位僞列-->
<id name="tid" column="tid">
<generator class="uuid"></generator>
</id>
二、DWR使用(在dwrpro項目中)
2.1什麼是DWR
DWR – Direct Web Remoting
開源,免費的Ajax框架
將Java類發佈爲JavaScript可調用的腳本對象
提供JavaScript工具類,簡化頁面編碼
2.2爲什麼要使用DWR
DWR其功能的強大在於它可以用一種前所未有的便利方式將前端頁面中的js與後端服務器中的java程序進行直接的轉換。比如,它可以將java程序中的某個類在js中生成一個相應的對象,並可以調用發佈的方法
2.3實現的3個步驟:
1、安裝DWRJAR文件
把dwr.jar放置在應用程序的WEB-INF/lib 下;
從DWR2.0開始需要commons-logging.jar類庫。
2、編輯DWR配置文件
修改WEB-INF/web.xml 加入DWR servlet
在WEB-INF 下創建dwr.xml 文件
<!-- dwr配置根標籤 -->
<dwr>
<!--
allow標籤 java類和js腳本關係
-->
<allow>
<!-- 下面爲測試環境使用(正式開發時不需要寫) -->
<!--
create標籤 創建DWR對象
creator屬性 默認爲new
javascript屬性 前臺js調用對象的名稱
-->
<create creator="new" javascript="JDate">
<!--
param標籤 參數設置
name屬性 默認爲class
value屬性 後臺java類的名稱
-->
<param name="class" value="java.util.Date" />
</create>
<create javascript="Test" creator="new">
<param name="class" value="com.web.dwr.TestDwr"></param>
</create>
<!-- 如果參數或者返回值中包含對象 -->
<convert converter="bean" match="com.web.vo.User" />
</allow>
</dwr>
3、測試DWR是否配置成功
在瀏覽器地址欄中輸入:
http://localhost:8080/dwrme/dwr/index.html
其中:dwrme表示項目工程名
/dwr/index.html是固定的路徑
4、運用在相應的Jsp頁面
<!-- DWR中在Jsp頁面必須添加此三行代碼,/dwr/interface/Test.js中Test.js表示在dwr.xml中定義的js對象(javascript屬性內容) -->
<script type="text/javascript" src="<%=path %>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/util.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/interface/Test.js"></script>
<script type="text/javascript">
function fun1(){
//getString是在TestDwr類中定義的方法,Test.getString表示對象名.屬性名
//Test爲javascript對象
Test.getString(function(data){//此處的function是回調函數
alert(data);
});
}
</script>
<input type="button" value="返回值是字符串" οnclick="fun1()"/>
Map集合參數賦值:(鍵值對)
var map = {"110":"lifan","111":"zhangsan","112":"lisi"};
對象參數賦值:(鍵值對)
var user = {"usercode":"lifan","password":"123456"};
List集合參數:
var list = ["呵呵","哈哈","哦哦"];
function fun9(){
var list = ["呵呵","哈哈","哦哦"];
Test.paramList(list,function(data){
alert(data);
});
}
function fun10(){
var map = {"110":"lifan","111":"zhangsan","112":"lisi"};
Test.paramMap(map,function(data){
alert(data);
});
}
function fun11(){
var user = {"usercode":"lifan","password":"123456"};
Test.paramUser(user,function(data){
alert(data);
});
}
<input type="button" value="Map集合參數" οnclick="fun10()"/>
<input type="button" value="對象參數" οnclick="fun11()"/>
<input type="button" value="List集合參數" οnclick="fun9()"/>
三、Struts2
3.1在Struts2中配置控制類
<!-- struts根標籤 -->
<struts>
<!--
package標籤 配置包(可以有多個)
name屬性 隨便寫(不能重名)
extends屬性 繼承struts框架核心功能 固定:struts-default
namespace屬性 命名空間(url訪問的前綴)
-->
<package name="hellopack" extends="struts-default" namespace="/">
<!--
action標籤 配置具體action實現 (action可以有多個)
name屬性 請求地址字符串;必須與前臺的表單或者鏈接請求到struts後臺輸入的地址一樣(URL)
class屬性 接受前臺請求,並處理要前臺數據的相應的完整類名
-->
<action name="hello" class="com.web.action.HelloAction">
<!--
result標籤 配置請求處理後頁面跳轉(result可以有多個)
name屬性 Action返回字符串(默認:success)
標籤主體部分 配置資源文件(jsp);根據不同的name屬性值返回到對應的jsp頁面
-->
<result name="success">/index.jsp</result>
</action>
</package>
<package name="userpack" extends="struts-default" namespace="/">
<!--
method屬性 配置處理請求方法名稱 (默認:execute)
其值要與對應的類名中的方法名一樣
-->
<action name="login" class="com.web.action.UserAction" method="login">
<result>/success.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="reg" class="com.web.action.UserAction" method="reg">
<result>/login.jsp</result>
</action>
</package>
<package name="mypack" extends="struts-default" namespace="/">
<action name="hello" class="com.web.action.HelloAction">
<!--
type屬性 設置控制跳轉模式
dispatcher轉發到其他資源文件(jsp)
chain轉發到其他Action
redirect重定向到其他資源文件(jsp)
redirectAction重定向到其他Action
-->
<result type="redirectAction">list</result>
</action>
<action name="list" class="com.web.action.HelloAction" method="list">
<result >/index.jsp</result>
</action>
<!-- 如果在地址欄中輸入http://localhost:8080/struts03/hello,最後地址欄會跳轉到http://localhost:8080/struts03/list.action-->
</package>
</struts>
四、OGNL標籤
字符串解析標籤:
<s:generator separator="," val="'11111,22222,333333'">
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:generator>
<c:forTokens items="aaaa,bbbb,cccc" delims="," var="s">
${s }<br/>
</c:forTokens>
動作標籤:
<s:action name="list" namespace="/" executeResult="true"></s:action>
executeResult="true"必須爲true
五、配置攔截器
<struts>
<!-- 使用國際化配置此內容 -->
<constant name="struts.custom.i18n.resources" value="res"></constant>
<package name="testpack" extends="struts-default" namespace="/">
<!-- 定義一組攔截器 -->
<interceptors>
<!--
interceptor標籤 配置攔截器(可以有多個)
name屬性 攔截器的名稱(隨便寫)
class屬性 攔截器的類名稱
-->
<interceptor name=”iner1” class="com.web.interceptor.MyInterceptor1"></interceptor>
<interceptor name=”iner2” class="com.web.interceptor.MyInterceptor2"></interceptor>
<!--
interceptor-stack標籤 定義攔截器棧
name屬性 隨便寫
-->
<interceptor-stack name="mystack">
<!-- 指定攔截器棧中的攔截器 -->
<interceptor-ref name="inter1"></interceptor-ref>
<interceptor-ref name="inter2"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="test" class="com.web.action.TestAction">
<result>/index.jsp</result>
<!-- 如果一旦編寫自定義攔截器,默認的攔截器需要顯示的編寫 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 爲action添加指定攔截器 -->
<!--
<interceptor-ref name="inter1"></interceptor-ref>
<interceptor-ref name="inter2"></interceptor-ref>
-->
<!-- 爲action添加執行攔截器棧 -->
<interceptor-ref name="mystack"></interceptor-ref>
</action>
<action name="add" class="com.web.action.AddAction">
<result>/index.jsp</result>
<!-- 配置如果攔截到重複提交的錯誤時跳轉頁面 -->
<result name="invalid.token">/add.jsp</result>
<!-- 配置防止重複提交的攔截器 -->
<interceptor-ref name="token"></interceptor-ref>
<!-- 自帶默認攔截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 顯示action執行時間,用於性能瓶頸測試 -->
<interceptor-ref name="timer"></interceptor-ref>
</action>
</package>
</struts>
改善輸出界面:
配置資源文件
六、Spring
6.1spring模塊
1)Spring核心模塊(Spring Core)
Spring的核心容器模塊,它提供IOC的支持。該模塊中包含BeanFactory,它採用工廠模式來實現IOC,負責對bean的生命週期的管理。
2)Application Context(上下文模塊)
該模塊擴展了BeanFactory的功能,例如提供了i18n,系統生命週期以及驗證的支持Spring的AOP模塊
該模塊爲應用系統的AOP開發提供了支持。
3)JDBC和DAO模塊
提供了JDBC封裝的模板代碼,使得使用JDBC開發更加簡潔。
4)ORM映射模塊
該模塊提供了對許多流行的ORM框架的支持,其中包括Hibernate,JDO和iBATIS SQL的支持Spring Web模塊
該模塊中Spring提供了對其它的WEB框架的支持,包知Struts,JSF,WEBWORK等
5)Spring MVC框架
Spring提供的用於開發WEB應用的MVC框架
6.2spring核心應用
IOC(控制反轉)
程序中各個組件之間的關係,不由程序代碼直接操控,而由容器控制。控制權由應用代碼中轉到了外部容器,即所謂的反轉。 (把自己new的東西改爲由容器提供)
更通俗的名稱:DI(依賴注入)
各個組件之間的依賴關係不是在程序中寫死,而是寫在外部的配置文件中,然後運行時通過容器動態注入。
Spring核心容器提供了IOC的具體實現,所有的其它模塊都是建立在它的基礎之上。
6.3自己總結
每次新增一個功能需要在com.web.dao.impl下新增一個類去實現接口(UserDAO.java),在配置文件中添加<bean name="userDAOImpl4"class="com.web.dao.impl.UserDAOImpl4"></bean>
並更改<property name="userDAO" ref="userDAOImpl4"></property>中ref的屬性值
----------
後續將不斷更新