Struts是什么?
翻译:支柱,支干,来源于旧建筑和旧式飞机使用的金属支架
Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。
使用Struts的目的
为了帮助我们减少在运用MVC设计模型来开发Web应用时间。
MVC模式
JSP+JavaBean=Model-1:适用于小型网站的开发
JSP+Servlet+JavaBean=Model-2:最典型的MVC模式
MVC是模型(Model)、视图(View)和控制器(Controller)的缩写;MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。在Struts中,Controller就是action,JSP为View,JavaBean为Model。
Struts实例程序创建步骤
(工具Myeclipse10+tomcat7+jdk1.8):
1、创建Web Project
2、导入jar包,在src下建立struts.xml
可在下面网址下载jar包
Struts官方网站:http://struts.apache.org/
历史版本:http://archive.apache.org/dist/struts/
向工程中导入jar包
Struts2的基础包
1.、commons-fileupload(上传下载包);
2、commons-io(输入输出包);
3、commons-lang 3-3.2(基础包);
4、commons-logging(日志包);
5、freemarker(模板引擎,通过模板生成文本输出的通用工具);6、structs2-core(核心包);
7、xwork-core(一些类基于xwork);
8、ognl(表达式);
9、javassist-3.11.0.GA.jar(解析java类文件的一个包)
3、打开web.xml,添加
<filter>
<filter-name>[过滤器名]</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>[过滤器名]</filter-name>
<url-pattern>/*</url-pattern>
<!-- /*代表过滤所有路径 -->
</filter-mapping>
4、打开struts.xml,假如文档类型定义DTD(用myeclipse直接添加struts可以不用添加jar包)
如果使用的是上面添加的2.3的jar包版本DTD为
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
5、创建action,新建class(命名hello)继承ActionSupport类,默认执行ActionSupport的execute() 执行成功返回SUCCESS.
6、在struts.xml中配置action
<package name="default" namespace="/" extends="struts-default">
<!-- package name="default" 是默认包名,可以自定义,用于被其他包继承
namespace="/" 命名空间,可以指定可以默认
extends="default" 该包所继承的包
-->
<action name="hello" method="" class="包全名.hello">
<result name="">/result.jsp</result>
<!-- result 的name默认是SUCCESS 也可以是其他action中传回的字符串 -->
</action>
</package>
7、在WebRoot下创建result.jsp
8、发布运行项目,打开浏览器访问http://localhost:8080/[项目名]/hello.action。
Struts2工作原理
1.客户端通过httpservletrequest向servlet容器,也就是tomcat提交一个请求,
2.这个请求,会经过一些列的过滤器,如ActionContentClearUp过滤器,最终被struts核心过滤器过滤,
也就是FilterDispatcher
3.从struts2.1.3版本以后struts的核心控制器发生了变化,变成了PrepqreAndExecuteFiletr,核心过滤器过滤以后,可以让用户在准备和执行之间写一些自己的过滤器
4.调用访问ActionMapping,决定是否调用某一action,
5.如果action请求的是jsp页面或者是其他资源,不会调用某一action,
6.如果决定调用某一action,ActionMapping会将控制权委派给ActionProxy也叫action代理,
7.这是action代理会通过一个Configuration Manager也就是配置管理器对象加载struts核心配置文件,也就是struts.xml。
8.如果在struts.xml找到需要创建的action,ActionProxy会创建一个Action Invocation实例,action Invocation包括一些列的拦截器和action,
9.先顺序执行一系列的拦截器,然后执行action处理,
10.返回一个结果,通过result返回一个视图或者调用另外某个action。
11.当返回这个视图以后,将之前执行过的拦截器反向执行一遍,
12.然后通过response响应客户端的请求。