一、struts简介
struts时Apache软件基金会赞助的一个开源项目,最初只是jakartal项目的一个子项目。struts通过javaServlet/JSP技术,实现了基于javaEEWeb应用的MVC设计模式的应用框架,是MVC设计模式的一个经典产品。
struts成立的目的是为了减少程序员开发的时间,项目的创建者认为原来JSP和servlet虽然可以帮助用户解决大部分的问题,但是编码对项目的开发产生了许多的不便,可重用性差,所以struts应运而生。struts框架提供了如下服务:
(1)作为控制器的Servlet;
(2)提供大量标签库;
(3)提供来了用于国际化的框架,可以利用配置文件帮助用户选择适合自己国家的语言;
(4)提供了jdbc的实现,可以定义数据库源和数据库连接池;
(5)XML语言分析工具;
(6)文件下载机制。
二、struts的配置文件struts.xml
struts.xml是我们在使用struts框架进行开发最重要的配置文件,接下来对此配置文件中的常用标签进行介绍。
1.<constant>标签
在struts框架中的struts.properties配置文件中定义的属性,在struts.xml文件就是通过<constant>标签进行配置的。[XML] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"struts-2.3.dtd" >
<struts>
<!-- 开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 后缀的配置:演示配置文件的加载顺序 -->
<constant name="struts.action.extension" value="do"></constant>
<!--设置编码形式为utf-8-->
<constant name="struts.i18n.encoding" value="UTF-8"/>
</struts>
2.<package>标签
在struts框架中包来管理action、result、interceptor等配置信息,包的属性如下:
属性 | 是否必需 | 描述 | name | 是 | 包名,作为包的标识 | extends | 否 | 设置包继承其他包 | namespace
| 否 | 命名空间 | abstract | 否 | 是否设置为抽象包 |
2.1关于extends属性的理解
当一个包通过配置extends属性继承另外一个包时,这个包就会继承父包中所有的配置,包括action、result、interceptor等;由于包的信息的获取是按照配置文件的先后顺序进行的,所以父包需要在子包之前被定义,通常我们在配置struts.xml文件时,都会继承一个叫“struts-default”的包,这是struts框架默认内置的包,只有继承这个包,才能使用struts框架的内置功能。
2.2关于namespace属性的理解
在开发项目时,一般都是分模块进行开发,为了解决项目中Action命名重复的问题,namespace产生了,它使得项目可以在不同的命名空间使用相同action名。
3.<action>与<result>标签
我们可以通过下面两张表来理解两个标签的使用:
3.1<action>属性介绍
属性 | 是否必需 | 描述 | name | 是 | 请求的Action名称 | class | 否 | Action处理类的路径 | method | 否 | 指定处理Action的方法 | converter | 否 | 制定Action使用类型的转换器 | 注:<action>标签必需在<package>里面写,而没有指定method则默认执行Action中的execute方法。
3.2<result>属性介绍
属性 | 是否必需 | 描述 | name | 否 | 对应Action返回逻辑视图名称,默认是success | type | 否 | 返回的结果类型,默认是dispatcher |
例子:
[XML] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="p1" extends="struts-default">
<action name="hello" class="cn.itcast.action.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/succ.jsp</result>
</action>
</package>
</struts>
4.<interceptors>标签
通过此标签可以向struts框架中注册拦截器或者拦截器栈,一般多用于自定义的拦截器或拦截器栈的注册,使用方法如下:
[XML] 纯文本查看 复制代码 <interceptors>
<interceptor name="拦截器名" class="拦截器类"/>
<interceptor-stack name="拦截器栈名">
<interceptor-ref name="拦截器名">
</interceptor-stack>
</interceptors>
通过<interceptor>标签可以为其所在的Action添加拦截器功能。当为某个Action单独添加拦截器功能后,<default-interceptor-ref>中所指定的拦截器将不再对这个Action起作用。
5.<global-results>标签
此标签主要可以设置包范围内的全局结果集,在项目中如果遇到多个Action返回相同的逻辑视图的情况下,可以通过此标签统一配置这些视图:
[XML] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"struts-2.3.dtd" >
<struts>
<package name="default" extends="struts-default">
<global-results>
<result name="success">/success.jsp</result>
<result name="login">/login.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
</package>
</struts>
|