一、搭建struts2环境

1、jar包的导入

主要是到

解压其中的一个工程,得到里面lib下包含的jar包

把这里的所有的jar包拷贝到项目的

WEB-INF目录下的lib文件夹下面。

2、配置struts.xml文件

注意:必须要放在src目录下,因为struts2源码就是这样设计的,只有在src目录下才读取得到。

每一个package都要extends=”struts-default”,namespace 是 访问的路径

Action中的name和 package中的namespace组成完整的访问路径

3、配置web.xml

<filter>

<filter-name>action2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>action2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

4、编写的Action类都要继承ActionSupport类或者implements Action接口

默认action类访问的是里面的execute方法

如果要访问特定的方法,可以这样:

(1)在action 后面指定 method=“方法名”

(2)使用通配符  <action name=”example_*”  class=”com.XX.YY.ZZ” method=”{1}” />

(3)使用动态表达式  比如example!execute(不常用)

5、接收表单提交的数据

(1)属性驱动获取表单参数

--在action类中定义与表单的input中  name  一样的属性(必须一样,否则注入不进去)

同时还要生产属性对应的set 方法,因为 action类要调用set方法把表单中的参数注入到属性中

(2)模型驱动获取表单参数

--模型驱动首先action类要实现ModelDrivern,然后重写getModel方法

--在action类中声明并创建接收表单参数的实体类(Student user = new Student())

--原理分析:struts2调用action类的getModel方法,得到user对象,然后利用user对象里面的set属性的方法,设置user对象的属性值

--注意,表单的参数name必须要跟Student的属性值一致,否则注入不进去。

(3)表达式驱动获取表单数据

--表单提交的时候要注明是哪个类的,比如user.name

--然后action类要生成user对象的get方法,可以让struts2获取到action中user对象,然后调用user对象里面的get set方法,把参数注入到user对象的属性中去。

--表达式驱动的方式的好处是,表单可以传递多个不同pojo的对象上来,比如不仅可以上传user的,也可以上传book的。这样,在表单中input中表明 name的时候,写上  user.xxx  book.xxx。

--表达式还支持  map 和 list 表单,可以同时上传多分一样的参数(不常用)

Map[“one”].name -> getMap<String , Student>

List[0].name    -> getList<Student>

下面的图是参考这货的

http://www.cnblogs.com/lolybj/tag/struts2/

6、把要显示的数据传给前端JSP页面

原理是利用到struts2的值栈空间,每一次request请求,都会重新创建出一个action类出来,然后在执行action类的方法之前,要经过一系列拦截器的拦截,比如ModelDrivern过滤器进行表单参数的注入。放行后才执行action方法。

以下是action类在值栈中设置数据的三种方法:

1、执行action方法的时候,可以获取ValueStack,并向ValueStack中插入数据。

2、直接在action类中定义pojo类,并创建好实例,生成get方法,方便jsp那边获取。

3、直接在action类中定义list对象,并将pojo类存入到list对象中去。

设置完之后,就会跳转到指定的jsp页面。

在指定的jsp页面中必须导入<%@ taglib uri="/struts-tags" prefix="s" %>

Struts2的表达式,其实这个表达式底层调用的是ognl表达式,所以一开始的时候要导入ognl表达式的jar包。

Jsp中获取值栈的数据。有3中方式

1、<s:property value=”插入值栈的变量名”/>

2、<s:iterator value=”list” >

<s:property value=”user.username”/>   //对象名称.对象属性

<s:property value=”user.password”/>

</s:iterator>

3、<s:iterator value=”list” var=”user”>

<s:property value=”#user.username”/>   //对象名称.对象属性

<s:property value=”#user.password”/>

</s:iterator>

第3种为什么要加#号,那是因为 iterator遍历的时候,先把list中的元素对象先存储到context的值栈空间里,context值栈空间的数据结构是map 的。所以要提供user作为键值,获取到user对象,然后根据对象的get方法,得到user的属性值。

这里要说明一下,action的值栈空间有两部分组织,一部分是root空间,数据类型是list类型的;另一部分是context空间,数据类型是map的。

7、最后是拦截器

拦截器和过滤器是不同的概念的东西;

