一、执行Struts框架
客户端 ---- 请求 ----- Struts框架
---------------------------- 过滤器 Interceptor
---------------------------- Action
------------------调用JavaBean、Dao 等访问数据库等操作
-------------------根据执行情况返回结果类型,同时把需要返回的数据作为Action的属性进行赋值
-------------------框架根据返回结果类型,把内容交给jsp页面、或者其他模板
-------------------模板根据数据生成返回结果
---------------------------- 过滤器 Interceptor
客户端 ------回执------- Struts
整个过程通过Struts.xml和struts引入的其他配置文件一起控制
1、 Action
2、 Inteceptor
3、 result
使用Struts框架后,所有动态的内容都通过Action进行处理
所有的请求都会经过Inteceptor ---- Struts内置了一系列过滤器可以完成:
参数读取【fileupload例外】 *
文件上传 【使用 apache file upload inteceptor】 *
字符集转换
结果集转换
......
二、配置文件
1、内置配置文件 struts-default.xml
result-types 定义了struts自己支持的所有结果类型
interceptors 定义了struts可以使用的所有Interceptor【我们可以定义自己的interceptors】
default-interceptor-ref 缺省拦截使用的过滤器的栈
不包括具体的Action
2、系统配置文件 struts.properties
定义Struts里面的常量 例如
struts.enable.DynamicMethodInvocation=false 动态方法调用
struts.devMode=false 以开发模式运行
三、Struts配置文件结构配置
1、struts.xml的结构
保留内容
---------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
---------------------------------------------------------------------------
修改内容
---------------------------------------------------------------------------
<package>[0-n]
<action>[0-n]
<result>[0-n]
-------------------------------------
package定义 struts-default 实际上是uri
name="用来唯一标示package" extends="继承的package定义" namespace="/">
action定义
name="用来提供给客户端访问的表示[服务器段转发也可以用],在同一个namespace/package中是一个唯一标示" 一定会有
class="com.cstp.struts.demo.StrutsDemo" 该Action的实现类,该类必须从AbstractAction中继承下来 如果没有,直接到result
method="DoTest" 调用该Action的时候执行的方法 如果没有定义,执行execute
result定义
name="*" 用来匹配从Action的方法调用中得到的返回值,如果是* 任何返回使用该result,如没有,任何返回都不用该result
type="dispatcher"
Result的类型,forward、redirect.... struts-default.xml中的所有result-type中定义的name都可以使用
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
------------------------------------------------------------------------------
保留内容
</struts>
2、struts.properties的配置
########注释
# 扩展名配置
# 缺省为 action
# ,do,action
struts.action.extension=baoding,do,action,,
##########
#Struts缺省字符集编码
#国际化的时候使用
struts.i18n.encoding=UTF-8
struts.locale=en_US
#zh_CN
#UTF-8
# I18N 国际化
# I1xN 本地化
################
# 反射注入/对象容器
# Spring+Struts
# IOC
# 缺省情况,使用com.opensymphony.xwork2.ObjectFactory的Struts子类org.apache.struts2.impl.StrutsObjectFactory
# 使用spring的时候,需要指明:struts.objectFactory=spring
################
# 动态方法调用
# 就是是否支持 ActionName!MethodName.do的方式进行调用
struts.enable.DynamicMethodInvocation=true
################
# 动态方法调用
# 就是是否支持通过参数得到Action的类名称进行调用的方式
# <action name="*/*" method="{1}" class="com.cstp.baoding.action.demo.{2}">
struts.enable.SlashesInActionNames=true
####################################
#是否开发模式运行,相当于两个配置项
#struts.i18n.reload=true 自动重新加载i18n的配置文件[实际上就是它对应的properties文件]
#struts.configuration.xml.reload=true 自动重新加载Struts.xml、Struts.properties文件
struts.devMode=false
struts.custom.i18n.resources=file1,file2...
#需要使用Struts的国际化标签才可以体现出来
#file.properties file_fr.pr... file_zh_CN.properties
###################################
#与界面相关的配置 Struts标签有关
# 模板
# 模板类型
struts.ui.theme=xhtml
# 模板路径
struts.ui.templeteDir=templete
# 模板扩展名
struts.ui.templeteSuffix=ftl
#在使用Struts自定标签或者Struts模板引擎的时候会涉及到上面三个配置项
#使用Struts标签中有关url的操作使用的参数
struts.url.http.port=80
struts.url.https.port=433
struts.url.includeParams=get/post/none
##################
#文件上传 ......拦截器会直接调用下列配置项,
#multipart 类型数据的解析器---就是文件上传的使用用来传输数据的类型
struts.multipart.parser=jakarta
struts.multipart.saveDir=./upload
struts.multipart.maxSize=1024
3、struts-plugin.xml 配置Struts插件
4、velocity.properties 配置Struts中页面使用的模板 位置:/WEB-INF/classes/
四、简单struts所需jar包
commons-fileupload-1.2.1.jar inteceptor 中的文件上传必须用到的第三方库
commons-io-1.3.2.jar IO操作需要的
commons-logging-1.1.jar 记录日志所需要的
freemarker-2.3.13.jar freemarker 模板引擎 --- .vm
junit-3.8.1.jar java测试框架
ognl-2.6.11.jar 语言解释器
struts2-core-2.1.6.jar struts的核心库
xwork-2.1.2.jar webwork的类库【struts 2 的父版本】
// spring-test-2.5.6.jar Spring测试库 - 内置了Spring的struts2-spring-plugin-2.1.6.jar 插件,可以无缝整合
五、建立一个简单的struts程序步骤
1 、导入 8 个 jar文件
2、 建立 struts.xml配置文件
3、 配置struts具体内容
建立package[注意namespace和extends]
建立自己的Action配置项
4、 建立自己的Action
AbstractAction中继承下来
定义方法,返回值必须是String 可见性必须是 public