Struts应用采用两个基于XML的配置文件来配置分别是webxml和strutscofigxml文件webxml文件是配置所有web应用的而strutsconfigxml文件是struts专用的配置文件事实上也是可以根据需要给这个配置文件起其他名称的
Web应用的发布描述文件:
web应用发布描述文件可以在应用开着者发布者和组装者之间传递配置信息Web容器在启动的时候从该文件中读取配置信息根据它来装载和配置web应用文档类型定义DTD对XML文档的格式做了定义DTD吧XML文档划分为元素属性实体每一种XML文档都有独自的DTD文件可以从网上下载<webapp>元素是webxml的根元素其他元素必须嵌入在<webapp>元素之内要注意的是子元素也是有顺序的比如必须是首先<servlet>然后<servletmapping>最后<taglib>
为Struts应用配置Webxml文件:
首先最重要的一步是配置ActionServlet这个用<servlet>标签的servletname属性起一个名字叫action然后用servletclass属性指定ActionServlet的类
然后用<servletmapping>标签的servletname属性指定action在用urlpattern指定接收范围是*do的请求不管应用中包含了多少子应用都只需要配置一个ActionServlet类来出来应用中的不同的功能其实者就是不必要的因为Servlet本身就是多线程的而且目前Struts只允许配置一个ActionServlet声明ActionServlet的初始化参数:<servlet>的<initparam>子元素用来配置Servlet的初始化参数paramname设置config参数名paramvalue设置strutsconfigxml的路径参数值
配置欢迎使用清单:
如果客户访问Web的时候值是访问了WEB应用的根目录URL没有具体的指定文件Web会自动调用Web的欢迎文件<welcomefilelist>元素来配置的通过其中的<welcomefile>欢迎页面</welcomefile>来配置
配置错误处理:
尽管Struts框架功能强大的错误处理机制但是不能保证处理所有的错误或者异常当错误发生时如果框架不能处理这种错误把错误抛弃给Web容器在默认的情况下web容器会想客户端返回错误信息如果想避免让客户看到原始的错误信息可以在Web应用发布描述文件中配置<errorpage>元素通过<errorcode>来定义错误的类型然后通过<location>要处理错误的JSP页面来对错误进行处理还可以用<exceptiontype>来设置异常然后通过<location>来处理异常的JSP页面来处理异常
配置Struts标签库:
这个就和以前学到的JSP自定义标签类似配置元素为<taglib>来配置<tagliburi>这个指定标签库的uri类似起一个名称<tagliblocation>这个是标签库的位置也就是实际所在的路径通过这样的方法引入一个标签库然后在前台JSP页面就可以通过自己定义的URI来调用标签
Struts配置文件:
strutsconfigxml文件
首先研讨一下onfig包在struts应用启动的时候会把Struts配置文件信息读取到内存中并把它们存放在config包中相关的JavaBean类的实例中包中的每一个类都和struts配置文件中特定的配置元素对应ModuleConfig在Struts框架中扮演了十分重要的角色它是整个config包的核心在Struts运行时来存放整个应用的配置信息如果有多个子应用都会有一个ModuleConfig对象它和Struts文件根元素的<strutsconfig>对应根元素中包含<formbean><action><forward>等元素
<strutsconfig>元素:时Struts配置文件的根元素和它对应的配置类ModuleConfig类<strutsconfig>元素有个子元素他们的DTD定义是datasources?formbean? globalexception?globalforwards?actionmapping?controller?messageresources?plugin*在Struts配置文件中必须按照DTD指定的先手顺序来配置<strutsconfig>元素的各个子元素如果颠倒了这些子元素的顺序会产生错误
<datasources>元素:用来配置应用所需要的数据源数据源负责创建和特定的数据库的连接许多数据源采用连接池的机制实现以便提高数据库访问的性能JAVA语言提供了javaxsqlDataSource接口所有的数据源都必须实现这个接口许多应用服务器和Web服务器都提供了数据源组件很多数据库厂商也提供了数据源的实现<datasources>元素包含多个<datasource>子元素永远配置特定的数据源他们可以包含多个<setproperty>子元素用于设置数据源的各种属性配置了数据源以后就可以在Action类中访问数据源在Action中定义了getDataSource(HttpRequest)方法用于获取数据源对象的引用然后可以利用DataSource对象调用getConnection获取一个连接对象对数据库进行操作在配置文件中声明多个数据源的时候需要为每一个数据源分配唯一的Key值通过这个来表示特定的数据源获取特定的数据源的时候可以用dataSource = getDataSource(reqeustA);
<formbeans>元素:用来配置多个ActionForm包含一个或者N个<formbean>子元素每个<formbean>元素都包含多个属性className指定和<formbean>匹配的类name指定该ActionForm的唯一标识符这个属性是必须的以后作为引用使用type指定ActionForm类的完整类名这个属性也是必须的注意包名也要加上<formproperty>是指定动态的Form的元素以后会深入了解
<globalexception>元素:用于配置异常处理元素可以包含一个或者多个<exception>元素用来设置JAVA异常和异常处理类ExceptionHandler之间的映射className指定和元素对应的配置类默认的不用动handler指定异常处理类默认是ExceptionHandlerkey指定在本地资源文件中异常的消息Keypath指定当前异常发生的时候转发的路径scope指定ActionMessages实例存放的范围type指定需要处理异常类的名字必须的bundle指定Resource Bundle
<globalforwards>元素:用来声明全局转发元素可以有一个或者N个<forward>元素组成用于把一个逻辑名映射到特定的URL通过这种方法Action类或者JSP页面无需指定URL只要指定逻辑名称就可以实现请求转发或者重定向这样可以减少控制组件和视图的聚合易于维护className对应的配置ntextRelative如果为true表示当path属性以/开头的时候给出的是对应的上下文URL默认是falsename转发路径的逻辑名必须写path转发或者重定向的URL必须写必须是以/开头redirect设置为true的时候表示执行重定向操作此项为false的时候表示执行请求转发操作重定向与请求转发的区别以后就是重定向是把请求生成应答给客户端然后在重新发送给定向的URL浏览器地址栏会有显示而转发就是直接把请求转发给本应用的另一个文件不生成应答所以客户端IE没显示
<actionmapping>元素:包含一个或者N个<action>元素描述了从特定的请求路径到响应的Action的映射在<action>元素中可以包含多个<exception>和<forward>子元素他们分别配置局部异常处理和局部转发attribute设置Action关联的ActionForm在request或者session范围内的key就是在request或者session共享内的名称className对应配置元素的类默认的是ActionMappingforward指定转发URL路径include指定包含URL路径input指定包含表单的URL当表单验证失败的时候发送的URLname指定和该Action关联的Form名字该名字必须是在formbean中定义过的可写可不写path必须/开头的方位Action的路径parameter指定Action配置参数在Action的execute()方法中可以调用ActionMapping的getParameter()方法来读取匹配的参数roles指定允许调用该Action的安全角色多个角色之间逗号格开scope指定Form的存在范围默认是sessiontyep指定Action的完整类名unknown如果是true表示可以处理用户发出的所有的无效的ActionURL默认是falsevalidate指定是否调用ActionForm的validate方法
<controller>元素:用于配置ActionServletbuffreSize指定上载文件的输入缓沖大小该属性为可选默认className指定元素对应的配置类ControllerConfig然后是contentType指定响应结果内容类型和字符编码该属性为可选默认是text/html如果在Action或者JSP网页也设置了类型内容会覆盖这个locale指定是否把Locale对象保存到当前用户的session中默认falsetempDir指定处理文件上载的临时工作目录nochache如果是true在响应结果中加入特定的头参数
<messageresources>元素:用来配置Resource Bundle用于存放本地文本消息文件className元素对应的配置类MessageResourcesConfigfactory指定消息的工厂类key指定文件存放的Servlet对象中采用的属性Keynull指定如何处理未知消息parameter指定消息的文件名
<plugin>元素:用于配置Struts插件
配置多应用模块:所有的子应用都可以共享同一个ActionServlet实例但是每个子应用都有单独的配置文件把应用划分为多个子应用模块首先为每个应用创建单独的Struts配置文件在webxml的ActionServlet配置代码中添加几个子应用信息采用元素来实现应用之间的切换
Digester组件:是一个Apache的另一个开源代码项目当Struts被初始化的时候首先会读取并解析配置文件框架采用Digester组件来且西配置文件然后创建config包中的对象者对象用于存放配置信息
其实配置文件不难只要都理其中的原理就OK了真正实际的项目开发中采用的工具例如Eclipse系列提供了相应的插件在创建一个Struts工程的时候配置文件的标签都是自动生成的而我们只需要往里面填写属性就OK了