1 介绍
学习和使用Struts2框架有了一段时间,这里将学习心得总结在博客的文章里面。期间也参考学习了其他优秀的文章,如有错误之处欢迎指正,转载请申明原文地址,希望大家支持,谢谢。

2 What:什么是Struts2框架
Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2基于MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web应用程序。 拥有优良的设计和功能,其优势具体如下:

项目开源,使用及拓展方便;
通过简单、集中的配置调度业务类,使配置和修改都非常容易;
提供强大、可以有效减少页面代码的标签;
提供 Exception 处理机制,并且具有良好的 Ajax 支持;
Result 方式的页面导航,通过 Result 标签很方便地实现重定向和页面跳转;
Struts2 提供了强大的拦截器,利用拦截器可以进行 AOP编程(面向切面的编程),实现如权限拦截等功能。

体系结构:

橙色是Servlet Filters,过滤器链;
浅蓝色是Struts Core,Struts2的核心部分;
浅绿色是Interceptors,Struts2的拦截器;
浅黄色是User Created,由开发人员创建,包括struts.xml、Action、Template。

基本处理流程如下:

加载类(FilterDispatcher);
读取配置(struts2配置文件中的Action);
派发请求(客户端发送请求);
调用Action(FilterDispatcher从struts2配置文件中读取与之相对应的Action);
启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证);
处理业务(回调Action的execute()方法);
响应处理(包括返回响应、查找响应等)。

3 How:怎样使用Struts2框架
(1) 创建一个Struts2项目;

在pom.xml文件导入Spring相关的依赖,如:
struts2-core、log4j-core、log4j-api、commons-io、asm、asm-commons、asm-tree、xwork-core、commons-fileupload、commons-lang等;
如:<properties><struts.version>×.×.×</struts.version>
</properties>
<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${struts.version}</version></dependency>
</dependencies>拷贝struts.xml文件:
普通的java web项目应该将文件放在src文件夹下面,基于Spring-maven项目将文件放在src/main/resources文件夹下面;
struts.xml文件主要是配置请求路径对应action类的,以及结果跳转路径。
配置文件写法示例,如:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">
<struts><constant name="struts.i18n.encoding" value="UTF-8"/>  <!-- struts2允许动态加载xml配置文件,例如 actions.xml. 使得我们在开发的过程中修改完mapping文件后可以动态加载进来,而不用重启应用 --><constant name="struts.configuration.xml.reload" value="true"/><!-- 在struts.properties或者struts.xml中有devMode的配置,在devMode被激活的模式下,能够明显的提高开发效率,它会提供更多的日志或着debug信息。当然提高开发效率,在性能方面会付出一定的代价,所以struts默认的是非开发模式 --><constant name="struts.devMode" value="false" /><!-- struts.properties中加入全局的设置,这样就不用在每个标签设置theme了 --><constant name="struts.ui.theme" value="simple" /><!-- 设置上传文件大小 --><constant name="struts.multipart.maxSize" value="20971520"></constant><constant name="struts.multipart.saveDir" value="/tmp"/><!-- 由spring来管理struts2的action类 --><constant name="struts.objectFactory" value="spring" /><constant name="struts.convention.default.parent.package" value="default" /> <!-- 是否支持动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation" value="true" /><!-- 用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配 --><constant name="struts.objectFactory.spring.autoWire" value="name"/><!-- package元素可以把逻辑上相关的一组Action、Result、Intercepter等元素封装起来,形成一个独立的模块 --><!-- 没有配置namespace的,因此在访问的时候,是直接在webcontext下面写要访问的action名称 --><package name="default" extends="struts-default"><action name="test" class = "com.test.action.TestAction" method = "test"><result name="success">/success.jsp</result></action></package><!-- 访问的时候就需要加上namespace --><package name="struts2" namespace="/struts2" extends="struts-default"><action name="test1" class = "com.test.action.TestAction" method = "test1"><result name="success">/success.jsp</result></action></package>
</struts>在web.xml中配置Struts2的过滤器:
拦截器:在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略;
过滤器:过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息;
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
如:<?xml version="1.0" encoding="UTF-8"?>
<web-app><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.action</url-pattern></filter-mapping>
</web-app>

(2) 实现Action控制类。

实现Action接口:
当 Action 类处理用户请求成功后,有人习惯返回 index 字符串,有人习惯返回 success 字符串,这会导致在一个 Action 中可能会返回各种不同的值,十分不利于项目的统一管理。
为了让用户更规范地创建 Action 类,Struts2 提供了一个 Action 接口,该接口定义了 Action 类应该实现的规范,用户在创建 Action 时,可以实现这个接口。Action 接口中的具体代码如下所示:
public interface Action {//定义Action接口中包含的一些结果字符串public static final String SUCCESS="success";public static final String NONE="none";public static final String ERROR="error";public static final String INPUT="input";public static final String LOGIN="login";//定义处理用户请求的execute()方法public String execute() throws Exception;
}继承ActionSupport类:
由于自定义的Action类继承了ActionSupport类,因此必须定义一个变量 serialVersionUID;
这是因为ActionSupport类实现了Serializable接口,任何实现了Serializable接口的类都必须声明变量serialVersionUID;
其示例代码如下所示:
public class LoginAction extends ActionSupport{private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception{return super.execute();}
}

