使用Struts2的好处
(1) 第一个好处就是我们不必非得编写一个控制器不可,这使得我们可以把注意力集中在编写各种动作类里的业务逻辑方面。
(2) Struts2使用了一个基于XML的配置文件来匹配URI和动作。因为xml是文本文件,因此对应用程序的许多修改都用不着在重新编译有关代码。
(3) 对动作类进行实例化和提取用户输入去填充相关动作属性的工作都有Struts2来完成
(4) Struts2可以对用户输入做一些基本的合法性验证,并在遇到不合法输入时自动地把用户重定向到相关的输入表单。Struts2还内建了许多验证程序。
(5) Struts2负责调用动作方法,我们可以通过配置文件轻易的该百年某个动作的方法
(6) Struts2负责检查各个动作的结果和执行该结果。
还有很多好处,用过就知道了。
Struts2中的mvc模型
MVC设计模式有3个关注点:模型、视图、控制器。在Struts2中,他们分别由动作(action)、结果(result)和控制器(FilterDispatcher)来实现。许多mvc框架中控制器的主要作用是来执行业务逻辑,而模型用来封装数据相关的操作。在Struts2中,将业务逻辑和数据处理都放在模型(action)中。
Struts2的工作原理
每一次的动作处理流程中,过滤器调度程序会做一下几件事:
(1) 查询配置管理器,以确定应该根据请求URI调用哪个动作。
(2) 运行为该动作注册的每一个拦截器,其中一个拦截器将请求中的参数填充到动作的属性上
(3) 执行相关的动作方法
(4) 执行相关的动作结果
注意:有些拦截器会在动作方法执行完毕之后、在动作结果执行之前再次执行。
从工作原理图中可以看出,在拦截器和结果页面中都可以通过OGNL来操作ValueStack,ValueStack中存放了与动作相关的数据,拦截器将数据方法ValueStack上,那么在结果页面就可以访问这些数据了。动作中的数据正是通过ValueStack来传递到结果页面中的。
其他几个重要的概念,动作、拦截器都需要我们花时间自习研究。特别是拦截器,它在Struts2中起到了十分重要的作用,框架的很多功能都是通过拦截器来实现的,比如将请求中的参数填充到动作类的属性上正是通过params拦截器实现的。
话不多说,开始动手做吧!就从经典的hello word开始:
首先需要将Struts所需要的包引入到工程中来:
接下来需要在部署描述符web.xml中将Struts2的过滤器引入进来,这样Struts2在我们的工程中才能发挥作用。
<?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"> <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>
接下来我们就可以编写我们的动作(Action)类:
package action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorld extends ActionSupport { private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String execute() throws Exception { return SUCCESS; } }
还需要在src目录(classpath)下新建一个struts.xml文件,它就是struts2的配置文件,我们需要在这里面配置好我们的Action。
<?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.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="action.HelloWorld"> <result name="success">/success.jsp</result> </action> </package> </struts>
然后编写input.jsp和success.jsp
input.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>input</title> </head> <body> <form action="hello.action"> userName : <input type="text" name="userName"/> <input type="submit" value="submit"/> </form> </body> </html>
success.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>sucess</title> </head> <body> hello ${userName } </body> </html>
测试:
这样,我们将成功的将Sturts2应用到了工程中,至于Action和interceptor以及result等知识以后学习的时候再去研究,这里先把struts2环境搭建起来,算是迈出了学习struts2的第一步。
周围很多同学都要去参加培训公司的培训,我看了一下培训课程,基本就和我们自己学的差不多。讲三大框架(SSH2)的时间加起来两个月左右,其实我觉得两个月时间自己看应该也能学到不少东西了,培训机构收费那么贵(1万3),最怕就是去了发现老师都是打酱油,还不如花点钱把自己身体养好,精神好学习有劲!