深入浅出struts2

原创 2016年08月31日 09:12:49

1.struts2简介

2.struts2流程

3.struts2核心概念


一、struts简介

struts2是由Apache软件基金会开发的一个基于MVC模式的轻量级Java EE框架,struts2在struts1的基础上,借鉴了WebWork的很多有点发展而来,但与struts2有着明显的区别。struts2中Action类的execute()方法不再依赖于Servlet API,大大降低了耦合性; 引入了拦截器机制; 提供了更为强大的数据校验功能; 发布了全新的标签和OGNL表达式; 另外还支持Ajax等。说了这么多struts2,来说一下它的替代技术,spring mvc。单从名字上就能看出,它也是一个mvc框架。有人推荐struts2,有人推荐spring mvc,在我看来,这两个就像是风格各异的美女,各有她婀娜多姿的一面。


二、struts2流程

学习struts2之前,最好先把它的工作流程了解一下。


上图中有一点需要指出:org.apache.struts2.dispatcher.FileterDispatcher核心过滤器只在struts2.1.3版本以前使用,在后续版本中使用的核心过滤器更改为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

如上图所示,struts2的具体执行过程可以分为以下几步:

第一步:客户端向web容器(如tomcat)发送请求(如访问index.jsp)

第二步:请求经过一系列的过滤器过滤之后,把该请求传递给struts2的核心过滤器StrutsPrepareAndExecuteFilter

第三步:核心过滤器接收到请求信息之后,根据请求的url(如/login/HelloAction)搜索Action的映射信息。

第四步:找到对应的映射信息,则在struts.xml中对应的Action被实例化,并且执行该action的execute方法(如何没有指定任何方法的话,则默认执行该方法),处理用户请求信息。另外在action对象被调用前后,interceptors也会被先后执行。

第五步:action对请求处理完毕以后返回一个逻辑视图(说白了就是一个字符串),该逻辑视图在struts.xml文件中相应的<result>元素中寻找对象的物理视图(这个物理视图既可以是JSP/HTML页面,也可以是Freemarker/Velocity模板,甚至可以是Action),并返回给客户端

注释:学习struts2,把上面那张图中各个部分的细节都掌握了,寓意着你真正掌握了struts2。


三、struts2的核心概念

先说一下web.xml,web应用程序在启动tomcat服务器时,首先会建在web.xml文件。在web.xml文件中配置struts2的核心控制器StrutsPrepareAndExecueFilter,然后这个控制器就会加载整个struts2框架。

然后再说一下struts.xml,它一般放在web应用的类加载路径下,通常web应用编译之后放在WEB-INF/classes路径下。在eclipse中,把它放在src目录下即可。

struts.xml的配置

常用的配置元素和功能:

include元素:包含其他的xml配置文件

constant元素:配置常量信息

package元素:包含一系列的Action及拦截器配置信息,便于对action进行统一管理

default-action-ref元素:配置默认的action

default-interceptor-ref元素:配置默认的拦截器,对package范围内的所有action有效

global-results元素:配置全局结果集,对package范围内的所有action有效

interceptors,interceptor,interceptor-stack,interceptor-ref:都和拦截器相关

action:包含于action操作相关的一系列配置信息

result元素:配置action的结果映射,嵌套在<action>元素内

param元素:配置参数信息


重点说一下action

在struts2中,action作为业务逻辑控制器,是整个struts2应用的核心。action本质上就是一个java类,一个继承了ActionSupport类的java类(当然也可以实现action接口)。

关于action和ActionSupport的具体代码,可以去struts2的安装包中查看。注:在ActionSupport类中除了实现Action接口之外,还增加了获取国际化信息的方法getText(),输入校验的方法validate()方法等等。

[java] view plain copy
  1. package com.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class UserAction extends ActionSupport{  
  6.     private String username;  
  7.     private String password;  
  8.     public String getUsername() {  
  9.         return username;  
  10.     }  
  11.     public void setUsername(String username) {  
  12.         this.username = username;  
  13.     }  
  14.     public String getPassword() {  
  15.         return password;  
  16.     }  
  17.     public void setPassword(String password) {  
  18.         this.password = password;  
  19.     }  
  20.     public String Execute() throws Exception  
  21.     {  
  22.         return SUCCESS;  
  23.     }  
  24.   
  25. }  
上面就是一个灰常简单的action代码示例,其实不提供私有属性,只要提供相应的get/set方法即可,但是为了方便理解,还是加上吧。

