Struts2工作原理解析

 struts2框架是SSH框架集中的框架之一,是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器层(Controller)来建立模型与视图的数据交互。

  在使用struts2框架的过程中,需要两个配置文件,分别为web.xmlstruts.xml,服务器一启动就加载web.xml的配置,web.xml启动时,在StrutsPrepareAndExecuteFilterinit()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作;struts2读取到struts.xml后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。

一、访问流程:

(1)客户端提交请求

(2)请求被提交到一系列过滤器(先ActionContentCleanUp,然后其他过滤器,最后FilterDispatcher

(3)FilterDispatcher咨询ActionMapper是否需要调用某个Action来处理这个请求,如果ActionMapper决定调用某个ActionFilterDispatcher则把请求的处理交给ActionProxy

(4)ActionProxy通过Configuration Managerstruts.xml)询问框架的配置文件,找到需要调用的Action类。

(5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)

(6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result

 

二、struts.xml的文件组成

1XML 头部声明为<?xml version="1.0" encoding="UTF-8"?>

2DTD约束文件<!DOCTYPE struts PUBLIC

"-//Apache Software undation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

DTD文件是一种保证xml文档格式正确的有效方法,通过比较xml文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。

3struts 根标签

4devMode 开发模式 <constant name="struts.devMode" value="true" />value的值为false的时候,就不是开发模式,修改struts.xml文件之后运行项目需要重启服务器;当value的值为true时,为开发模式,修改struts.xml文件之后运行项目不需要重启服务器就能运行,并且可进行调试信息输出。

5package 包配置

struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。每个package元素定义了一个包配置。常用属性有:

name:必填属性,指定包名;extends可选属性,指定该包继承其他包;namespace:可选属性,用来制定该包的命名空间。考虑到同一个Web应用中需要同名的Actionstruts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action

一般来说,package的使用按照项目的功能模块来划分,从而使得项目更有逻辑性。

6、实现action类:struts2Action是核心内容。struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里应该包含与请求参数对应的属性,并提供settergetter方法。action有以下属性:

nameaction的名称;class:对应的类的路径;method:调用action中的方法名

action中:——>result 结果,有一下属性:

name:返回值,返回值可以是框架提供的常量(SUCCESSFINALLOGININPUT等),也可以自定义

type:默认不写为请求转发,type=redirect表示“重定向”

result之间的路径表示要跳转的路径。

  struts2的优点:

1、结构更加清晰,地址和类之间的映射都配置在struts.xml中,struts2内部按照MVC设计模式设计,并且作为web开发中MVC设计模式中的Controller层。

2、在操作Action时,可以直接使用参数,不需要考虑requestresponsestruts2也提供了ServletActionContext对象,通过方法ServletActionContext.getRequest()获得当前请求的对象requestresponse对象)。

3Action获得页面bean.属性拼装的实体Bean;页面直接获得Action中的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值