struts2 web应用配置详解

[size=medium]
1.首先来认识一下几个文件:
①web.xml :位于WEB-INF下。需自行创建。每一个web应用程序都应该有一个web.xml,它就像web应用程序的一本使用说明书,告诉服务器程序(如:tomcat) 该如何使用web 应用程序。
②struts-default.xml:位于struts2-core-2.XXX.jar的根目录下。定义了struts2默认配置。一般不要修改。包括result-type、拦截器和名为struts-default的package。通常每个包都应当继承struts-defauult包。struts2的众多核心功能都是由Interceptor(拦截器)实现的,Interceptor是struts2的基石,而在struts-default.xml中定义了这些Interceptor。可以这么说:只有继承了strut-default我们才能使用struts2的核心功能。
③struts-plugin.xml:位于struts2-XXX-pluin-2.X.XX.jar的根目录下。一般不要修改。用于配置插件使用的文件。可以用它来方便的加入一些特定的功能。它定义了一个package继承自struts-default,可以说struts-pluin.xml是struts-default.xml的补充。
④struts.xml:位于WEB-INF\classes目录下。主要用于配置页面的访问的路径。通常需要定义一个package,继承自struts-default,这样就拥有了struts-default的所有配置,从而很大程度的减轻了struts.xml的配置量。
⑤default.properties:位于struts2-core-2.XXX.jar中的org.
apache.struts2包中。这是一个属性文件,以key=value的形式存储配置信息,然后由struts2读取。它定义了struts2框架的默认配置。由struts2事先定义好了,一般不要修改。
⑥struts.properties:可有可无。用时需自行创建。可以用于配置struts,例如:struts.action.extension 属性用于指定访问action的后缀名,多个后缀名之间用英文逗号(,)隔开
struts.action.extension=do,,
这句话指定了action的后缀名为do或者为空,则我们想访问TestAction的url为http://localhost:8080/webapp/TestAction.do
或者http://localhost:8080/webapp/TestAction
所有配置信息都可以struts.xml编写,使用
[/size]

<constant name=”key” value=”value”/>

[size=medium]
加载顺序
default.properties -->struts.xml -->struts.properties
若三个文件中存在重复的属性,则后加载的会覆盖之前加载的。
详细参数配置请查阅:
[url]http://candy-code.iteye.com/blog/1442335[/url]
2.一般的配置步骤
①web.xml
关键在于Filter(过滤器)的配置,/*表示匹配web app根目录下的所有内容,即过滤所有的内容然后交给StrutsPrepareAndExecuteFilter去处理,只有这样我们才能真正使用struts2
这里需注意两点:
1’ struts2 2.0.x 至2.1.2版本使用的过滤器是FilterDispatcher,自2.1.3版本StrutsPrepareAndExecuteFilter替代了FilterDispatcher
2’ 如果在url中只写web app名,则访问的<welcome-file>,此时不会被过滤器过滤[/size]

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

[size=medium]
② 将所需类库考入WEB-INF\lib下
struts完整版类库都在lib目录下,一般情况下我们并不需要所有的类库。我们只需要选择其中的一部分,然而我们在开发之前并不能确定到底需要哪些类库。最简单的方法是将struts\apps下的struts2-blank.war解压开,然后将其WEB-INF\lib目录下的所有jar file都拷入你的应用程序的lib目录下,这些类是最基本最常用的类库。
所需基本库文件有:(不同版本略有差别,以2.3.1.2版本为例)
struts2-core-2.3.1.2.jar -->struts2核心类库
xwork-core-2.3.1.2.jar -->xwork核心类库
ognl-3.0.4.jar -->OGNL表达式类库
commons-io-2.0.1.jar -->输入输出
freemarker-2.3.18.jar-->
freemaker支持类库
asm-3.3.jar 、asm-commons-3.3.jar、asm-tree-3.3.jar、
commons-fileupload-1.2.2.jar
commons-lang-2.5.jar、javassist-3.11.0.GA.jar
③struts.xml
关键点在于定义一个package并继承struts-default.
【package 属性】
name:必选属性。package的名字,用于区别不同的package
namespace:访问路径,允许形式有 /、/XX、/XX/、/XX/xx
extends:父package的名字
【action属性】
name:必选属性。action的访问名。访问形式为:
actionName. extension
extension(后缀名)在default.properties中定义为action或空
class:可选属性。指定action对应的类,若不指定,默认
com.opensymphony.xwork2.ActionSupport
method:可选。指定访问的action的方法。默认为execute()
【result属性】
name:用于区别多个result。它与Action的返回值对应。struts会根据result返回的字符串找到同名的result的标签,从而确定要访问的页面。默认为success
type:页面跳转的类型。有chain、redirect、dispatcher、redirectAction等
示例:[/size]
		
<?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 name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index" class="com.jnmc.unique.MyAction">
<result>/index.jsp</result>
</action>
</package>
</struts>

[size=medium]
3.struts.xml配置补充
①默认action的配置:当找不到指定的页面的时,默认访问指定页
[/size]

<default-action-ref name="index"></default-action-ref>

[size=medium]
name:action的名字
②全局结果集:被同一个包内所有的action所共享的结果集
[/size]

<global-results>
<result name="error">/error.jsp</result>
</global-results>

[size=medium]
③异常映射:当action抛出异常时,会被struts的拦截器捕捉到。然后根据异常映射跳转到指定的action,来处理异常。
result:目的action的name
exception:指定异常的类型
[/size]

<exception-mapping result="error" exception="java.lang.Exception"/>

[size=medium]
④全局异常映射:
被同一个package下的所有action共享。一般与全局结果集配合使用。当然也可以在每一个action分别指定处理exception的action。
[/size]

<global-results>
<result name="error">/error.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"/>
</global-exception-mappings>

[size=medium]
⑤wildcard(通配符):
通配符的使用可以大大降低配置量
* : 匹配任意长度的字符串(字符串之间不能有空格)
{n}: 代指之前上文中出现的第n个*
[/size]

<action name="user_*" class="com.jnmc.unique.User{1}Action">
<result>/user_{1}.jsp</result>
</action>

[size=medium]
则在浏览器中敲
http://hostname:port/webapp/user_Add,会访问UserAaddAction,若返回success,则显示user_add.jsp页面
⑥Interceptor(拦截器):
在struts-default.xml配置了一大堆Interceptor,建议阅读
一下struts-default.xml。
先介绍一个概念:Interceptor Stack(拦截器堆)
它是一个Interceptor链表,其中有顺序的存储了多个Interceptor。它们都存储在堆内存中。
在action标签对中可以添加拦截器的配置。因为在struts-default.xml有如下配置:
[/size]

<default-interceptor-ref name="defaultStack"/>

[size=medium]
所以我们在不指定Interceptor的情况下会使用defaultStack中定义的多个Interceptor.若指定,则会覆盖struts-default.xml中的配置。建议这么做:
[/size]

<action name="index" class="com.jnmc.unique.MyAction1">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="chain"/>
</action>

[size=medium]
这样就将多个拦截器加入了拦截器链表中,执行顺序与添加顺序相同。
注意:chain是struts-default.xml中配置的单个Interceptor。
⑦自定义拦截器
只需创建一个类(不妨叫:MyInterceptor)继承自AbstractInterceptor或者实现Interceptor接口,然后在struts.xml的package标签对中配置:
示例:
[/size]

<interceptors>
<interceptor name="timeInterceptor" class="com.jnmc.struts2.interceptor.TimeInterceptor"/>
</interceptors>

[size=medium]然后在action中指定它。(方法前面已经讲过了)
[/size]
---------------------------更多关于struts的细节,我会陆续贴出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值