1)FilterDispatcher

  Struts2的前端控制器,也是Struts2的MVC中的控制器部分。在实际开发中,只需要在web.xml中配置一次即可,如下所示:

  <filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  但是一定要注意,如果还有其他的过滤器,那么FilterDispatcher的配置通常要出现在最后。

  2)Action

  动作类,作为MVC中的模型部分,既封装业务数据,也负责处理用户的请求,execute方法就是默认的动作处理方法。

  3)Result

  结果,代表Action运行之后要转向的下一个页面。Struts2本身支持多种结果类型,如jsp、velocity、freemarker、jasperreports等,在同一个web应用中,各种结果类型还能混用。

  4)Interceptor

  拦截器是Struts2中一个重要的概念。每一个Struts2工程都使用了拦截器,只是使用了Struts2自带的内建拦截器与默认拦截器配置而已。

  Struts2的许多功能都是由拦截器完成的,比如:

  • 帮你把request参数设置到Action的属性中。
  • 实现上传文件
  • 防止重复提交
  • 实现验证框架
  • 通用错误处理
  • 程序国际化
  • 等等……

  5)ActionContext、值栈与OGNL

  Struts2在每个Action刚开始运行的时候,都会单独为它建立一个ActionContext,把所有能访问的数据,包括请求参数(request的parameter)、请求的属性(request的Attribute)、会话(session)信息等等,都放到ActionContext中。这样一来,在以后取值、赋值的时候,就只需要访问ActionContext就可以了,所以说ActionContext可以被认为是每个Action拥有的一个独立的内存数据中心。

  对象图导航语言OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL)。它通过简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。

  值栈可以用来容纳多个对象,主要用来存放一些临时对象。当使用OGNL访问值栈中对象的属性的时候,指定属性的引用会引用更靠近值栈栈顶方向对象,晚进栈的对象会覆盖早进栈的对象。简单点说,Struts2用值栈为我们使用Struts2做了很多引用上的简化,主要是缩短了OGNL表达式的长度。另外,值栈也可以作为一个内存数据中心,来存放一些Struts2标签临时定义的数据。

  6)Struts2标签

  Struts2的标签库功能强大,使用简单,大大简化了视图开发的工作。而且,它与框架的其他部分也非常自然的结合,如国际化、验证等等。

  7)自动类型转换

  在Action中可以有多种方式来对应页面的数据,从而自动获取页面的值。但是,从request里面接收的值都是String类型的,而Action的属性可以是各种类型的。这就需要Struts2的类型转换机制来支持,它节省了我们大量的手工进行类型转换的开发时间。

  Struts2已经内置了大量的类型转换方式:

  • 各种私有类型及其包装类
  • 常见的各种数据类型,如String、Date、BigDecimal等等
  • 各种集合概念,包括数组、Set、List、Map
  • 甚至可以是枚举

  Struts2提供的这些就已经够用了,还可以自己实现特殊的类型转换器,以满足特殊的功能需要。

  8)国际化

  i18n通常作为“国际化”的简称,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。

  web应用通常应该支持多国语言,可以根据客户端请求所来自的国家和语言显示不同语种的用户界面。这样,当需要在应用程序中添加对一种新语言的支持时,就无需修改应用程序的代码了。

  Struts2非常自然的实现了国际化,我们不需要考虑更多的事情,只是按照Struts2的要求,把不同语言的信息,放到对应的位置即可。

  9)验证框架

  作为一个成熟、稳定的web应用,无论如何服务器端验证是少不了的。通常情况下,我们不会完全相信客户端传递过来的数据,应该在真正调用业务逻辑之前对数据进行校验,如果用户提交的数据不符合要求,就不会去调用业务逻辑。

  Struts2为我们提供了一套完整、严密,可扩展的验证框架,保证在Action运行之前会判断用户提交的信息是否完整、符合条件。

  参考资料:http://www.iteye.com/topic/1124526

【struts2】核心概念的更多相关文章

  1. Struts2的概念

    Struts2的概念 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数 ...

  2. Struts2框架学习(一)——Struts2的概念及搭建

    一.Struts2的概念 使用优势:1)自动封装参数 2)参数校验 3)结果的处理(转发|重定向) 4)国际化 5)显示等待页面 6)防止表单重复提交 Struts2具有更加先进的架构以及思想 Str ...

  3. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  4. Javascript本质第一篇:核心概念

    很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...

  5. [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)

    本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...

  6. spring技术核心概念纪要

    一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...

  7. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  8. Playmaker Input篇教程之引入的核心概念

    Playmaker Input篇教程之引入的核心概念 Playmaker Input引入的核心概念 Playmaker引入了4个核心概念:状态机.动作.变量和事件.了解它们是学习操作Playmaker ...

  9. Maven的几个核心概念

    POM (Project Object Model) 一个项目所有的配置都放置在 POM 文件中:定义项目的类型.名字,管理依赖关系,定制插件的行为等等.比如说,你可以配置 compiler 插件让它 ...

  10. 刀哥多线程GCD核心概念gcd

    GCD GCD 核心概念 将任务添加到队列,并且指定执行任务的函数 任务使用 block 封装 任务的 block 没有参数也没有返回值 执行任务的函数 异步 dispatch_async 不用等待当 ...

随机推荐

  1. cyml

    bin/kafka-topics.sh --create --replication-factor 1 --partitions 1 --topic mc_logger2 --zookeeper lo ...

  2. spring结合mybatis实现数据库读写分离

    随着系统用户访问量的不断增加,数据库的频繁访问将成为我们系统的一大瓶颈之一.由于项目前期用户量不大,我们实现单一的数据库就能完成.但是后期单一的数据库根本无法支撑庞大的项目去访问数据库,那么如何解决这 ...

  3. Linux网络编程:基于TCP的程序开发回顾篇《转》

    面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你 ...

  4. 基于redis分布式缓存实现(新浪微博案例)转

    第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来 ...

  5. gcc 0长数组学习

    首先,我们要知道,0长度的数组在ISO C和C++的规格说明书中是不允许的.这也就是为什么在VC++2012下编译你会得到一个警告:“warning C4200: 使用了非标准扩展 : 结构/联合中的 ...

  6. .net 关于匿名类型的特性

    匿名类型 1: var n1 = new { name = "name1", age = 40 }; 2: var n2 = new { name = "name2&qu ...

  7. css规范 - bem

    用我的话简述来说,即 B:何种元素 E:何种模块使用它(header,footer)等 M:描述它是做何种事情的 例如就是我有个主页,名称是:index.html index_header_logo ...

  8. linux下jdk_tomcat+mysql配置那点事

    (1)上传环境压缩包 apache-tomcat-7.0.47.tar.gz, jdk-7u71-linux-x64.gz, mysql-5.6.14.tar.gz通过xftp工具上传到/usr/lo ...

  9. sql assist字符匹配智能提示

  10. JavaWeb应用项目中文乱码的解决

     转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6383542.html 在把web项目成功部署到云主机后,通过浏览器成功地访问到了你的网站,却发现页面里本该由 ...