博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2开发基础
阅读量:6225 次
发布时间:2019-06-21

本文共 4283 字,大约阅读时间需要 14 分钟。

hot3.png

 

Struts2Action接收参数的方法主要有以下三种:

1. 使用Action的属性接收参数:

    a. 定义:在Action类中定义属性,创建getset方法
    b. 接收:通过属性接收参数,如:username
    c. 发送:使用属性名传递参数,如:user!login.action?username=caolei&password=19871027

2. 使用Domain Model接收参数:

    a. 定义:定义Model类,在Action中定义Model类的对象 (不需要new), 并创建该对象的getset方法;
    b. 接收:通过对象的属性接收参数,如:user.getUsername()
    c. 发送:使用对象的属性传递参数,如:user!login.action?user.username=caolei&user.password=198710

3. 使用ModelDriven接收参数:

 a. 定义:Action实现ModelDriven泛型接口,定义Model类的对象 (必须new),

        无需提供usergetset方法,而是通过getModel()方法返回该对象;
    b.接收:通过对象的属性接收参数,如:user.getUsername()
    c.发送:直接使用属性名传递参数,如:user!login.action?username=caolei&password=19871027

1、使用Action的属性接收参数

1.1  JSP页面代码

1.1.1注意对应的name属性直接使用Action中定义好的属性名,如username, password
URL请求: http://localhost:8080/Struts2/ user!login.action?username=caolei&password=19871027

1.2 Action代码com.ssh.course.action.UserAction

1.2.1 Action类中定义usernamepassword属性,并提供getset方法;
1.2.2Action中直接通过属性名usernamepassword取得从前台JSP传递过来的参数;

2、使用Domain Model接收参数

Domain Module中文解释:域模型,Domain Module接收参数的方式就是在Action中设一个Module对象。为什么要用Domain Module来接收参数呢?我们从前台JSP向后台Action中传递参数,Action所要做的处理无非是紧接着再把这个参数传递给对应的Module,那么假如我们的Module有100个变量,那么我们用第一种方法接收参数时就要在Action中设置100个变量,但如果我们用Domain Module的话就简单的多。在我们的Action中没有很多的属性,而是用Model层用到的模型,来保存它的一个对象。

比如在我们的学生课程及成绩管理系统中,要实现用户注册登录,那么后台Module中就会相应建立一个User类,也就是下面所说的JavaBeanModule,用于封装User对象的各个属性。简化的代码如下:

2.1  JavaBean 代码com.ssh.course.pojos.User

2.1.1 简单的JavaBean,封装了User对象的属性usernamepassword

现假设前台JSP需要向后台Action传递一个user对象的username password 两个属性,JSP代码如下:

2.2  JSP页面代码http://localhost:8080/Struts2/user/login.jsp

   2.2.1 注意对应的name属性应该是对象名+属性名,如user.username, user.password

URL请求: http://localhost:8080/Struts2/user!login.action?user.username=caolei&user.password=19871027

前台传给后台两个参数user.username=caolei&user.password=19871027, 那么在访问Action过程中,Struts2会自动为Action中的这两个变量设置前台传来的值。

我们首先在相应的Action 中声明一个private User user; 变量,并提供getset方法,注意在Action中设置的变量无论是基本类型,还是引用类型,我们只需要声明,但不需要定义,简单地说,就是我们不需要去new一个变量,new的过程 Struts2利器来自动帮我们完成。Action中代码如下:

2.3 Action代码com.ssh.course.action.UserAction

2.3.1 private User user; 变量,并提供getset方法

实际上,当前台JSP向后台的一个Action发出请求的时候,Struts2会相应地new出来一个Action对象,并调用Action中的setXXX方法,就这样 Struts2通过这个set方法将前台传来的值赋给了Action中的变量。

2.3.2 Action中如何使用接收的参数, 通过user.getUsername()user.getPassword()

3、使用 ModelDriven接收参数

我们从前台JSP向后台Action中传递参数,同方式2,同样用到JavaBean,参数被传入至Action后,会被ModelDriven对象根据参数名自动赋值给User对象相应的属性而生成User对象,并且由getModel()返回。那么我们在Action中就可以利用这个对象了。

注意:传入的参数名需要与对象模型(JavaBean)中的成员属性名一致。

