初用hibernate和struts2結合時的總結

剛開始將hibernate和struts2一塊兒做程序就出現很多問題,現總結如下,以後肯定還會出現問題,再總結。

1.在做struts2項目時,一定要把配置文件拼寫對。爲struts.xml,而不是struts2.並且該文件可以位於src文件夾下,只要文件名寫對。
在寫action選項時,name是什麼,就在form表單跳轉到什麼。如

<action name="userAction"  class="com.bjsxt.action.UserAction"  ></action>
則在提交表單時,可以用

<form method="post" action="userAction!add">

表示將表單內容提交到UserAction的add方法

2.關於拼寫,一些配置文件名,最好複製,自己寫容易出錯。比如:hibernate.cfg.xml,User.hbm.xml。一旦出錯,後果讓人蛋疼。

3.java裏properties文件的作用
properties文件就是一個文件,保存一些配置信息,和xml類似,裏邊的格式就是

a=111
b=222
c=3
UserDao =com.bjsxt.dao.UserDao
這樣的鍵值對格式。

java有個類java.util.Properties,專門處理這個文件。getProperty()方法是根據屬性獲取對應的值

如有個文件dao.properties,內容爲

UserDao =com.bjsxt.dao.UserDao   //注意後邊沒有分號,且key爲UserDao,value爲com.bjsxt.dao.UserDao
則可以用下列方式獲取

String path = ServletActionContext.getRequest().getRealPath("WEB-INF/classes/dao.properties");//文件一般置於固定位置
Properties pro = new Properties();
pro.load(new FileinputStream(new File(path)));
Set<Object> set = pro.keySet();//用keySet()方法獲取所有的Set中key
for(Iterator iterator=set.iterator;iterator.hasNext();){
	String key = (String)iterator.next();//key爲UserDao
	String clazz = 	pro.getProperty(key);//獲取key所對應的value
	//clazz爲com.bjsxt.dao.UserDao
}
在項目中,一般把properties文件放到WEB- INF\classes目錄下,放到其它文件夾也行,但是還得配置classpath路徑。實際上做項目時只要放到src目錄下即可,在項目跑起來時,tomcat會自動將其放到WEB- INF\classes目錄。

4.用keySet()方法可以獲取Set或map等集合中所有的key

5.static{}即static塊,會在類被加載的時候執行,並且只執行一次,
SessionFactory是hibernate中很重要的類,創建該類的實例對象時會消耗較多的資源,若每次需要時都創建一個該類,那麼會降低程序執行效率。此時應該把一些代碼寫到static{}中,只會在第一次調用時執行,提高了效率。
static代碼塊是在類中獨立於類成員的語句塊,可位於任意位置,它不在任何方法體內,可以有多個,此時JVM會按照它們在類中出現的順序依次執行。每個代碼塊只執行一次。如hibernate中的工具類HiberUtil

public class HiberUtil(){
	private static SessionFactory factory;
	static{
	Configution conf = new Configution().configure;
	factory = conf.buildSessionFactory();
	}
	
	public static Session getSession(){
		return factory.openSession();//開啓session
	}
}
這樣以後用時,直接用下邊的即可

Session session = HiberUtil.getSession();//獲取session
6.struts2的action默認情況下返回的是String類型,不能返回int或其他類型。
因爲返回的每一個String類型的結果對應一個頁面或者action 的chain的跳轉。這string類型的相當於索引,struts2根據其跳轉頁面。

<action name="firstAction" class="com.bjsxt.action.FirstAction">
	<result name="success">/ok.jsp</result>
	<result name="getList" type="redirect">userAction!getList.action</result>
</action>
result的默認類型是dispatcher(用來轉向jsp頁面)

7.關於s標籤和c標籤
當把roleMap放到作用域後,可以分別用c標籤和s標籤獲取

ServletContext sc = sce.getServletContext();
sc.setAttribute("roleMap", roleMap);
利用c標籤獲取,用el表達式獲取作用域的值

<c:forEach items="${roleMap}" var="result">
	<option value="${result.key }">${result.value }</option>
</c:forEach>
利用s標籤獲取。注意爲#

<s:iterator value="#application.roleMap" var="result">
	<option value="${result.key }">${result.value }</option>
</s:iterator>
注意二者區別。

8.若想讓某項值在服務器開啓時就執行,可以讓該類實現(即implements)ServletContextListener,再釋放到作用域中。還要在web.xml進行配置,要放在過濾器filter前邊。類似於下

<listener>
  	<listener-class>com.bjsxt.init.InitListener</listener-class>
</listener>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章