当前位置:首页 > struts2学习心得
一.
配置问题:
最新的struts2为GA版2.2.1
其中必须类库为1.commons-fileupload-1.2.1.jar
2. commons-io-1.3.2.jar 3. freemarker-2.3.16.jar 4. javassist-3.7.ga.jar 5. ognl-3.0.jar
6. struts2-core-2.2.1.jar 7. xwork-core-2.2.1.jar
之前的版本使用ognl时不需要javassist这个类库 现在这个版本则需要。。 二.
EL表达式(JSP EL)
目的是为了使JSP写起来更加简单。 A、语法结构
${expression} B、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${user.My-Name}应当改为${user[\
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如: ${sessionScope.user[data]}中data 是一个变量 C、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope Session SessionScope Application ApplicationScope D、特别强调:
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
2、 注意 <%@ page isELIgnored=\表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
3、在web中用EL表达式时 ${name}其意思是调用其getName方法,而不是name这个属性 例如:
public class HelloWordAction{ private String msg; public String getMessage{
return msg; } }
在jsp中使用${message} 就是返回msg的值。经实验证明了的 三.
Struts2是在webwork2的基础上发展而来的。和struts1一样也是mvc框架。但是虽然他们名字一样但是原理差异很大。Struts2之所以会产生是因为有以下几个优点:
1. 在软件设计方面struts2没有像struts1那样和servlet API和struts API那样紧密的耦合。
Struts2可以不依赖它们。Struts2属于无侵入式设计。而struts1属于侵入式设计。 Public class HelloWordAction extends Action{ Public ActionForward execute(ActionMapping mapping ActionForm form HttpRequest request HttpResponse response)throws Exception{
。。。。
} }
而struts2则不需要,只需自己定义就好。
2.Struts2不需要注意线程同步的问题,而struts1则面临这个问题,因为struts1对action创建的时候只创建一次,当多个用户同时访问这个action时,则必须出现这个同步的问题。 而对struts2来说,需要action时都要重新new出一个对象。 四.
Namespace决定了action的访问路径,默认为“”,可以接受所有路径的action。Namespace后面可以加/也可以加/xx或者/xx/yy,则action的访问的路径就相对于/index.action,/xx/index.action或者/xx/yy/index.action
Package顾名思义为“包”可以把你的action包裹进来,然后在里面定义自己的action
可以定义N个包,但是包和包之间的名字不能重复,包里面的action可以和别的包的重复。 3.
Action的几个属性: 1.Name:
2.Method:默认为自动的Actionsupport 里面有个方法execute()方法返回suceess字符串。所以result的默认值为 success。但是注意:并不是一定要执行execute()方法,而是根据Method方法指定的来说,也可以在地址中动态指定(动态方法调用DMI(动向指标或趋向指标))推荐使用
(开发action一般继承Actionsupport重写execute()方法。。。(企业开发只用这种)
当然还有其他两个方法 自己写个execute()方法,或者继承Action接口 重写execute()方法)
3.Class:自己开发写的action路径。 五.
路径问题:一般用绝对路径
因为struts2的路径问题是根据action的路径而不是jsp路径来确定的
六.
通配符(WildCard) *
一定要遵守“约定优于配置”的原则: 就是说什么东西 你必须符合一定的标准,在这个基础上在进行优化配置。。。。。
就是说凡是带url为/actions/*_*的,无论两个*星号代表什么都可以访问,但是method=“{2}”说明其访问的方法为第一个*所代表的那个类中的第二个*所代表的方法 比如:你访问http://....../actions/Student_Add,, 那他就调用StudentAction中的Add方法 成功之后就访问Student_Add_success.jsp 这就是通配符的具体意思 七. Action参数的传递方式: 1. 直接在地址栏上传递(url) http://localhost:8080/project-name/namespace/action-name!add?name=a&age=10 就是给action中的两个属性 name和age 分别传值a和10 2. 用DomainModel方式传递 1. 当需要的参数过多时,创建一个域模型DomainModel也就是(javabean) 注意的是:这个DomainModel要有不含参数(参数为空)的构造方法,而且想让他自己new出对象的会 必须要传参数值 比如 http://localhost:8080/project-name/namespace/action-name!add?user.name=aa&user.age=10 解释一下,add?之前的和前面的一样,user.name和user.age是指把数据传给user这个对象的name和age属性 因为在action中我们不定义属性 而是直接定义一个User类型的对象 Private User user;并有getUser()方法和setUser()方法 而这个User就是我们说的DomainModel,他定义了两个属性name和age并有getter和setter方法,方便我们送值和取值。(相当于一个javabean) 2.当传入的值的个数和DomainModel的属性个数不一致的情况下,再用DTO(Data Transfer Object(数据传输对象)) 举个例子说明一下: 如果用户注册的时候肯定有用户名,密码和验证密码。但是你定义一个User的时候只 能有两个属性username和password,那这种情况下怎么办呢?我传的第三个值传给谁呢?所以要再建一个DTO(其实也是一个java类)UserDTO Private String username; Private String password;Private String confirmPassword; 生成getter和setter方法,然后通过这个再定义User的DomainModel Private String username; Private String password;写出getter方法和setter方法 注意:要写一个带UserDTO参数的User构造方法, Public User(UserDTO userDTO){}目的是为了把得到的UserDTO属性传给User对象! 接受参数的时候注意,一定要把得到的值放到User对象里,即调用setter方法 User.setName(userDTO.getName()); 用url传参数时要传给userDTO 3.用ModelDriven方式传递参数 ModelDriven是一个接口(不大常用)。 八. 配置struts2的属性有三种方法: 1. 写一个struts2。Properties文件来管理属性。一般放在项目的WEBINF/classes下。 采用的key-value对。每个key就是struts2的属性,每个value就是这个struts2的属性值。 2. 在struts2的配置文件struts.xml配置常量 在里面加入 3. 在web.xml文件中配置filter时也可以配置属性 上述文件的加载顺序为:struts.xml struts.properties web.xml 意思就是说 如果重复的属性 则按最后那个文件配置的算起。 九. Action的总结: 1. 实现action的方法有三种,一般继承Actionsupport类 2. DMI动态方法调用 3. 通配符配置 4. 接受参数的方法,一般用属性或者DomainModel来接受 5. 简单参数的验证addFilterError a) 一般不使用struts2的UI标签 6. 访问web元素 a) Map类型
共分享92篇相关文档