过滤器:在容器上运行的,会过滤html、image... 网页文件。理论上是过滤所有的网页的

拦截器:只是拦截某一个action操作的

拦截器主要运用是 : AOP 和 责任链的设计模式。所以可以做到在创建action类对象后,但是在执行action方法之间执行。

Struts2学习总结(完整版)的更多相关文章

  1. AI工程师职业规划和学习路线完整版

    AI工程师职业规划和学习路线完整版   如何成为一名机器学习算法工程师 成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能 力,这些能力中的每一项掌握起来都需要足够的努力 ...

  2. 适合新手小白的UI学习路线完整版

    UI设计是很多年轻人活着想转行学习的人的新职业目标,越来越多的人看到UI设计良好的就业发展前景,纷纷投入到UI设计的大军中来,想学习UI设计,很多小白并不知道从何开始学起,用什么样的方法去学习,所以今 ...

  3. Android学习之基础知识十三 — 四大组件之服务详解第二讲(完整版的下载示例)

    上一讲学习了很多关于服务的使用技巧,但是当在真正的项目里需要用到服务的时候,可能还会有一些棘手的问题让你不知所措.接下来就来综合运用一下,尝试实现一下在服务中经常会使用到的功能——下载. 在这一讲我们 ...

  4. WEB前端开发职业学习路线初级完整版

    作者 | Jeskson 来源 | 达达前端小酒馆 下面小编专门为广大web前端开发职业者汇总了学习路线初级完整版,其实web前端开发工程师可算是高福利,高薪水的职业了,所以现在学习web前端开发的技 ...

  5. WEB学习路线2019完整版(附视频教程+网盘下载地址)

    WEB学习路线2019完整版(附视频教程+网盘下载地址).适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是 ...

  6. Python学习2——使用字符串(完整版)

    """ 在C语言入门的时候字符串没有好好学习,导致后期语言根本没有入门, 更导致之后大量的codeing时间浪费,效率低下. 因此,借助这次Python入门,好好地将字符 ...

  7. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...

  8. Linux学习总结(1)——Linux命令大全完整版

    Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...

  9. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  10. Android版的菜谱客户端应用源码完整版

    Android版的菜谱客户端应用源码完整版,这个文章是从安卓教程网转载过来的,不是本人的原创,希望能够帮到大家的学习吧. <ignore_js_op> 152936qc7jdnv6vo0c ...

随机推荐

  1. html 上下左右都居中

    给要居中的图片或者链接所在的div 设置例如以下属性 width: px; height: wd=px&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqI ...

  2. Iterating elements using NightWatchJS

    1) used the following strategy to iterate over DOM elements using Nightwatch: // Executing a functio ...

  3. 每日一招:如何才能在A股持续盈利?

    证券市场介入门槛低,是众多普通投资者希望实现自己的“中国梦”的首选场所,无论牛市熊市,源源不断的参与者前赴后继.在沪深A股这样一个大众市场,每年都在上演着七亏两平一赚的悲喜剧,赚钱的永远是少数人,但众 ...

  4. 小书匠markdown编辑器V1.0.12发布

    a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2p ...

  5. Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python

    Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 ...

  6. storm RollingTopWords 实时top-N计算任务窗口设计

    转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6381037.html 流式计算中我们经常会遇到需要将数据根据时间窗口进行批量统计的场景,窗口性质一 ...

  7. sersync简介与测试报告

    在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...

  8. iOS引用当前显示的UIAlertView

    UIAlertView在iOS里和一般的UIView不一样,有时候使用起来会有一些不便.特别要引用当前显示的UIAlertView的时候,就存在一些难度. 在iOS7以前,可以下面的代码可以解决这个问 ...

  9. php 微信开发之新增上传/获取下载临时素材

    php 微信开发之新增上传/获取下载临时素材 代码 <?php define("AppID","");//你的id define("AppSec ...

  10. iOS开发之 AES+Base64数据混合加密与解密

    2016-04-08 09:03 编辑: liubinqww 分类:iOS开发 来源:liubinqww 投稿 4 889     "APP的数据安全已经牵动着我们开发者的心,简单的MD5/ ...