基于MVC的应用框架之Struts前奏
1.JSP&Servlet中的MVC
MVC的关键是,业务逻辑要与表示分离。通过把业务逻辑放在一个“模型”中,这样业务逻辑本身就能作为一个可重用的JAVA类存在。

在JSP&Servlet中,servlet充当cotroller的角色,它的工作流程如下:
- 获取请求数据封装;
- 调用服务方法;
- 跳转(转发/重定向);
2.通用的ActionServlet
在JSP&Servlet中,用户的每个不同请求都需要一个servlet控制器处理,并且进行servlet的配置。由于servlet的工作流程的相似性,为了避免创建多个servlet,可以做一个通用的servlet(ActionServlet),它的工作流程如下:
- 根据请求的URL,得到业务处理Action类方法;
- 调用Action类中的方法,获得返回标记;
- 根据返回标记得到转发方法以及转发页面;
- 转发;
原本需要针对每个请求创建多个servlet,现在只需要对应每个请求创建一个Action类,只用一个servlet就可以完成控制器的功能。URL对应的Action类和Action类中的方法,返回值标记对应的转发方法和转发页面都要写在配置文件中。这个配置文件结构如下:

ActionServlet的具体工作流程如下:
- 获取请求URL,得到路径名;
- 根据路径名,读取配置文件,得到业务处理的Action的全名及处理方法;
- 利用反射机制创建对象,调用方法获取返回标记;
- 根据返回标记,读取配置文件,得到对应的转发类型和转发页面;
- 转发;
3.读取配置文件
由于需要多次查询配置文件(每个请求),所以配置文件最好只读一次,可以在ActionServlet的init()方法中读取配置文件。因为servlet的init()只在servlet初始化时执行一次,而且是单例的。
用JAVA类封装struts.XML
- action节点--->ActionMapping(name,className,method,Map(String,Result) results属性)
- result节点--->Result(name,type,page属性)
- 所有action-->ActionMappingManager(Map(String,ActionMapping) allActions属性)
ActionMappingManager类在构造函数中读取struts.XML文件,将其封装在一个Map(String,ActionMapping) allActions对象中,并提供一个返回ActionMapping的getActionMapping(String actionName)方法,使ActionServlet可以通过请求URL得到响应的ActionMapping对象。ActionServlet在init()方法中初始化ActionMappingManager对象,从而保证只读取struts.XML一次。
4.struts开发步骤
有了通用的ActionServlet,struts开发只需要两步:
写Action类;
配置Action;
基于MVC的应用框架之Struts前奏的更多相关文章
- 十三、MVC的WEB框架(Structs2)
一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...
- struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb
在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...
- 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)
Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...
- Struts2是一个基于MVC设计模式的Web应用框架
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. Struts ...
- Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- asp.net -mvc框架复习(10)-基于三层架构与MVC搭建项目框架
一.三种模式比较 1.MVC框架(适合大型项目) (1).V视图 (网页部分) (2).M模型 (业务逻辑+数据访问+实体类) (3).C控制器 (介于M和V之间,起到引导作用) 2.三层架构 (1) ...
- 自定义mvc或mtv框架:基于wsgiref的web框架
把mvc或mtv框架的model数据库,view:html,control逻辑处理,url判别,wsgiref集中在一个文件 代码如下 #!/usr/bin/env python #-*- codin ...
- 基于maven的ssm框架整合
基于maven的ssm框架整合 第一步:通过maven建立一个web项目. 第二步:pom文件导入jar包 (1 ...
随机推荐
- Embed对象
1.EMBED 元素 | embed 对象 http://www.jb51.net/shouce/dhtml/objects/EMBED.html 2. 3.
- x265
1.编译库 https://bitbucket.org/multicoreware/x265/src/tip/build/README.txt?at=default 2.无法定位程序输入点x265_e ...
- zookeeper错误
ZooKeeper JMX enabled by defaultUsing config: /data4/hadoop/zookeeper-3.4.8/bin/../conf/zoo.cfgError ...
- Python核心编程-闭包
百度搜了一下闭包的概念:简而言之,闭包的作用就是在外部函数执行完并返回后,闭包使得收机制不会收回函数所占用的资源,因为内部函数的执行需要依赖外函数中的变量.这是对闭包作用的非常直白的描述,不专业也不严 ...
- --tags --follow-tags 的区别
--tags All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the comm ...
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
/* author:jiangxin Blog:http://blog.csdn.net/jiangxinnju Function:method of Josephus que ...
- [Hadoop 周边] 浅谈大数据(hadoop)和移动开发(Android、IOS)开发前景【转】
原文链接:http://www.d1net.com/bigdata/news/345893.html 先简单的做个自我介绍,我是云6期的,黑马相比其它培训机构的好偶就不在这里说,想比大家都比我清楚: ...
- Compound Interest Calculator2.0
Compound Interest Calculator2.0 1.如果按照单利计算,本息又是多少呢? 2.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多 ...
- hdu 4315 Climbing the Hill(阶梯博弈转nim博弈)
Climbing the Hill Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- java之如何实现调用启动一个可执行文件,exe
/* * 运行可执行文件:.exe * 当要执行一个本地机器上的可执行文件时, * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先 * 使用Runtime类声明一个对 ...