struts2學習_第二天

struts2學習的第二天。

         在寫action標籤的時候,我們可以自己加上class標籤,指向我們自己項目包中的類文件,並且集成ActionSupport類,重寫execute方法。這時候我們就可以根據返回的值跳轉到不同的頁面。但是我們也可以不加class標籤,這樣程序就會默認到ActionSupport的execute中執行,默認返回"SUCCESS"值。action也不一定非要執行execute()方法纔可以,也可以指定方法執行,可以添加method=“方法名” ,指定執行的方法,當然這也做也是比較繁瑣的,那麼struts2也提供了一個相對比較方便的方法,就是動態方法調用,這個方法好像在struts2的2.3版本以上就不推薦使用了,需要在struts.xml中加上

<constant name="struts.enable.DynamicMethodInvocation" value="true" />
纔可以使用,例如:user!add ,意思就是調用某個actionz中的add方法,如果想調用delete方法,則改成user!delete即可,也就是是說在當前action中動態調用某個方法。

無class標籤 : 

<package name="default" namespace="/" extends="struts-default">
	<action name="testStruts1">
		<result>
			/test.jsp
		</result>
	</action>
</package>

有class標籤:

<package name="front" namespace="/user" extends="struts-default">
	<action name="userList" class="xin.itfactory.user.UserListAction">
		<result name="success">
			/userList.jsp
		</result>
	</action>
</package>

下面自己來總結下這個demo的執行順序,用戶向瀏覽器發送請求,tomcat接收到請求後,查看看看是否具有相對應的項目,如果有對應的項目,會執行項目中的web.xml文件的StrutsPrepareAndExecuteFIlter過濾器的doFilter()方法,doFilter()會根據請求的namespace和action在struts.xml文件中查看,看看是否具有相對應的,如果查找到了對應的namespace和action,如果此action沒有class標籤則會執行到ActionSupport,如果有class標籤,則會new一個新的對象(解決了線程同步的問題,也是與struts1的不同之處,struts1是不會new出新對象),最後返回結果值。

還有就是在jsp頁面中的頁面跳轉,struts2中的路徑問題是根據action的路徑而不是根據jspl路徑來確定,所以儘量不要使用相對路徑,雖然可以用redirect方式解決。解決方法非常簡單,同意使用絕對路徑。在jsp中用

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
獲取項目的全路徑,或者指定basePath

<base href="<%= basePath%>"/>

還要如何解決一個jsp頁面的中文編碼亂碼問題,可以直接修改pageEncoding爲UTF-8,也可以直接在windows----preferences---File and Editors---jsp---encoding修改爲UTF-8就可以了。

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