比如在我们的学生课程及成绩管理系统中,要实现用户注册登录,那么后台JavaBean中就会相应建立一个User类,用于封装User对象的各个属性。简化的代码如下:

3.1  JavaBean 代码com.ssh.course.pojos.User

3.1.1 简单的JavaBean,封装了User对象的属性usernamepassword

现假设前台JSP需要向后台Action传递一个user对象的username password 两个属性,JSP代码如下:

3.2  JSP页面代码http://localhost:8080/Struts2/user/login.jsp

          3.2.1注意对应的name属性直接使用Action中定义好的属性名,如username, password

URL请求: http://localhost:8080/Struts2/ user!login.action?username=caolei&password=19871027

前台传给后台两个参数username=caolei&password=19871027, 那么在访问Action过程中,Struts2会自动为Action中的这两个变量设置前台传来的值。

我们首先在相应的Action 中声明并new一下:private User user = new User(); 无需提供getset方法,在创建Action的时候,Struts2发现Action实现了ModelDriven接口,所以会调用接口中的getModel()方法,取到了userAction中代码如下:

3.3 Action代码com.ssh.course.action.UserAction

3.3.1 private User user; 此处无需提供getset方法,但user对象一定要手动new一下:

3.3.2 Action中如何使用接收的参数,通过user.getUsername()user.getPassword

Struts2Action接收参数的三种方法总结:

第一种方法把属性值都放在Action中,当属性值较多时Action的内容将变得臃肿(一系列的getset方法)。此方法比较直观易用,适用于对象属性值较少的时候,实际项目中较好使用。

第二种方法较第一种方法有所改进,使用了Model对象模型,且可传入多个model的值,解决了属性值时Action内容臃肿的问题,缺点是值的传递和接收JSP页面需要进行标识,一般是对象名+属性名,有点不方便。

第三种方法实现了ModelDriven<T>接口,优点同方法2,且无需提供getset方法,同时JSP页面无需标识,直接使用属性名,使后台程序的logic更加清晰。缺点是不能传入多个model的值。

1. com.ssh.course.action Struts2Action,与JSP一起构成表示层
2. com.ssh.course.dao 数据访问层(DAO层,Hibernate实现)接口
3. com.ssh.course.dao.impl 数据访问层(DAO层,Hibernate实现)接口实现
4. com.ssh.course.pojos 实体类和对象关系表映射文件(Hibernate实现)
5. com.ssh.course.service 业务逻辑层(Spring实现)接口
6. com.ssh.course.service.impl 业务逻辑层(Spring实现)接口实现
7. com.ssh.course.util 通用工具类,如分页,数据类型转换等等
8. applicationContext.xml Spring框架配置文件
9. struts.xml struts2框架配置文件

1.1  MyEclipse 9.1中关联Struts2JavaSource,步骤如下:在MyEclipse 9.1中右键单击项目文件
Web App Libraries目录下的struts2-core-2.3.1.jar文件,
选择
Properties > Java  Source  Attachment

1.2  MyEclipse 9.1中关联Struts2JavaDoc,步骤同上:(其他框架关联方式类似)

 

转载于:https://my.oschina.net/wangweiwell/blog/122152

你可能感兴趣的文章
jsp入门
查看>>
Android-----使用Button特效 selector+shape
查看>>
android获取/更改gps和WIFI状态
查看>>
自定义线程池
查看>>
SQL Server性能优化(11)非聚集索引的覆盖索引存储结构
查看>>
Django后台管理定制admin
查看>>
从源码分析scrollTo、scrollBy、Scroller方法的区别和作用
查看>>
购买内存条的几点方法
查看>>
[51Nod1487]占领资源
查看>>
Asymptote 学习记录(1):基本的安装以及用批处理模式和交互模式绘图
查看>>
高效率随机删除数据(不重复)
查看>>
什么是死锁?其条件是什么?怎样避免死锁?
查看>>
【JDK1.8】JUC——LockSupport
查看>>
第八组Postmortem事后分析
查看>>
扁平化设计2.0
查看>>
codevs1116
查看>>
聊聊Dubbo(三):架构原理
查看>>
tizen镜像制作
查看>>
Vue表单输入绑定
查看>>
团体程序设计天梯赛-练习集
查看>>