一、stuts工作原理:
1、web.xml中的设置如下
<servlet>
<servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
servlet定义了系统中需要用到的servlet的访问标签,类名、初始化参数和加载顺序
servlet-name:定义了访问servlet时使用的标签
servlet-class:指出了servlet所在的类名(包括包名)
init-param:初始化servlet时需要的参数,在servlet中可以使用getServletConfig().getInitParameter("config")方法取得传进去的参数。也可使用形如“config/XXX”的形式定义子应用。
load-on-startup:定义了servlet容器加载servlet的顺序。只可以设置正整数和0,当输入非数字、负数或没有设置时servlet容器在真正用到servlet时以任意顺序加载。当设置为正整数时,在容器启动时加载,数字小的在数字大的前面加载。
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
servlet-mapping:定义了容器在分发用户请求时使用的规则。上例就说明,当容器接收到已.do结尾的请求时,调用action servlet来处理!
servlet-name:申明了需要调用的servlet的标签
url-pattern:定义了容器在分发用户请求时匹配的格式。现在只知道可以使用*.XX和/XX两种
注:如果希望替换struts默认的ActionServlet可以在这里自己定义,替换掉servlet-class就可以了
2、struts-config.xml的配置
<controller contentType="text/xml;charset=UTF-8"
debug="0"
locale="true"
nocache="true"
processorClass="jp.co.nttdata.terasoluna.framework. web.richclient.RequestProcessorEx"/>
定义了由ActionServlet调用的RequestProcessor类,RequestProcessor类完成所有struts中请求分发。
3、多重子应用
在Struts 1.1中可以定义和支持多重的子应用。这意味着你能将你的应用放在更易维护的子应用中。你不再需要在唯一的struts-config.xml文件之外检测来源控制。
另一个使用子应用的原因是根据客户而改变的控制流。在某些应用中,你可能有一些通用的页面,但是控制流也许会由于登陆应用的客户的不同而有所改变。你能把这个控制流的元数据存入数据库并生成web.xml文件(或该文件中的一部分),与不同的struts-config.xml文件一起。
如果你曾对Struts 1.x 进行过开发,你可能注意到了许多web.xml文件中的元素已经移到了Struts 1.1的struts- config.xml文件中。这是因为现在他们是应用特定(application-specific)的。多重的子应用通过在请求URI的相对于上下文 部分开始的前缀来确定。如果没有应用前缀能够匹配,则选择默认配置。默认设置拥有一个空字符串的前缀。执行默认设置的这种方式对可能只定义一个应用的 Struts 1.0.x是向后兼容的。
如果你拥有一个包含不同功能模块的大型应用,那么用协同运行的子应用代替一个巨大的应用会更有意义。 当使用子应用时,你可能定义上下文相关的请求URI来指定使用哪一个子应用。
4、Jakarta通用库的集成
Struts
工具包可以解决在创建
Web
应用时不断出现的问题。这个包中的大部分类不依赖于控制器
Servlet
框架或定制的标记库,因此它们可被用于一般的
Java
应用编程。在
Struts 1.1
版本中,这个包中的许多类被移植到
Jakarta
的公共项目中。这些类包括
Bean
工具,
Colections
,以及
Digester
包。
Struts
中提供的
logging
实际上来自于公共项目
.
org.apache.commons.beanutils
组件封装了
Java
的
Reflection
与
Introspection
应用编程接口(
API
)。使用
beanutils
包中的类,可在未知方法名编译的 情况下动态的调用
getter
与
setter
方法。这些类用
Struts
的定制标记库调用,因此可以为你的应用定义附加的定制标记,你也许想要进一步了解 这个包中的可用内容。表
1
列出了这些。
表1:Struts 1.1中的通用包
BeanUtils 通过反射组装JavaBeans属性
ConvertUtils 将字符串值转换为指定类的对象
MappedPropertyDescriptor 描述与映射属性
MethodUtils 集中于大体的方法上而不是属性等细节上
PropertyUtils 使用Java Reflection应用编程接口(API)对一般属性进行setter(设置值)与getter(获取值)操作
Digester 包提供了基于XML文档的规则。
这么做对读取配置文件非常重要,便于正确的初始化对象。这个包可是你非常简单的完成这些事否则就需要你更深入地了解
DOM
或
SAX
的处理。当
XML
中的模式被验证后,这些可通过指定了规则的对象映射模块来完成。这包括嵌入你自己模式匹配的引擎的能力,合法命名空间的处理,以及用于多应用并且封装了规则的
RuleSets
。
如果你明确的读取XML文件别需要映射为适当的Java对象,Digester包是十分有用的。