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就可以了。

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