Struts2框架介绍

1,一个完整的Java Web所涉及的内容包括:(1)Java Bean组件 (2)EJB组件 (3)自定义的JSP标签

(4)XML (5)Web服务器和应用服务器

2,Java Bean在JSP中的应用

(class中存放的是JavaBean的路径)

(1)获取JavaBean属性:

(2)给某个JavaBean属性赋值:

3,Web组件之间的三种关联关系

(1)请求转发

(2)URL重定向 response.sendRedirect(...)

(3)包含 <%@ include file=...%>

4,MVC:Model-View-Countroller.即模型-视图-控制器,是一种软件设计模式。它强制地把应用程序的输入、处理和输出分开。MVC把应用程序分成三个核心模块:模型、视图和控制器。对于基于请求/响应方式的WEB应用,模型位于WEB服务器端,视图位于用户浏览器端。

5,MVC处理过程:

首先,控制器接收用户的请求,并决定应该调用哪个模型进行处理

然后,模型根据用户请求进行相应的业务逻辑处理,并返回数据

最后,控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户

用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能。

6,Struts:实质上是在JSP Model2上实现的一个MVC框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图由一组Jsp文件构成。

7,ActionForm Bean:Struts框架利用文本进行视图和控制器之间表单数据的传递。

8,Struts的控制器:由ActionServlet类和Action类来实现

ActionServlet类:在MVC模型中扮演中央控制器的角色,主要负责接收HTTP请求信息,根据配置文件struts_config.xml的配置信息,把请求转发给适当的Action对象。

Action类:负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。

在配置文件中,每一个Action的映射信息都通过一个元素来配置。

9,软件的分层结构:表现层、业务逻辑层、数据访问层。

10,Web项目的结构:src目录下存放Java源文件,源文件编译后会自动输出到WebRoot/WEB-INF/classes目录下,WebRoot是Web应用程序的根目录。有时候各个分块代码是正确的,但就是发送错误,可能就是因为文件放置的位置不当造成的,可通过调试解决。

11,FilterDispatcher:Struts2框架是基于MVC模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的。

12,web.xml和struts.xml

web.xml:Web应用程序的部署描述符文件

struts.xml:对action进行配置

13,Struts 2 的开发步骤:

(1)准备类库

(2) 在web.xml文件中配置FilterDispatcher。

(3)开发action。针对每一个功能点,编写一个action类。

(4)编写相关的结果页面。针对action返回的结果代码,编写相应的结果页面

(5)在Web应用程序的WEB-INF/classes目录下创建struts.xml,对action进行配置,将页面与结果页面关联在一个。

14,使用领域对象来接收用户输入。传统的Web应用程序调用HttpServletRequest的getParameter方法从请求中获取数据。Struts2的action完全与Web层解耦,要获取Web层的数据,需要使用ActionContext,它为action提供了一个执行上下文。

15,Struts 自动实例化对象特性

该请求等同于调用:action.getUser().setUsername(...);

Struts2 会遍历所有的请求参数,自动依次实例化任何用于填充数据的对象。上述例子Struts将依次调用一下方法:

action.getUser();

action.setUser(new User());

action.getUser().setUsername();

16,struts2的执行流程:

\ |/ struts.xml

\|/

类的实现

17,使用action的属性接收用户输入,此时不需要使用模型对象。

18,Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用对应的Map对象来保存和读取数据。

使用com.opensymphony.xwork2.ActionContext类

ActionContext是action执行的上下文

(1)get(object key):得到请求Map对象,需要为get()方法传递参数"request"。

(2)getSession():HttpSession的Map对象

(3)getApplication:ServletContext的Map对象

19,Struts2框架由两部分组成:XWork2和Struts。XWork提供了很多核心功能:IoC容器,强大的表达式语言(OGNL),数据类型转换,验证和可插入的配置。XWork框架的核心概念包括:aciton、拦截器和result。

拦截器的工作原理:

一个HTTP请求到达Struts2 的FilterDispatcher之后,就会被转换成一个action command。这个action command在穿越了一系列Struts2和XWork的拦截器之后,最后执行用户编写的Action实例。在Action执行之后,响应还会穿越相同的拦截器(相反顺序),最后通过Struts2的HttpServletResponse转换成Web可识别的响应(例如JSP)。

20,Struts2的体系结构

(1)一个初始的请求到达Servlet容器(tomcat)后,将被传递给一个标准过滤器链。

(2)接下来,必须的FilterDispatcher被调用,它轮询ActionMapper以便确定这个请求是否应该调用一个action.

(3)如果ActionMapper确定一个Action应该被调用,那么FilterDispatcher就把控制权委派给ActionProxy,ActionProxy从struts.xml文件中读取配置信心。

(4)ActionProxy创建一个实现了命令模式的ActionInvocation。ActionInvocation在调用action之前会依次调用所用配置的拦截器。

(5)一旦action执行返回,ActionInvocation就要查找这个acion的结果码所对应的result(action的结果码和result的映射在struts.xml文件中配置),然后执行这个result。