参考资料:
http://c.biancheng.net/view/4052.html Struts2是什么?它和Struts1有什么区别?
https://blog.csdn.net/Q1368089323/article/details/109522622 Struts2 框架
https://blog.csdn.net/gengxiaoming7/article/details/47340269 Struts2中action访问路径配置

框架学习系列 之Struts2框架学习总结相关推荐

  1. JAVAEE真实课堂系列之Struts2框架-刘志远-专题视频课程

    JAVAEE真实课堂系列之Struts2框架-1268人已学习 课程介绍         本课程主要讲解Struts2框架的基本用法,其中包括Struts2的入门,基本配置,struts.xml的详细 ...

  2. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)

    这是本文的最后一部分内容了,前两部分内容的文章: [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上) [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复( ...

  3. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(中)

    上一篇文章–[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)中,我们先介绍了对于图像修复的背景,需要利用什么信息来对缺失的区域进行修复,以及将图像当做概率分布采样的样本来看 ...

  4. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)

    在之前的两篇 GAN 系列文章–[GAN学习系列1]初识GAN以及[GAN学习系列2] GAN的起源中简单介绍了 GAN 的基本思想和原理,这次就介绍利用 GAN 来做一个图片修复的应用,主要采用的也 ...

  5. C#温故而知新学习系列之.NET框架高级特性—概述.NET框架中的反射(一)

    阅读目录 一:什么是元数据? 二:概述.NET框架中的反射 一:什么是元数据? 元数据,就是描述数据的数据,它存储在PE文件中,PE文件由IL Code和元数据组成,元数据为.NET提供了丰富的自我描 ...

  6. 深度学习系列2:框架tensorflow

    1. 背景 tensorflow是一套可以通过训练数据的计算结果来反馈修改模型参数的一套框架,由谷歌公司于2015年11月开源,可以点击playground来可视化的尝试操作tensorflow,随便 ...

  7. 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍

    1.Struts2的系统架构: 2.架构中不同Key的作用介绍: servlet Filters:过滤器链,client的全部请求都要经过Filter链的处理. Struts Core:Struts2 ...

  8. 【深度学习系列4】深度学习及并行化实现概述

    转自 http://djt.qq.com/article/view/1245 摘要: 深度学习可以完成需要高度抽象特征的人工智能任务,如语音识别.图像识别和检索.自然语言理解等.深层模型是包含多个隐藏 ...

  9. (pytorch-深度学习系列)pytorch构造深度学习模型-学习笔记

    pytorch构造深度学习模型 1. 通过继承module类的方式来构造模型 Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类. 可以继承基类并重构 __init()__函数和 ...

最新文章

  1. 日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本
  2. NeoKylin-Server使用docker部署跨主机redis集群
  3. 怎样在Word2010中新建样式
  4. Invalid or unexpected token 报错
  5. 快速破解基于linux内核的开源路由器后台管理登录密码
  6. 解决 primordials is not defined 问题
  7. html适配手机 响应式,移动端适配(响应式)
  8. screenX、clientX、pageX三者间的区别
  9. Connections could not be acquired from the unde...
  10. 8 种方案机智应对后端一次性返回 10万 条数据
  11. 【Paper】Short Term Electric Energy Consumption Prediction in in Smart Buildings Methods Survey
  12. 随机数的产生原理与实现
  13. SurfaceView出现ANR:Surface has already been released的解决办法
  14. python实现crc32爆破,得到加密文件内容
  15. 大话设计模式读书笔记
  16. QT开发的视频监管平台分享
  17. 利用绝对值编码器计算odom阿克曼运动学模型
  18. 如何将文件夹中的mp3按照歌手分类排序
  19. matlab 鲁棒优化,yalmip求解鲁棒优化
  20. E. Replace With the Previous, Minimize

热门文章

  1. 店铺管理也要996!和996相比,选个靠谱的店铺销售管理软件更重要
  2. .NET发送邮件和接收邮件
  3. 穆利堂强烈推荐商业模式新生代.ppt
  4. 一串数字字符两个一组用英文逗号隔开
  5. 基于局部能量特征和拉普拉斯金字塔的图像融合
  6. keepalived使用
  7. 求sinx的近似值 c语言,用C语言求多项式求sinx的近似值。
  8. 如何清除网页的bho插件
  9. Windows中,win10开机界面,显示的图片存放地址
  10. QNAP 威联通磁盘分区探索与数据导出