Struts2框架的概述:
什么是框架:
框架是一个软件的半成品,通过完成部分的功能.
什么是Struts2框架:
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2是一个基于MVC设计模式的WEB层框架.
* EE三层结构:WEB层,业务层,持久层.
* MVC与EE三层结构.由不同的时期,不同的人提出来.
WEB层的框架:
Struts1
WebWork
Struts2
SpringMVC
----WEB层框架的特点:(前端控制器模式:)
从客户端的每次请求都会到达前端控制器(核心过滤器):在前端控制器中完成部分功能代码,具体的代码会被分发到不同的Action中进行处理.
Struts2和Struts1的区别:
Struts2核心是webwork.
Struts2和Struts1除了名称相近之外没有太大联系.
Struts2的目录结构:
* apps :Struts2提供一些应用.war:web项目打包成war格式.java工程打包成jar格式.
* docs :Struts2的开发文档.
* lib :Struts2的开发的jar包.
* src :Struts2的源码.
struts2创建过程:
----1.创建一个Web工程:
----2.引入相应的jar包:
struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib
* 引入提供的空的应用中的所有的jar包:
----3.编写一个JSP的页面:
<h1>Struts2的入门案例</h1>
<h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门</a></h3>
----4.配置Struts2的核心过滤器:(前端控制器)
1 2 3 4 5 6 7 8 9 | |
-----5.编写一个Action类
配置Action类:(在Struts2框架的配置文件中进行配置)
1 2 3 4 5 6 7 8 9 | |
----6.编写一个success.jsp
Struts2的执行的流程:
从客户端发送请求---》先经过核心过滤器:(StrutsPrepareAndExecuteFilter).----》执行一组拦截器(完成了部分功能)-----》执行目标Action------》跳转到结果页面.
配置文件的加载顺序:
创建了StrutsPrepareAndExecuteFilter的时候,在init方法中执行Dispatcher中的init方法:
init_DefaultProperties(); // [1] ----加载org/apache/struts2/default:default.properties
init_TraditionalXmlConfigurations(); // [2] ----加载struts-default.xml,struts-plugin.xml,struts.xml
init_LegacyStrutsProperties(); // [3] ----加载自定义struts.properties
init_CustomConfigurationProviders(); // [5] ----加载用户配置提供
init_FilterInitParameters() ; // [6] ----加载web.xml
init_AliasStandardObjects() ; // [7] ----加载Bean
default.properties
struts-default.xml
struts-plugin.xml
strtus.xml
struts.properties
web.xml
因为这个三个配置文件都可以修改struts2中常量:后加载的修改的常量会生效!!!
Struts2的常见配置:
<package>:包.
包的概念
Java中包:用来区分类重名的问题.
Struts2中包:用来管理<action>
<package>中属性:
* name :包的名称.名称需要时唯一的.
* extends :继承.代表当前的包继承其他的包.一般都继承struts-default包(struts2框架提供的.).
* namespace :名称空间.名称空间与<action>中的name属性共同决定的访问路径.
* namespace的取值:
* namespace=”” :默认值.默认名称空间
* namespace=”/” :跟名称空间.
* namespace=”/aaa/bbb” :带名称的名称空间.
* 名称空间的访问顺序:
* 如果访问路径中有名称空间,访问带有名称空间的action.如果访问路径中没有名称空间,先会去跟名称空间下查询.去默认的名称空间下查询.
* 访问的过程中有名称空间最大化的原则:
* abstract :抽象的.(了解).如果包是abstract=”true”.那么这个包可以被其他包继承的.
<action>的配置:
<action>的属性:
* name :与<package>中namespace共同决定action的访问路径.
* class :Action类的全路径.
* method :执行Action中哪个方法.默认值execute
默认的Action和Action的默认处理类:
默认的Action :当访问一个路径不存在的Action的时候,正常会报404.可以配置一个默认的Action.访问一个找不到的路径的时候,就会执行默认的Action:
* <default-action-ref name="hello"/>
Action的默认处理类 :路径可以找到,但是class属性没有配置.
* <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
<result>的配置:
<result>的属性:
* name :逻辑视图名称.
* type :跳转的方式.
常量的配置:
***** Struts2常量定义在 default.properties
修改常量可以在哪几个文件中修改:
struts.xml (推荐在文件中修改常量.)
* 格式:<constant name="" value=""/>
struts.properties
* 格式:key=value
web.xml
* 格式:
1 2 3 4 5 6 7 8 | |
***** 后加载配置文件修改的常量会将先加载的配置文件修改的常量覆盖.
常见的常量:
* struts.i18n.encoding=UTF-8 :在Struts2使用UTF-8字符集.在提交数据采用POST方式的时候中文乱码不需要进行处理了.
* struts.action.extension=action,, :Struts2的默认扩展名.默认值action,, 默认值是action或者不写.
修改常量:
<constant name="struts.action.extension" value="do"/>
<constant name="struts.devMode" value="true"/>
包含<include>的配置:
包含其他模块的配置文件:
<include file="cn/itcast/struts2/demo1/struts_demo1.xml"/>
访问action的三种方法:
----1、一个action对应一个方法,直接访问
----2、使用通配符的形式完成Action的访问:(*****)
条件:
* 执行的方法要和访问的路径有一定关系!!!
----3、动态方法访问.(***)
条件:
必须开启sruts2的中一个常量!!!
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
动态方法访问的格式:
* Action的访问路径!方法名.action
结果页面<result>的配置的类型:
<result>标签:
* name :逻辑视图名称默认值是success.
* type :类型.
* dispatcher :默认值.转发.(转发到JSP)
* redirect :重定向.(重定向到JSP)
* chain :转发.转发到一个Action.
* redirectAction :重定向到Action.
* stream :文件下载的时候使用的.
Servlet是单例的:
第一次请求会创建Servlet的对象的实例,以后每次访问都使用的是同一个Servlet的实例.出现线程安全的问题.
Action是多例的:
每次请求都会创建一个新的Action的实例.不会出现线程安全的问题.