21,Struts2的配置文件

(1)web.xml:Web部署描述符,包括所有必需的框架组件。由开发人员编写。

(2)struts.xml:主要的配置文件,包含result映射,action映射,拦截器配置等。由开发人员编写

(3)struts.properties:struts2框架的属性配置,由开发人员编写

(4)struts-default.xml:Struts2提供的默认设置,由框架提供。

(5)strits-plugin.xml:struts2框架的插件所用的配置文件,由插件提供。

22,对Struts2标签库的配置

的子元素的内容:/struts-tags

/struts-tags

23,Bean配置

Struts2是一个可扩展的框架,框架的核心组件都是可配置的,这些组件通过Struts2自己的依赖注入容器来装配。通过bean元素来配置组件实现类。

24,包配置

Struts2中的包类似于Java中的包,提供了将action、result、拦截器等组织为一个逻辑单元的一种方式,提高了重用性。Struts2中的包可以扩展另外的包,从而”继承”原有包的所用定义。

package元素的属性

name:被其他包引用时的键extends:指定要扩展的包

namespace:指定名称空间abstract:声明包抽象的

25,名称空间(Namespace)配置

namespace属性可以将包中的action配置为不同的名称空间,这样在不同的名称空间中可以使用同名的action。

26,包含(include)配置

分而治之,在每个模块单独提供一个配置文件,对其进行配置,然后再struts.xml文件中使用include元素来包含其他的配置文件

27,拦截器(Interceptor)配置

拦截器允许你在action执行前后插入代码执行。拦截器可以为action动态添加输入验证、对象组装、权限控制、日志记录等功能,而不需要修改action。

为action配置引用的拦截器,首先需要在interceptor元素中使用interceptor元素定义拦截器,然后再action元素中使用interceptor-ref元素指定引用的拦截器。interceptor元素有两个必需的属性:name和class。前者指定拦截器的名字,后者指定拦截器的完整类名。

如果一个action需要多个拦截器,可以将多个拦截器组合在一起,组成一个拦截器栈,然后再action中直接引用拦截器栈即可。interceptor-stack。

如果多个action都需要引用相同的拦截器,那可以使用default-interceptor-ref元素来定义一个默认的拦截器栈引用,这样就不需要为每个action指定引用信息了。

28,Action映射

action映射:将一个请求URI(即aciton名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。struts.xml文件中的每一个action元素就是一个action映射。

action元素的属性

name:action的名字,用于匹配请求URIclass:Action实现类的完整类名

method:执行Action时调用的方法converter:应用于action类型转换器的完整类名

29,method属性

在配置action时,可以通过action元素属性来指定action调用的方法,所指定的方法必须遵循与execute方法相同的格式。这样就可以在同一个类中完成相关的任务,而不需要去编写不同Action类。(解释:本来一个任务对应一个class,现在一个任务对应一个class的一个方法)

30,模拟struts中的ForwardAction

在struts中,所有的URL都指向action,而不是JSP页面。但有时只需要转发请求,不想再编写action类的做法:

将action元素的class属性省略,那将默认使用com.opensymphony.xwork2.ActionSupport类,如:

/index.jsp

31,默认的action

如果请求的一个action不存在,将显示错误,此时可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。

默认的action使用default-action-ref元素来声明。

32,result:一个result代表一个可能的输出。当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。

33,result元素的属性

name:指定result的逻辑名type:指定result类型,不同类型的result代表了不同类型的结果输出

34,result映射配置小记

绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;相对路径不以斜杠(/)开头,相对于当前执行的action路径。

35,struts2中预定义的结果类型:

(1)dispatcher:用于web资源的集成,包括jsp的集成

(2)redirect:用于重定向到另外的URL(WEB资源)

(3)redirectAction:用于定向到另外的action映射

.......

36,dispatcher结果类型

有两个属性:location和parse。可通过struts.xml配置文件中的result元素的param子元素来设置。其中location参数用于指定action执行完毕后要转向的目标资源,parse属性是一个布尔类型的值,如果为true,则解析location参数中的OGNL表达式。

37,全局结果

全局结果在包中定义,在这个包中的所有action可以共享结果。全局结果也是使用result元素来配置,只不过不是在aciton元素中嵌套,而是在global-results元素中嵌套。

38,动态结果

动态结果:在配置时不知道要执行哪一个结果,在运行时刻才能确定执行的结果

${属性名}

39,异常处理

在struts.xml文件中配置异常映射,将一种异常类型和一个结果对应起来,由这个结果负责对异常作出响应。如果Action的方法在执行期间抛出一个异常,这个异常会被框架自动捕获,然后框架根据配置文件中的异常映射,找到预定义的结果来对异常作出响应。

异常映射拦截器已经配置好,剩下的工作就是使用exception-mapping元素来配置异常映射,将异常类型映射到指定的结果。exception-mapping有两个属性:exception和result。前者指定一个异常类型的完整类名,后者指定对该类型进行处理的结果的名字。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容