Struts2入门基础
1. Struts2的认识
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为核心控制器(Controller)来建立模型与视图的数据交互。
Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。
Strust2主要有以下几点核心功能:
① 允许POJO(Plain Old Java Objects)对象 作为Action
② Action的execute 方法不再与Servlet API耦合,更易测试
③ 支持更多视图技术(JSP、FreeMarker、Velocity)
④ 基于Spring AOP思想的拦截器机制,更易扩展 AOP 面向切面编程
⑤ 更强大、更易用输入校验功能
⑥ 整合Ajax支持(局部刷新技术)
2. Struts2基于Hello World构建一个Web项目
2.1.下载Struts2
可以到Struts2官网进行下载Struts2版本:http://struts.apache.org/download.cgi
目前最新版本Struts2为2.5.22,这里使用Struts2 2.3.20版本为例进行构建项目。
下载完成后解压struts-2.3.20-all.zip即可。
这里说明一下Struts2的目录结构:
apps目录:主要包含基于Struts2的示例应用,对于初学者可以学习示例中的Demo进行项目构建;
docs目录:主要包含Struts2的相关文档,包括Struts2快速入门、Struts2API文档等;
lib目录:主要包含Struts2框架和核心类库,以及Struts2第三方插件类库;
src目录:主要包含Struts2框架的完整源代码
2.2.搭建一个Hello World项目并运行
①在解压后的struts-2.3.20的目录路径:\struts-2.3.20\apps\ struts2-blank.war,找到struts2-blank.war包进行解压,解压后在:\struts2-blank\WEB-INF\lib中找到对应的jar包,如下图所示:
在IDEA构建的web项目中引入这些jar包即可:
②在web.xml文件中配置核心控制器,在刚才解压的struts2-blank\WEB-INF\web.xml中拷贝web.xml文件,拷贝以下核心控制器部分及filter-mapping映射:
③创建Action类返回结果视图映射语句;
④配置struts.xml核心配置文件;
注意文件命名方式必须是struts.xml;可以在解压后的\struts2-blank\WEB-INF\classes\struts.xml中找到struts.xml,拷贝到项目中的src目录下,并做如下配置:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 6 <struts> 7 8 <package name="default" namespace="/" extends="struts-default"> 9 <!-- 10 name:action的名称 11 class:action类的全限定名 12 method:执行的方法 13 --> 14 <action name="hello" class="cn.yif.action.UserAction" method="excute"> 15 <!--result:结果视图 16 name:结果视图的名称,注意必须和action中excute方法的返回值对应 17 type:跳转的类型 18 /success.jsp:跳转到成功页面--> 19 <result name="success" type="dispatcher"> 20 /success.jsp 21 </result> 22 </action> 23 </package> 24 25 </struts>
3. Struts2的运行流程
通过前台页面uri路径hello,访问路径会经过web.xml中配置的struts2核心控制器,配置的url-pattern会对相应的路径进行拦截处理,由二级代理StrutsPrepareAndExecuteFilter定位到struts.xml文件,在struts.xml文件中找到对应hello所对应的Action,通过反射区去创建一个Action对象,在通过反射调用对应method中的方法,而我们的方法会返回一个String,这个String类型的结果对应struts.xml中结果视图的名称,这时会找到对应的结果视图,对应相应的结果视图类型type与结果视图的路径进行跳转。