首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2的温习总结

2012-09-22 
Struts2的复习总结1.web.xml格式。2.struts.xml中的namespace和访问路径有关系。就是项目名后面跟的路径。??

Struts2的复习总结

1.web.xml格式。


2.struts.xml中的namespace和访问路径有关系。就是项目名后面跟的路径。

?? package中的extends默认为struts-default,也可以改为其他包名,例如:

?????????? packag A extends="B" //B包中的action,A包可以直接拿过来用了。


3.struts.xml中<constant name="struts.devMode" value="false">讲value改为true,开发模式。当改了struts.xml文件时,不用重新启动服务。


4.用户在浏览器中输入url时,会用http协议发送给Tomcat,Tomcat根据url解析出是哪个web项目。确定哪个web项目后,就去读那个项目的web.xml文件。
web.xml中会配置struts2的filter,发送过来的请求就会交给这个filter来处理。filter配置了处理的类,处理时会调用类里的doFilter()方法。
这方法的处理会参考struts.xml,先在struts.xml中namespace,然后找对应的action,然后再找对应的result,当找到这个result会把这个请求forword给result中配置的jsp文件。jsp文件把内容反馈给客户端,呈现给用户。见下面附件“struts对用户的请求的处理过程”。

?

4.在struts的配置文件中,package中的name用来区分重名的action,作用就像Java的package一样。

???而package中的namespace和访问路径有关系。namespace必须用“/”开头。

?? namespace默认为“”,当namespace不写,即为空时,要找一个XXXX.action,没有找到精确的和它对应的时候,全都交给namespace为空的这个package,也就意味这个package囊括了其他action处理不了的action.

?

5.如果action中没有配置method,会默认去那个action中执行execute()方法。没有配置result,默认为success.

?? 自己写的action要继承自ActionSupport.java类,里面定义了很多方法,可以拿过来使用。

?

6.struts中的路径是根据action的路径,而不是jsp路径,所以尽量使用绝对路径。设置绝对路径的方法

?? 两种方法,见附件2和3

?

7.action执行的时候并不一定要执行execute方法,可以再配置文件里配置method,也可以再url中动态指定(动态方法调用DMI),格式为:action名字+!+方法名

?

8.struts2的简单数据验证:

?(1)后台:this.addFiledError("name","name is error !");? //可以用一个key,对应多个value.

???????? 前台:使用struts2的标签库<%@ taglib uri="/struts-tags" prifix="s"? %>

??????????????????<s:fielderror fieldName="name"/>??????? ------显示效果: . name is error(加上了样式)

??????????????????<s:property value="errors.name[0]" />------显示效果: name is error

?

?9. 在action中怎样获得request、session、application

??? 方法一:

?????? Map request = ActionContext.getContext.get("request");

?????? Map session = ActionContext.getSession();

?????? Map application = ActionContext.getApplication();

?????? 使用:

?????? request.put("r","r");

?????? session.put("s","s");

?????? application.put("a","a");

?????? 前台怎样获得:

?????? <s:property value="#request.r">????? ||? <%=request.getAttribute("r") %>

?????? <s:property value="#session.s">???? ?||? <%=session.getAttribute("s") %>

?????? <s:property value="#application.a"> ||? <%=application.getAttribute("a") %>

?? 方法二:(最常用的)

?????? action实现接口RequestAware,SessionAware

?????? 然后再action中定义属性Map request,Map session,加上getter和setter,就可以直接拿过来用了。

? 方法三:(现公司所用)

?????? HttpServletRequest? request = ServletActionContext.getRequest();

?????? HttpSession? session = request.getSession();

?

10.struts.xml中result类型

???? (1)默认类型为dispatcher:服务器端跳转,利用服务器跳转到结果页面。forward,跳转,浏览器中显示的是action的地址。只能跳转到页面,不能调整到一个action.

?????(2)redirect:客户端跳转。浏览器中显示的jsp的地址。也不能调整到action,

?????(3)chain:可以跳转到action

????????????????????用法:跳转到所属包里的action,直接跟action名称

???????????????????????????? 跳转到其他包里的action,写法如下:

???????????????????????????? <result type="chain">

