Struts2框架学习
Struts2是SSH(Struts+Sping+Hibernate)三大框架之一,属于关注数据流程框架,是一款轻量级的MVC流程框架。
轻量级:指的是代码量少,运行时占用的资源少
MVC流程框架:指的是支持分层开发,控制数据的流程,从哪来,到哪里去,怎么来,怎么去的一个框架
主要内容,如图:
Struts2内容很多,就像搭建房子之前要搭建支架一样,所以它也被称为金属支架(在程序中表示起支撑作用的通用程序代码)
struts2是struts1与webWork的整合版,相对struts1的优缺点如下:
struts1缺点:
1.struts框架是基于servlet开发的,因此servlet暴露的问题,struts都有
2.struts框架的业务流程是固定的,扩展不方便
3.只支持动态视图JSP展示数据,对现在的SEO不友好
struts2改良:
1.核心基于Filter
2.流程支持动态扩展
3.支持多种动态视图展示数据(JSP、FreeMarker、Volicity)
快速搭建Struts2:
1.使用myeclilpse创建web项目,取项目名为Struts2_test(如下图)
2.准备必要的jar包,copy到lib目录以便项目引用,可以在Apache官网上下载,参考如以下图
3.在src目录下,新建struts.xml,刚开始只是普通的xml,填入以下代码后就成了Struts2框架的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
</struts>
4.在web.xml文件中,添加核心调度器的配置,一般都会过滤所有请求路径
<!-- 配置核心调度器,用于过滤请求路径 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
5.struts2工作流程
这是一位大神写的:
发送actin请求时,——>利用DefaultActionMapper,进行对URI的获取解析,例如访问哪个类,哪个方法,进行相关信息的解析后,——>Dispatcher(核心调度器)反射创建StrutsActionProxyFactory代理对象工厂,这里在反射创建我们要访问的类时,——>模仿了动态代理,创建了代理对象StrutsActionProxy和扩展对象DefaultActionInvocation,——>扩展对象又创建了我们的目标对象工厂,——>然后反射创建了我们想要访问的目标对象action。——>然后通过调用代理对象,执行扩展对象中的方法,——>执行我们框架默认的18个拦截器,——>反射调用访问action方法,——>获取执行后的结果result,——>最后进行相关界面或者action的指向。
个人觉得确实太麻烦,简单说:
接收到action请求,利用ActionMapper对URL进行解析,例如访问哪个类,哪个方法,进行相关信息的解析后,通过Dispatcher(核心调度器)反射生成ActionProxy代理对象工厂,然后通过各种代理各种反射之后,执行框架默认的18个拦截器,在struts.xml中找到对应的action,执行action指向的类里面的方法,最后进行相关界面或者action的跳转。