Struts2入门
1. struts2历史简述
struts出现已经很久了,2006年底~2007年初发布了2.0GA版(稳定版),struts1与struts2他们之间除了名字一样之外其它都不一样,struts2本身主要基于webwork,struts1与webwork合并成struts2,底层使用webwork
现在企业如果用struts的话,基本只用struts2 ,(如果jsp/servlet原理掌握了之后学习MVC类的框架就很容易了)
struts2依赖于其它很多库,例如XWORK(很核心的东西,在这基础之上进行扩展),还有OGNL语言
struts2是一种前端到服务器端交互的一种框架,比较偏前端
struts2不像servlet是单实例的,它是多例的
2. struts2的作用
我们都知道传统的servlet编程具有如下几个步骤:
- 获取请求参数值
- 封装到javaBean
- 调用service层服务
- 接收service层返回的数据,如果有必要的话对该数据进行加工
- 选择对应的视图来显示这些数据
初步感觉,struts2的主要作用是起到了1、2、5。即接受请求数据并封装到javaBean,然后跳转到对应的视图来显示这些数据
3. MVC优点
-
最重要的一点,多个视图能共享一个模型,同一个模型可以被不同的视图重用,大大提高了代码的可重用性,哪怕不是一个web项目,只是一个桌面应用,我们只需要将service层之上的东西改一下就可以了,service层之下的东西改都不用改
-
由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的组件,【例如:service层改了,根据需求把某个参数改了,对Dao层是不会有任何影响的,上层只是会访问下层给它提供的这种服务,下层是绝对不会访问上层的,对上层一无所知,也不知道是web应用还是桌面应用,严格单向依赖关系】
-
此外,控制器提高了应用程序的灵活性和可配置性,控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段
4. 快速搭建struts2环境
-
首先在myeclipse中新建一个web工程
-
然后导入能成功启动struts2的最少jar包,如下图所示:
-
编写web.xml文件,因为struts2是以Filter的方式来将自己纳入到web应用中的:
web.xml配置.png
-
编写一个login.jsp文件:
- 编写一个action:
- 在src目录下编写一个struts.xml文件,该文件是struts的核心文件:
- 编写一个result.jsp文件,用于显示结果:
- 测试:
首先访问web应用并输入用户名和密码,如下图所示:
测试_login.jsp.png点击提交后,显示如下结果:
测试_result.jsp.png- 至此,我们整个strust框架就简单的跑通了
5. struts2的执行流程
-
由于struts2是通过Filter来将自己纳入到web应用中的,而Filter在web应用启动的时候就会被实例化,在这个时机里,struts2会去解析struts-default.xml、struts-plugin.xml以及struts.xml文件,为之后的请求处理做好充足准备
-
当客户端向服务器端发出一个http请求的时候,就会被struts2的
StrutsPrepareAndExecuteFilter
过滤器所拦截到, 然后它会去查看struts.xml文件,寻找与该请求所匹配的action -
找到action后,将其实例化,并将请求参数值赋予到该action所对应的属性中(这里强调一点,是通过set方法来赋值的,所以与属性名无关,在参数传递之前会调用struts组件来进行类型转换,以便顺利调用方法)
-
自动赋值完成后,会将这些参数值存入到request作用域中
-
调用action中的execute方法,获得一个字符串结果
-
通过该字符串结果,在struts.xml中寻找到与之对应的result,默认通过forward的方式进行跳转
6. struts2中的package介绍
一个package可以有多个action,一个struts可以有多个package,package作用和java中包的概念类似,起到分门别类的作用,package中的name属性只要起的有意义就行,而extends是一个很重要的属性,因为package也支持继承概念和java一样,struts-default也是一个package,它里面的东西也可以完全的被继承下来,之所以那些值能自动赋值是因为struts-default包下有一系列组件来完成该功能的,我们继承过来后,当前package就有此功能了
7. 使用myeclipse生成struts2的帮助文档
-
首先新建一个java工程
-
导入struts2下的源码到myeclipse如下图所示:
- 发现有一系列的报错,很正常,因为之前就讲过struts2依赖很多的库,因此我们要将struts2所依赖的jar包导入进来 (struts2-core-2.2.1.1除外,因为我们已经导入了该源码)
- 导入struts2所需依赖的jar包后的工程状态如下图所示:
还有一处报错,是因为该包下的类引用了HttpServletRequest类,而我们还没有导入该jar包,从tomcat\lib目录下找到servlet-api与jsp-api并将其导入到该工程下,这时候myeclipse对于该工程就没有提示任何报错了
jar包导入完毕后的工程状态.png- 使用myeclipse下的javadoc命令来生成帮助文档即可:
8. struts2对于配置文件的解析顺序
- struts-default.xml
- struts-plugin.xml
- struts.xml
这样的解析顺序也是非常符合逻辑的,因为我们自定义的struts.xml中一定会有个性化的配置,而托这解析顺序的福,我们可以将struts-default.xml中一些配置进行覆盖,从而来实现我们的需求
9. 总结
在学习struts框架之前一定要掌握jsp/servlet,否则会越学越慌张,越学越不知所措,勿在浮沙筑高台
10. 内容引用来源
<<张龙J2EE视频>>