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前奏的更多相关文章

  1. 十三、MVC的WEB框架(Structs2)

    一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...

  2. struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb

    在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...

  3. 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)

    Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...

  4. Struts2是一个基于MVC设计模式的Web应用框架

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

  5. Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)

    对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...

  6. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  7. asp.net -mvc框架复习(10)-基于三层架构与MVC搭建项目框架

    一.三种模式比较 1.MVC框架(适合大型项目) (1).V视图 (网页部分) (2).M模型 (业务逻辑+数据访问+实体类) (3).C控制器 (介于M和V之间,起到引导作用) 2.三层架构 (1) ...

  8. 自定义mvc或mtv框架:基于wsgiref的web框架

    把mvc或mtv框架的model数据库,view:html,control逻辑处理,url判别,wsgiref集中在一个文件 代码如下 #!/usr/bin/env python #-*- codin ...

  9. 基于maven的ssm框架整合

    基于maven的ssm框架整合 第一步:通过maven建立一个web项目.                第二步:pom文件导入jar包                              (1 ...

随机推荐

  1. Broadcast Receviewer

    使用Braodcast Receiver 一.新建一个空的工程,命名为LearnBroadcastReceiver 二.为主界面添加一个按钮 三.新建一个broadcast receiver,命名为M ...

  2. scala调用java的方法,返回了一个对象链表List<Student>,在scala中遍历该链表获取指定Student的名字name

    假设Student类如下: class Student { private int no; private String name; public int getNo() { return no; } ...

  3. http协议简述

    HTTP协议 客户端连上web 服务器后,若想获得 web 服务器中的某个 web 资源,需遵守一定的通讯格式, HTTP 协议用于定义客户端与 web 服务器通迅的格式. WEB浏览器与 WEB 服 ...

  4. libsvm 之 easy.py(流程化脚本)注释

    鉴于该脚本的重要性,很有必要对该脚本做一个全面的注释,以便可以灵活的使用libsvm. #!/usr/bin/env python # 这种设置python路径的方法更为科学 import sys i ...

  5. 【转】Android应用开发之PNG、IconFont、SVG图标资源优化详解

    1 背景 最近因为一些个人私事导致好久没写博客了,多事之年总算要过去了,突然没了动力,所以赶紧先拿个最近项目中重构的一个小知识点充下数,老题重谈. 在我们App开发中大家可能都会有过如下痛疾(程序员和 ...

  6. OneProxy与其它数据库中间件的对比

    OneProxy 优点 性能 缺点 闭源,被商业公司掌控,到时候随别人蹂躏 可维护性极差,缺乏友好的出错信息,光维护这个环节就被他人掌控 定价不明 有没有这样的公司? 大到10wtps,但是没人能理解 ...

  7. php 变量原理

    1.php作为一种弱类型语言,不需要显式的指明变量的类型,但是php变量也是有类型的,php变量包含以下8种变量(三大类) a.标量类型:boolean,integer,float(double),s ...

  8. 谈谈JPA-02-HelloWorld

    使用JPA持久化对象的步骤 创建 persistence.xml, 在这个文件中配置持久化单元 需要指定跟哪个数据库进行交互; 需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性 创建实体 ...

  9. [svn] 分支开发

    参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...

  10. (17)odoo方法和修饰器

    ---------------------更新时间:11:06 2016-09-27 星期二18:06 2016-09-18 星期日10:31 2016-03-01 星期二-------------- ...