Struts 总结.docx
- 文档编号:9632361
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:102
- 大小:1.30MB
Struts 总结.docx
《Struts 总结.docx》由会员分享,可在线阅读,更多相关《Struts 总结.docx(102页珍藏版)》请在冰豆网上搜索。
Struts总结
Struts
第1章其它
1.1学习的三个阶段:
第一阶段:
JavaSE阶段
侧重于了解Java的内部及其关系。
例如类间的关系,方法间的关系,线程间的关系,类与方法的关系等。
第二阶段:
Web基础阶段
侧重于Web开发的基础知识。
了解B/S模式的基本开发流程及MVC思想。
Oracle数据库,Html,JavaScript,Css,Jsp,Servlet等内容。
第三阶段:
JavaEE阶段
侧重于客户层、Web层、业务逻辑层等层次间的关系,模块间的关系,系统间的关系等。
主要内容:
Struts,Hibernate,ibatis,Spring,Ajax
辅助内容:
Json,UML,设计模式,SVN,Ant,WebService,FreeMarker,FreeChart等
1.2JavaEE高级阶段学习方法:
1.侧重于流程的理解,不要太纠缠于细节
2.遇到不懂得问题,首先尝试阅读英文文档,其次尝试阅读源码,
最后尝试网络搜索
3.开放式学习,提高自学能力,遇到问题多交流多讨论
4.多查资料,"独立思考"
1.如何将源码引入MyEclipse中,结合jar包进行查看
2.如何根据源代码生成帮助文档并转化为chm格式
前提:
将源代码导入项目中,使用MyEclipse导出javadoc文档
(1)安装htmlhelp.EXE
(2)将j2chm.exe工具拷贝到要转化的帮助文档文件夹下,
注意,一定要有index.html文件。
运行,在命令提示符界面,当前文件夹下,运行j2chm即可。
注意:
项目名称、文档内容标题不能含有空格
第2章
Struts
作用:
把请求和视图分开
struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。
我们将看到struts是如何清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序过程的。
我们还将介绍struts提供的类如何使得开发工作更加简单,这些类包括:
●控制程序流程的类
●实现和执行程序事务逻辑的类
●自定义的标记库使得创建和验证HTML表单更加容易
2.1Struts体系结构
让我们从MVC角度观察struts框架中的组件
框架中三个部分:
模型,视窗和控制器。
模型
在struts框架中,模型分为两个部分:
●系统的内部状态
●可以改变状态的操作(事务逻辑)
内部状态通常由一组ActinFormJavaBean表示。
根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。
比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。
当逻辑简单时这个方法很适合。
建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
视窗
由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。
控制器
struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。
2.2Struts框架中的组件
(由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和TagLibrary包含进来,有时间作完替换)
框架中所使用的组件:
ActionServlet
控制器
ActionClass
包含事务逻辑
ActionForm
显示模块数据
ActionMapping
帮助控制器将请求映射到操作
ActionForward
用来指示操作转移的对象
ActionError
用来存储和回收错误
Struts标记库
可以减轻开发显示层次的工作
下面我们看看各自在框架中所扮演的角色和责任。
2.3Struts配置文件
这是将struts组件结合在一起的东东:
struts-config.xml。
默认值
\WEB-INF\struts-config.xml。
配置文件可以定义:
●全局转发
●ActionMapping类
●ActionFormbean
●JDBC数据源
配置全局转发
全局转发用来在JSP页之间创建逻辑名称映射。
转发都可以通过对调用操作映射的实例来获得,例如:
actionMappingInstace.findForward(“logicalName”);
全局转发的例子:
(所有的例子我没有进行解释,一是结合表可以理解,二是例子大部分来自系列四的示例,你应该在作完实验后,再来看一便)
属性
描述
Name
全局转发的名字
Path
与目标URL的相对路径
配置ActionMapping
ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionFormbean相关联。
ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。
所有Action类使用perform()方法实现特定应用程序代码,返回一个ActionForward对象,其中包括响应转发的目标资源名称。
例如:
type="BookAction" name="bookForm" scope="request" input="/CreateBook.jsp"> 属性 描述 Path Action类的相对路径 Name 与本操作关联的Actionbean的名称 Type 连接到本映射的Action类的全称(可有包名) Scope ActionFormbean的作用域(请求或会话) Prefix 用来匹配请求参数与bean属性的前缀 Suffix 用来匹配请求参数与bean属性的后缀 attribute 作用域名称。 className ActionMapping对象的类的完全限定名默认的类是org.apache.struts.action.ActionMapping input 输入表单的路径,指向bean发生输入错误必须返回的控制 unknown 设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作 validate 设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionFormbean的validate()方法来进行输入检查 通过 属性 描述 Id ID ClassName ActionForward类的完全限定名,默认是org.apache.struts.action.ActionForward Name 操作类访问ActionForward时所用的逻辑名 Path 响应转发的目标资源的路径 redirect 若设置为true,则ActionServlet使用sendRedirect()方法来转发资源 配置ActionFormBean ActionServlet使用ActionForm来保存请求的参数,这些bean的属性名称与HTTP请求参数中的名称相对应,控制器将请求参数传递到ActionFormbean的实例,然后将这个实例传送到Action类。 例子: 属性 描述 Id ID className ActionFormbean的完全限定名,默认值是org.apache.struts.action.ActionFormBean Name 表单bean在相关作用域的名称,这个属性用来将bean与ActionMapping进行关联 Type 类的完全限定名 配置JDBC数据源 用 属性 描述 Id ID Key Action类使用这个名称来寻找连接 Type 实现JDBC接口的类的名称 下面属性需要 例子: key=”conPool” type=”org.apache.struts.util.GenericDataSource” autoCommit="true" description="ExampleDataSourceConfiguration" driverClass="org.test.mm.mysql.Driver" maxCount="4" minCount="2" url="jdbc: mysql: //localhost/test" user="struts" password="wrox"/> 属性 描述 desciption 数据源的描述 autoCommit 数据源创建的连接所使用的默认自动更新数据库模式 driverClass 数据源所使用的类,用来显示JDBC驱动程序接口 loginTimeout 数据库登陆时间的限制,以秒为单位 maxCount 最多能建立的连接数目 minCount 要创建的最少连接数目 password 数据库访问的密码 readOnly 创建只读的连接 User 访问数据库的用户名 url JDBC的URL 通过指定关键字名称,Action类可以访问数据源,比如: javax.sql.DataSourceds=servlet.findDataSource(“conPool”); javax.sql.Connectioncon=ds.getConnection(); 2.4Struts运行流程 1.根据访问路径查找web.xml文件,发现过滤器 所以,将所有控制权交给struts框架中的StrutsPrepareAndExecuteFilter类 2.StrutsPrepareAndExecuteFilter类会自动去classes文件夹下查找struts.xml文件 在struts.xml文件中查找是否有对应名字的action,如果找到,就调用其配置的class的类com.ambow.demo.HelloAction。 3.在HelloAction中,自动调用execute方法。 publicStringexecute(){ System.out.println("myexecuterunning"); return"success"; } execute方法必须定义为: publicStringexecute(){} 4.针对execute方法的返回字符串,StrutsPrepareAndExecuteFilter回去查找struts.xml中对应action的result标签里面的name。 如果发现了,就跳转到指定的页面如果没发现,报404错误 2.4.1运行流程图 struts2框架的执行流程: 1)用户发起请求(.action结尾的请求表示请求一个Action) 2)struts2框架的主控器(FilterDispatcher)接收用户发起的请求, 然后判断这个请求交给Action处理还是交给web组件处理. 如果请求的Action或者web组件不存在,那么出现404错误.在整个处理 过程中需要一个辅助对象: Action映射器(ActionMapper). 3)第二步判断的结果是交给Action处理,并且存在对应的Action. 那么根据struts.xml文件中对此Action的配置信息,首先执行拦截 此Action的所有拦截器,然后再执行请求的Action对象.在这个处理 过程中需要辅助对象: Action代理(ActionProxy)、配置管理器(ConfigurationManager)、ActionInvocation. 4)Action执行完毕之后返回一个结果(此结果用字符串表示),这个结果 经过拦截Action的所有拦截器之后,返回给主控器.主控器根据此结果 从配置文件中找到真正的路径,然后将请求转发给对应的视图. 5)由视图向客户端作出响应 上图来源于Struts2官方站点,是Struts2的整体结构。 一个请求在Struts2框架中的处理大概分为以下几个步骤 1客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如: SiteMeshPlugin) 3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 6ActionProxy创建一个ActionInvocation的实例。 7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。 返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。 在表示的过程中可以使用Struts2框架中继承的标签。 在这个过程中需要涉及到ActionMapper 在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。 Struts2: (1)客户端提交一个HttpServletRequest请求(.action或JSP页面) (2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等 (3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器 (4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断) (5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理. (6)ActionProxy通过ConfigurationManager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类. (7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器) (8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器. (9)最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出. 2.5Struts.xml配置详解 1 DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd" > 2 3 4 -- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 5 6 7 8 -- package提供了将多个Action组织为一个模块的方式 9 package的名字必须是唯一的 package可以扩展 当一个package扩展自 10 另一个package时该package会在本身配置的基础上加入扩展的package 11 的配置 父package必须在子package前配置 12 name: package名称,不可省略 13 extends: 继承的父package名称 14 abstract: 设置package的属性为抽象的 抽象的package不能定义action 值true: false 15 namespace: 定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http: //localhost: 8080/struts2/test/XX.action 16 --> 17 18 19 -- 定义拦截器 20 name: 拦截器名称 21 class: 拦截器类路径,拦截器的实现类 22 --> 23 24 25 -- 定义拦截器栈 --> 26 27 28 29 30 31 32 -- 定义默认的拦截器 每个Action都会自动引用 33 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 34 35 36 37 -- 全局results配置 --> 38 39 40 41 42 -- Action配置 一个Action可以被多次映射(只要action配置中的name不同) 43 name: action名称 44 class: 对应的类的路径 45 method: 调用Action中的方法名 46 --> 47 48 -- 引用拦截器 49 name: 拦截器名称或拦截器栈名称 50 --> 51
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts 总结