Struts2简介:
Struts2是java的一个现在比较流行的web框架,主要用来实现servlet的主要功能,是一个控制层(control)的框架,除此之外还实现了其他的很多有用功能。
Struts2的基本配置与运行流程:
1,要配置Struts2,首先要导入其所需要的jar包如下图所示:可从官网下载,将其粘贴到WEB-INF——>lib下面。
jar包导入完毕之后,需要在src下面新建一个struts.xml文件夹(有什么用在后面流程中会讲到),下面在src下新建一个包,在包中新建一个类,此类可以是一个简单的POJO对象,我们称之为action类(类名命名规则一般为类名+Action:如HelloAction)。
2,此类推荐实现Action接口或者继承ActionSupport接口(implements Action;extends ActionSupport),推荐使用ActionSupport方法,因为里面提供了数据校验和国际化方法。如下图所示:
简单的POJO类:
继承了ActionSupport方法的类:
至此类的书写已经完成,具体类里面的方法如何书写后面会讲到。
3,配置web.xml文件
<?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">
<display-name></display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 修改常量 -->
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>-->
</web-app>
如上图所示,首先配置filter过滤器,过滤器中org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter为struts2的jar包中的方法,并且配置好filter-mapping。这些基本是固定的。
4,配置struts.xml文件
<?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>
<!-- Struts2为了管理Action的配置,通过包进行管理 -->
<!-- 配置struts2的常量 -->
<constant name="strurs.action.extension" value="action"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="Hello" class="com.ahut.demo1.HelloAction" >
<result name="success">/Demo1/success.jsp</result>
</action>
</package>
<include file="com/ahut/demo2/struts_demo2.xml"></include>
</struts>
如上图所示,package中的name值可以任意,namespace为路径分割,最好配置成/,action中name属性为前面自己写的action的名字可以与类名不一致,class为action的类路径,中间是.分割不是/分割。result为结果集,中的name属性为要跳转的页面的参数,应和上图中HelloAction的return "success"值一致,/Demo1/success.jsp为跳转页面的路径。最后的include为此action中包含其他的action的书写方法,以便对action方便管理。
至此,一个简单的struts2的基本配置就已经完成了,将其部署到tomcat中就可以运行了,比书写servlet简单的多。
5,页面配置
注意,在href的路径中Hello.action中的Hello必须与actiom.xml文件中配置的action中的name值一致。
6,运行流程
首先执行的是web.xml中的过滤器,在过滤器的方法中找到所要执行的action.xml文件,根据页面中的action名字去寻找action.xml文件的与此同名的action,并根据后面的路径去寻找该类,执行该类中的默认方法(excute()方法),找到return的"success"值,返回action.xml中寻找该类中与之对应的路径,跳转到对应页面。
通过method方法对action进行访问:
上述过程中使用的是action中的默认方法进行访问的,所以在action.xml文件中不需要配置相应方法名。如果方法较多,或者想访问自己写的方法则需要在action.xml中配置method方法,如下所示:
<action name="userFind" class="com.ahut.demo2.UserAction" method="find" ></action>
<action name="userUpdate" class="com.ahut.demo2.UserAction" method="update"></action>
如果方法较多需要书写很多个action,过于麻烦。官方推荐我们使用通配符来访问methon方法。如下所示:
<!-- 通配符的方式 -->
<action name="product_*" class="com.ahut.demo2.PrroductAction" method="{1}" ></action>
name中的*号表示从前端页面传递过来的action值,后面的mathod中的{1}为占位符,表示前面第一个*的值,其值必须要与Action类中的方法名一直,用这种方法还可以解决多个Action的问题。
前端页面地址书写如下所示:
<h1>Action的访问方法</h1>
<a href="${pageContext.request.contextPath}/product_find.action">查询商品</a>
<a href="${pageContext.request.contextPath}/product_update.action">修改商品</a>
<a href="${pageContext.request.contextPath}/product_delete.action">删除商品</a>
<a href="${pageContext.request.contextPath}/product_save.action">保存商品</a>
对于method方法的书写还有一种动态地配置方法,该方法更加简便,但是容易混淆所以不在这里介绍了。