在action中你还可以实现其它的方法,想想看,一个action不可能只负责一个业务逻辑处理,如果一个action仅仅负责一个单一的功能的话,那得定义多少个action呀!!!!

接下来就是如何调用含有多个方法的action

一种是动态调用方式(不太提倡),另一种就是指定method属性方式

看下面struts.xml中的一段代码:

[html] view plain copy
  1. <package name="default" namespace="/" extends="struts-default">  
  2.         <action name="loginAction" class="com.action.UserAction" method="login">  
  3.             <result name="student">/hwshow.jsp</result>  
  4.             <result name="teacher">/teacher.jsp</result>  
  5.             <result name="error">/error.jsp</result>  
  6.         </action>  
  7.         <action name="registAction" class="com.action.UserAction" method="regist">  
  8.             <result name="regist">/login.jsp</result>  
  9.         </action>  
  10. </package>  
loginAction和registAction对应的具体类都为com.action.UserAction。通过为action指定不同的方法名,来调用同一个action中不同的方法。说明几点:一 package的namespace和action的name共同组成的访问该action的url。二 package的extends属性为struts-default 说明该包继承struts-default包,那么该包会自动加载defaultStack拦截器栈。


注入action属性值在这里就不再赘述

深入浅出struts2

1.struts2简介 2.struts2流程 3.struts2核心概念 一、struts简介 struts2是由Apache软件基金会开发的一个基于MVC模式的轻量级Java EE框架,str...
  • z137657747
  • z137657747
  • 2016年08月30日 16:02
  • 377

深入浅出Struts2

Struts2简介             Struts 2框架作为Struts 1.X框架的替代技术,相对Struts 1.X来说,有着本质上的改变, Struts 2框架是从WebWork框架发展...
  • leimengyuanlian
  • leimengyuanlian
  • 2014年04月28日 22:03
  • 1795

深入浅出Struts2

1 简介 Struts2中的Action都是POJO,这一方面增强了Action本身的可测试性,另一方面也减小了框架内部的耦合度,而HTML表单中的输入项都被转换成了恰当的类型以供action使用。...
  • xinglu31
  • xinglu31
  • 2014年04月22日 19:54
  • 470

struts2深入浅出

Framework概念 伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析。构建业务逻辑的应用...
  • z742182637
  • z742182637
  • 2016年01月07日 10:32
  • 256

即将出版《Spring Boot入门与实践》

即将出版《深入浅出Spring Boot》,先来广告一波
  • ykzhen2015
  • ykzhen2015
  • 2017年12月01日 09:54
  • 479

评侯捷的《深入浅出MFC》和李久进的《MFC深入浅出》

侯捷的<深入浅出MFC>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了。        而李久进的<MFC深入浅出>,听说的人可能就少得多。原因听说是这本书当时没有怎么宣传,而自从1...
  • softfox
  • softfox
  • 2013年02月18日 15:22
  • 3287

《深入浅出统计学》总结

《深入浅出统计学》总结
  • qq229873466
  • qq229873466
  • 2017年05月08日 09:33
  • 528

DPDK分析--深入浅出

概述 随着互联网的高速发展,云产业的快速突起,基础架构网络逐渐偏向基于通用计算平台或模块化计算平台的架构融合,来支持多样化的网络功能,传统的PC机器在分布式计算平台上的优势更为明显。在这些针对海...
  • Tomstrong_369
  • Tomstrong_369
  • 2017年03月01日 20:08
  • 2574

Java深入浅出系列(一)——浅析Java反射机制

一、反射的理解        反射类似于我们平时见到的平面镜的反射:被反射的目标(任意一个已知名称的类),反射出来的“镜像”(我们的类对象中任意一个类都对应有一个类对象>),通过这个“镜像”,类对象,...
  • liutengteng130
  • liutengteng130
  • 2015年06月19日 17:03
  • 1461

深入浅出Extjs4.1.1视频教程

百度网盘下载:链接:http://pan.baidu.com/s/1mg5ZKLE 密码:cn4s 第1讲.ExtJs初识及其环境搭建 第2讲.开始ExtJs梦想之旅 第3讲.ExtJS工具栏、菜单...
  • ejdyneifys
  • ejdyneifys
  • 2015年09月25日 09:27
  • 775
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入浅出struts2
举报原因:
原因补充:

(最多只允许输入30个字)