文档章节

Struts2工作原理以及核心思想

architect刘源源
 architect刘源源
发布于 2018/04/24 13:12
字数 1683
阅读 49
收藏 3

Struts2

JAVA基础学完,肯定是要面临三大框架的学习的,作为初学者,了解三大框架的原理,设计目的是首要任务,只有在把握了框架的设计目的以后,才能有针对性的取学习使用框架,这里从strue2框架开始,介绍三大框架,让新手能有一个总的了解跟思维导图。

 

1. 什么是Struts2?

 

  1. Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型 
    由传统Struts1和WebWork两个经典框架发展而来
  2. Strust2 核心功能 
    (1)允许POJO(Plain Old Java Objects)对象 作为Action 
    (2)Action的execute 方法不再与Servlet API耦合,更易测试 
    (3)支持更多视图技术(JSP、FreeMarker、Velocity) 
    (4)基于Spring AOP思想的拦截器机制,更易扩展 
    (5)更强大、更易用输入校验功能

 

2. 定位

 

  SSH框架系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
  • 1
  • 2

这里写图片描述 
Struts2作为表现层的框架设计存在,Hibernate处于数据持久层,Spring处于业务逻辑层,担任连接Struts和Hibernate桥梁的角色。系统的整个层次关系可以一目了然。

 

3. 技术优势

 

Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进行程序设计。 
二是提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。 
因为struts2有这样目标,并且有这样的优势,所以,这是我们学习struts2的理由,下面,我们在深入剖析一下struts的工作原理。

这里写图片描述

  • ActionServlet,前端控制器

    1、根据相应的规则截取Http请求的URL 
    2、将Http请求分发到相应的Action处理

  • ActionForm,相当于实体

    1、收集表单数据,将表单数据转换成相应的数据类型

  • Action,业务层控制器

    1、 取得表单数据 
    2、调用业务逻辑 
    3、返回转向信息

 

4.深入理解Struts2的工作过程

 

  • 工作流程图

这里写图片描述

  • 工作原理图 
    这里写图片描述

    (1) 客户端(Client)向Action发用一个请求(Request) 
    (2) Container通过web.xml映射请求,并获得控制器(Controller)的名字 
    (3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter 
    (4) 控制器(Controller)通过ActionMapper获得Action的信息 
    (5) 控制器(Controller)调用ActionProxy 
    (6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。 
    (7) ActionProxy把request请求传递给ActionInvocation 
    (8) ActionInvocation依次调用action和interceptor 
    (9) 根据action的配置信息,产生result 
    (10) Result信息返回给ActionInvocation 
    (11) 产生一个HttpServletResponse响应 
    (12) 产生的响应行为发送给客服端。 
    StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调StrutsPrepareAndExecuteFilter,那么,他们之间真正的区别目的在哪里呢,作者特地去百度了下。

    - StrutsDispatch和StrutsPrepareAndExecuteFilter区别

FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.! 
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.! 
这样的改革当然是有好处的.! 
为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html! 
那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.! 
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.! 
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!

 

5.Struts2的下载和安装 
http://struts.apache.org/download.cgi 去下载Struts2 最新版

 

  • struts2目录结构

    apps 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的 
    docs 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等 
    lib 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库 
    src 该文件夹下包含了Struts2框架的全部源代码 
    开发时没必要将lib目录下jar文件全部复制到项目中

  • Struts运行必要jar包

    struts2-core-2.3.1.1.jar:Struts 2框架的核心类库 
    xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xwork 
    ognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language), 
    struts2框架通过其读写对象的属性 
    freemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写 
    commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志 
    包来支持Log4J和JDK 1.4+的日志记录。 
    commons-fileupload-1.2.2.jar: 文件上传组件,2.1.6版本后需要加入此文件 
    commons-io-2.0.1.jar:传文件依赖的jar包 
    commons-lang-2.5.jar:对java.lang包的增强 
    开发中为了方便导入,可以使用app/struts2-blank.war 携带jar包

 

6.第一个Struts2应用入门

 

  • 创建WEB 工程
  • 导入必要jar包
  • 编写JSP 页面
  • 编写Action 服务器端处理逻辑
  • 进行框架配置web.xml、struts.xml
  • 运行测试

(1) 编写JSP页面 
helloword.jsp (发起请求页面)

<a href="${pageContext.request.contextPath}/hello.action"> helloworld</a>
  • 1

添加对Struts2 框架的访问链接,默认情况下框架接受以.action请求,并进行处理

success.jsp (结果页面)

<h1>你好,Struts2<h1>
  • 1

结果页面显示 struts2框架访问成功

(2) 编写Action处理访问Struts2框架请求

public class HelloAction {
    public String execute(){
        System.out.println("hello world");
        return "success"; // 结果页面命名
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

struts2 的Action类似以前编写的Servlet程序,可以处理用户提交请求,但是Struts2的Action可以POJO对象

(3)配置Struts2核心控制器 
web.xml

<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>
过滤器配置/* , 但是struts2 默认处理.action结尾请求,分发到相应Action类
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(4)配置struts.xml 
在src目录下建立struts.xml 
参加doc下 hello-world-using-struts-2.html

这里写图片描述

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 167
博文 555
码字总数 935372
作品 0
浦东
程序员
私信 提问
struts2的核心和工作原理

设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server H...

白志华
2015/09/28
109
0
struts2的核心和工作原理

Struts 2定义:Struts 2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts 2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的...

李序锴
2017/11/09
0
0
关于 Struts2 和 SpringMVC 区别?

又是一个常问的面试题,真是面试一次长一次见识。 那我们先就从原理出发: springMVC 原理(见下图): SpringMVC 流程 1、 用户发送请求至前端控制器 DispatcherServlet。 2、 DispatcherSe...

举个_栗子
2017/11/03
69
0
《Struts2技术内幕》 新书部分篇章连载(一至五)连接

《Struts2技术内幕》 新书部分篇章连载(一) 《Struts2技术内幕》 新书部分篇章连载(二) 《Struts2技术内幕》 新书部分篇章连载(三) 《Struts2技术内幕》 新书部分篇章连载(四) 《Str...

ddatsh
2011/10/28
628
3
Mark一下,关于Struts开源框架学习

由于本书尚未出版,我在这里只能给出部分样章供大家参考。 《Struts2技术内幕》 新书部分篇章连载(一) 《Struts2技术内幕》 新书部分篇章连载(二) 《Struts2技术内幕》 新书部分篇章连载...

DustLeon
2011/10/28
125
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部