????????????????????????????????????? <param name="actionName">.....(action的名称)</param>

????????????????????????????????????? <param name="namespace">/abc...</param>

???????????????????????????? </result>

?

?????(4)全局结果集

???????????? 每个action里有要配置相同的一个result,此时可以配置一个全局结果集来代替。

???????????? 用法:<global-result>

????????????????????????????????<result type="....">xxx.jsp</result>

????????????????????? </global-result>

?

??? (5)动态结果集

??????????? 跳转的页面时动态配置的,写法如下:

?????????? action中这样写:

?????????????????? if(type == 1){

?????????????????????????r = "success.jsp?";???????? //type和r是action的两个属性,要有get和set方法

?????????????????? }else if(type == 2){

?????????????????????????r = "error.jsp?";

?????????????????? }

??????????? struts.xml这样配置:

?????????????????? <result>${r}</result>

?

11.OGNL(object graph navigation language)——对象图导航语音

(1)在action里有个对象属性时,action在初始化时,要想把包含的对象也初始化话,此时必须给哪个地下传值。同时该对象所属的类必须要有一个空的构造函数。当然也可以自己在action里new那个对象。

?

?12.struts标签

? ?先引入标记:<%@ taglib prefix="s" uri="/struts-tags"%>

? (1)通用标签

?????????a)property

????????????eg:<s:property? value="username"? defalut="Daisy" />

???????????????? <s:property? value="#request.username"?? />request中取属性,session,application用法一样。

?????????????????<s:property? value=" '<hr/>' "? escape="false" />,escape默认为true,

???????????????? ?escape为false时,当value里的值不是堆栈里的属性,而是一个普通的html相关标签时,不将该标签转成普通字符串,将当一个html标签。(不常用)

???????? b)set标签用于生成一个新变量,并把该变量放置到指定的范围内

??????????? eg:<s:set var="adminName" value="username"> //此时的value不是个字符串,而是个Object。

??????????????????name: 可选,变量的名字 ,2.1版本此属性以废弃,以后不要用了。????????????????? scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在action中。

????????????????? value: 可选,指定将赋给变量的值。

????????????????? var: 可选,指定该元素的引用ID。

???????? c)bean和param新建一个bean的对象,通过param对其属性进行赋值

????????????eg:<s:bean name="com.simlink.ckxgjl.DcjlAction" var="ckDcjl">

???????????????????????? <s:param? name="username"? value="?'Daisy' "></s:param>

???????????????????????? //value里不加单引号就是ongl,加了单引号就是普通字符串

???????????????? </s:bean>

???????? d)include

?????????????eg:<s:include value="xxxx.html"></s:include>

???????? e)fielderror

???????????? eg:<s:fielderror fieldName="username"></s:fielderror>

?????????f)debug:可以看堆栈

? (2)控制标签

????????? a)if——elseif——else

????????????? eg:<s:if? test="user.age < 18">未成年</s:if>

???????????????????<s:elseif? test="user.age?> 18">成年了</s:elseif>

???????????????????<s:else>数字不合法</s:else>

????????? b)iterator

?????????????? <s:iterator? value="{1,2,3}"? var="v"? status="status"> //集合中每取一个值都放在v中

???????????????????????<s:property />?? //遍历集合里的每个元素

???????????????????????<s:property? value="#status.count" /> //遍历过的元素总数

?????????????????????? <s:property??value="#status.index" /> //当前是第几个元素

???????????????????????<s:property??value="#status.even" />? //当前是否是偶数

???????????????????????<s:property? value="#status.odd" />????//当前是否是奇数

?????????????????????? <s:property? value="#status.first" />??? //当前是否是第一个

???????????????????????<s:property? value="#status.last" />????//当前是否是最后一个

???????????????</s:iterator>

?????????????? 遍历一个map

???????????????<s:iterator? value="#{1:'a', 2:'b', 3:'c'}">

??????????????????????? <s:property? value="key" />

??????????????????????? <s:property? value="value" />

???????????????</s:iterator>

? (3)UI标签???

? (4)AJAX标签

?

?

?

?

?

?

?

?

1 楼 imp860124 2011-01-25   (5)处的Action 需要return Action.SUCCESS

热点排行