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>