Struts2的配置文件
Struts2 相关的配置文件有 web.xml,struts.xml,struts.properties,struts-default.xml,velocity.properties,struts-default.vm。其中 web.xml,struts.xml 是必须的,其它的配置文件可选择。它们在 web 应用中的功能如下:
web.xml:包含所有必须的框架组件的 web 部署描述符。
Struts.xml:配置包含 result/view 类型、action 映射、拦截器等的 Struts2 的主要配置文件。
Struts.properties:配置 struts2 的框架属性。
Struts-default.xml:在文件在 struts-action-x.x.jar 中,该文件是应该被包含在 struts.xml中的缺省配置。
Welocity.properties:重写了 velocity 的配置文件。
Struts-default.vm:相对于 velocity 的缺省配置。
<struts>
<!-- Struts 2的全局变量,该属性设置了去除请求过程中的"名称.action"后缀".action"-->
<constant name="struts.action.extension" value=","></constant>
<!-- Struts 2的Action必须放在Package包中-->
<package name="default" extends="struts-default">
<!-- 定义一个login的Action,实现类为LoginAction -->
<action name="login" class="com.action.LoginAction">
<!-- 配置Action返回成功时,转入Success.jsp页面-->
<result name="success">success.jsp</result>
<!-- 配置Action返回cancel时重定向到Welcome的Action-->
<result name="cancel" type="redirectAction">Welcome</result>
<!-- 配置Action返回expired时重定向到ChangePassword的Action链 -->
<result name="expired" type="chain">ChangePassword</result>
</action>
<action name="Welcome" class="com.action.welcome">
<result name="cancel">Welcome.jsp</result>
</action>
</package>
</struts>
在上面的
Struts2.xml
文件中,定义了两个
action
,并使用
constant
设置了全局变量,其中
struts.action.extension
属性设置文件的
action
显示与否,值“
,
”表示所有
action
的名称后面可以不加
action
作为后缀。
标签中的type能够指定转向的资源类型,转向的资源多样既可以是JSP,也可以是其它类型的文件。另外在package标签中可以添加属性namespace,学习过xml的应该知道它指的是命名空间,它的作用是将标签进行分类,放到不同的空间内。
<struts>
<!-- 将Action的创建交给spring来管理 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 -->
<constant name="struts.action.extension" value="do"></constant>
<package name="struts" namespace="/" extends="struts-default">
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="myInterceptor" class="myInterceptor"></interceptor>
<interceptor-stack name="myDefult">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="myLogin" class="loginAction">
<result name="success">/success.jsp</result>
<result name="error" type="redirect">/index.jsp</result>
</action>
<action name="testSession" class="sessionAction">
<interceptor-ref name="myDefult"></interceptor-ref>
<result name="success">/success.jsp</result>
<result name="error" type="redirect">/login.jsp</result>
</action>
</package>
</struts></span>
注意:
① 执行完自定义拦截器后,还要执行struts2默认的拦截器defaultStack,否则可能会出错。
② action标签的class属性,与spring结合后要写成spring中bean的名称name。
Struts2的标签库
Struts2的标签库也是Struts的重要组成部分,这些标签内容是在Struts1开始就有的,标签库提供了丰富的功能,基本上可以替代HTML标签。Struts2的标签使用方法类似于HTML及JSP标签,不同的是头文件的注册方法,而且Struts2的标签页面代码相较于JSP及HTML页面更简洁,如下面的示例。
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form method="post" action="loginaction">
<s:textfield label="名字" name="name"/>
<s:textfield label="年纪" name="age"/>
<s:textfield label="喜欢的颜色" name="answer"/>
<s:submit/>
</s:form>
</body>
</html>
Struts2配置
在开发的web项目中想要使用Struts2就必须要事先配置好相应的Struts环境,需要去官方网站下载相应的Struts2压缩包,然后把相应的jar包引入WebContent/WEB-INF/lib文件夹内,接下来还要在目录WebContent/WEB-INF下的web.xml文件中添加Struts2的FilterDispatcher,最后在项目的src文件夹内添加相应的struts.xml将action等内容写入该配置文件内。
Struts2官方下载地址:http://struts.apache.org/downloads.html。
lib库中引入的jar包需要根据项目需求确定,不同的功能引入的jar也不相同,如果基本的应用的话只需要引入下面的四个jar包:
common-logging-版本号.jar:Jakarta的通用日志记录包,用于通用日志处理。log4j是最好用的;
freemarker-版本号.jar
ognl-版本号.jar:OGNL表达式语言,struts2支持该EL;
struts2-core-版本号.jar:struts2的核心库;
xwork-core-版本号.jar:webwork的核心库,由于Struts2是由xwork的延伸,有些类依然关联着xwork的类
引入jar包后还需要在web.xml中添加struts的FilterDispatcher,具体配置如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Web</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- Struts的FilterDispatchor -->
<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>
filter 元素用于指定 Web 容器中的过滤器。在请求和响应对象被 servlet 处理之前或之后,可以使用过滤器对这两个对象进行操作。
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。
最后在项目的src文件夹内添加相应的struts.xml