struts2学习心得

2020-04-14 07:19

一.

配置问题:

最新的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) *

一定要遵守“约定优于配置”的原则: 就是说什么东西 你必须符合一定的标准,在这个基础上在进行优化配置。。。。。

student{1}_success.jsp 意思就是说凡是带url为/actions/Student,后缀无论是什么的都可以访问,但是method=“{1}”说明其方法为你之前*所代表的那个.当你返回success时就调用student{1}_success.jsp 比如:你访问http://……./actions/StudentAdd,那他就调用的方法是Add 成功之后(返回success)访问studentAdd_success.jsp 看第二个action配置

/{1}_{2}_success.jsp 这又是什么意思呢?

就是说凡是带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 举个例子说明一下:

如果用户注册的时候肯定有用户名,密码和验证密码。但是你定义一个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配置常量

在里面加入 Name为属性,value为属性值

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类型

1. LoC

2. 依赖struts2

b)

1. LoC

2. 依赖struts2

7. 包含文件配置 8. 默认action处理 十.

1.常用的四种类型 A)dispatcher(默认) B)redirect C)chain D)redirectAction 2.全局结果集 A)global-results|extends 3.动态结果(了解) A)在action中保存一个属性,存储具体的结果location

${r} 这个意思就是说:用中间那个表达式可以去读value stack(如下面所述)中的r的值。

Value stack栈中的值:

每一个动作在执行相应方法之前,都会创建一个value stack的对象。value stack用来保存这个动作对象和其他对象。

可以使用el表达式和Struts2标签进行对值栈的访问: 使用Struts2标签,需要引入标签库:

<%@taglib prefix=\ uri=\%>

${errors.name[0]}

Action中进行简单的数据校验: package actions;

import com.opensymphony.xwork2.ActionSupport; import enetitys.User;

public class UserAction extends ActionSupport {

private User user;

public User getUser() { return user; }


struts2学习心得.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:50谈地球物理探测技术在城市工程中的应用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: