在学习Struts2之前先来了解一下什么是Struts2:
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
---------摘自百度百科
Struts2 与Struts1的区别:
struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看:
- 从体系结构来看:struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性;而struts1.x在action中明显的侵入了servlet-api.
- 从线程安全分析:struts2.x是线程安全的,每一个对象产生一个实例,避免了线程安全问题;而struts1.x在action中属于单线程。
- 性能方面:struts2.x测试可以脱离web容器,而struts1.x依赖servlet-api,测试需要依赖web容器。
- 请求参数封装对比:struts2.x使用ModelDriven模式,这样我们 直接 封装model对象,无需要继承任何struts2的基类,避免了侵入性。
- 标签的优势:标签库几乎可以完全替代JSTL的标签库,并且 struts2.x支持强大的ognl表达式。
当然,struts2和struts1相比,在 文件上传,数据校验 等方面也 方便了好多。在这就不详谈了。
搭建Struts2开发环境
Struts2官网:
https://struts.apache.org/
Struts2相关jar包下载地址:
http://struts.apache.org/download.cgi
使用Eclipse的同学可以在这里选择下载所有的jar包文件,将其导入到项目中去,这样准备工作就完成了。
接下来演示使用IDEA来搭建Struts2开发环境
首先打开IDEA,选择新建工程
选择Java EE中的Struts2.注意这里假如本地没有lib包的话会自动从网上下载,也可以选择稍后设置。
选择next
点击Finish即可
相关的依赖文件会自动从网上下载
等待依赖文件下载完成后,项目就搭建完成
其中:
自动生成的struts.xml文件内容为:
介绍一下其中的主要标签:
自动生成的web.xml文件内容为:
Struts2 Hello World程序创建
先介绍一个演示程序所完成的功能:
我们在一个表单中进行登录界面的编写,但不同于以往的登录界面,我们这次使用Struts2来完成这些功能。
首先在web文件夹下编写对应的jsp界面
index.jsp
登录成功界面success.jsp
登录失败界面fail.jsp
接下来是对应的Action功能编写LoginAction.java
接下来便是Struts2的核心所在,即struts.xml配置文件编写
将程序发布到tomcat中去,观察运行结果
可以看到只需配置struts.xml文件而不用像以前那样进行servlet的编写从而进行请求转发到对应界面。
极大的降低了程序之间的耦合度同时方便开发。
那么我们便来分析下在这个例子中程序走向流转
首先介绍下Http请求的流转过程:
1.可以看到一个Http请求首先会被web.xml所处理,在web.xml中首先会被过滤器所拦截
2.通过Struts2所设置的默认过滤器便将请求转发到struts.xml中去处理
3.我们在struts.xml中配置了相关的前置拦截器,那么前置拦截器便会对所设置的请求进行处理(例如我们所设置的.do请求以及默认的.action请求)
4.然后根据设置的url将请求转到所对应的Action类中去,在Action类中进行逻辑处理并返回一个字符串标志
5.假如配置了对应的后置拦截器则会转到后置拦截器的业务处理逻辑中去。
6.接下来struts.xml便会根据返回的字符串从而跳转到相应的结果界面。
7.进而显示给用户所需的界面。
而在我们上面的那个例子中的数据流转又是如何的呢,那么我们便来看一看
这样,我们就完成了一个简单的Struts2的演示程序。