Struts2 

框架是基于MV模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的。

01.需要在web.xml文件中配置FilerDispatcher过滤器,指定要映射到FulterDispatcher的URL样式,匹配这个URL样式的所有请求,

都将被Web容器交友FilterDispatcher进行处理。

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <display-name></display-name>
 8   <!-- 添加Struts2的核心过滤器 -->    
 9   <filter>
10       <filter-name>struts2</filter-name>
11       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
12   </filter>
13   <!-- 过滤的资源路径 -->
14   <filter-mapping>
15       <filter-name>struts2</filter-name>
16       <url-pattern>/*</url-pattern>
17   </filter-mapping>
18   <welcome-file-list>
19     <welcome-file>login/login.jsp</welcome-file>
20   </welcome-file-list>
21 </web-app>

 

02.编写Action类

  一个Action就是一段只有特定的URL被请求时才会执行的代码,FilterDispatcher根据请求URL的不同,来执行对应的action。

在Struts2中,action执行的结果(成功或者失败)通常都对应着一个要呈现给用户的result,这个result可以使HTML页面,

也可以是一个pdf文件,或者excel电子表格。所有的result都是通过字符串名字来标识的,

FilterDispatcher根据action返回的结果字符串来选择对应的result显示给用户。action与其对应的result是在一个名为struts.xml的配置文件中进行配置的。

在Struts2中,可以用一个普通的java类作为action类,只要这个类提供如下的方法实现即可:publi String execute();

不过,通常情况下,我们所写的action类会选择实现   com.opensymphony.xwork2.Action接口在这个接口中除了定义了上述的execute()方法外,

还定义了5个字符串类型的静态常量,如下:

在Struts2中,所有的action必须返回一个字符串类型的结果代码,以标识要呈现给用户的result。

Action接口中定义的常量字符串,从语义上为你定义好了在action执行的不同情况下应该向用户呈现的result的名字,当然你可以为result取其他的名字,

不过这种行为是不建议的,除非上述定义的字符串常量不能满足你的应用需求。

02.1    实现了 com.opensymphony.xwork2.Action接口  的Action类。

          

Action返回的结果代码不一定非要对应一个要执行的result,例如,Action.NONE结果代码就没有了对应任何的result。

 

03.编写view页面(创建jsp页面)

 1 <%@ taglib uri="/struts-tags" prefix="s" %>
 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 3 <html>
 4   <head>
 5     <base href="<%=basePath%>">
 6     <title>hello.jsp</title>
 7   </head>
 8   
 9   <body>
10      hello:<s:property value="username"/>   //用于输出Action类中的字段值
11    登录成功!
12   </body>
13 </html>

在这里,同样可以导入Struts2的    taglib标签   ,以此来使用Struts2的UI标签。

 输出的结果即为:"hello:张三"

04.在struts.xml中配置action节点

一个action创建完成后,还需要为其配置一个URL,只有这样,FilterDispatcher才知道哪一个URL对应着哪一个action,当接货到访问该URL时,FilterDispatcher就调用对应的action对请求进行处理.

1<?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="default" namespace="/" extends="struts-default"> 2 <action name="login" class="zym.action.LoginAction"> 3 <result name="success"> 4 index.jsp 5 </result> 6 </action> 7 </package>
</struts>

001.package元素将多个action元素组织为一个逻辑单元,从而简化了维护工作,提高了可重用性。

  name属性指定包的名字,可选的exrends属性指定要扩展的包。Struts2中的package可以扩展另外的package,从而“继承”原有包的定义。struts-default包的定义在struts-default.xml文件中,改文件以及包含在Struts2的核心JAR包中了(struts2-core-2.0.11.jar)。

002.action元素用于对action进行配置。name属性为action指定一个名字,这个名字即用户访问的URL,class属性指定action的完整类名。任何对“Action”类的请求都会调用相对应的action类,

需要注意的是:在为action取名字时,一是不要在名字前面添加斜杠(/);二是不要在名字后面添加“.action”后缀名。

003.result子元素用于建立action和result之间的联系,name属性指定result映射的名字,值“success”和LoginAction的execute()方法返回的静态常量SUCCESS(值为“success”)是一致的。要注意的是,如果result的名字是“success”,

那么可以省略name属性:

<result>index.jsp</result>