框架与框架模式

框架模式:解决某一类问题的思维模式方法论
框架:在框架模式方法论之上实现的一套成熟的一组组件,供选用完成自己的系统

MVC:全称Model-View-Controller是模型-视图-控制器,MVC是一种框架模式,GOF把MVC看做三种设计模式:观察者模式、策略模式与组合模式

框架模式.jpg

比较常见的框架

  • C++:MFC、gtk
  • java: SSH、SSM、SpringMvc
  • python:django

MVC优点-缺点

  • 对于开发和维护来说成本低,易于维护与修改
  • 耦合性不高,层层之间相互分离各司其职,对开发来说便于扩展

MVC缺点

  • 层层严格分离对调试带来一定的困难
  • 对于特别小的项目,mvc反而会带来更大的工作量以及复杂性

SpringMVC框架

简介

springMVC框架是基于Java的实现了MVC框架模式的请求驱动类型的轻量级框架。

SpringMvc 请求大致流程图

image.png

spring mvc九大组件

  1. HandlerMappings URL和controller对应关系的保存
  2. HandlerAdapters 适配器参数转换
  3. HandlerExceptionResolvers 用来处理异常产生之后的转化器
  4. ViewResolvers 视图解析器
  5. RequestToViewNameTranslator 从request中获取viewName
  6. LocaleResolver 从request中解析出来的locale
  7. ThemeResolver 解析主题
  8. MultipartResolver 多组件文件上传
  9. FlashMapManager 闪存

Spring MVC执行时序图

Spring Mvc常用注解

@Controller

控制器,负责处理由DispatcherServlet分发用户请求由HandlerMapping处理url与Controller中Method一一对应找到对应暴露出去的处理器方法,处理用户请求数据再经过业务处理层处理后封装返回一个Model,然后该Model返回相应的View进行显示

@RequestMapping

@RequestMapping是一个用来处理请求地址映射的注解,可以作用于类或者方法。该注解包含6个属性
value:指定请求的实际地址,指定的地址可以是URL Template模式;
method:指定请求的方法类型;
consumes:指定请求提交的内容类型(Content-Type),例如application/json,text/html;
produces:指定返回的内容类型,仅当请求头部中Accept包含指定类型时方法才进行处理;
params:请求中必须包含某些参数时,方法才进行处理;
headers:请求header中必须包含某些指定的header值,方法才进行处理;

@Resource和@Autowired

@Resource和@Autowired都是bean注入时使用,但是其实@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入;
@Resource和@Autowired的共同点:两者都可以使用在字段或者setter方法上,如果使用在了字段上,那么就不再需要setter方法。

@Resource和@Autowired的不同点:

@Autowired注解是由spring提供的,需要导入
org.springframework.beans.factory.annotation.Autowired,只按照byType进行注入。在默认情况下,它要求依赖的对象必须存在,如果允许null,可以通过属性required设置为false进行设置。如果我们需要辅助通过byName进行装配bean,我们可以结合@Qualifier注解一起使用。

@Resource注解默认是按照byName进行装配bean,由J2EE提供,需要导入javax.annotion.Resource。@Resource注解包含两个重要的属性: name和type,Spring将@Resource注解中的name属性解析为bean的名字,将type属性解析为bean的类型。
当@Resource注解的name属性时,Spring将按照byName方式进行bean注入,找不到将会抛出异常;
当使用type属性时,将按照byType方式进行bean注入,找不到或者找到多个将会抛出异常;
如果同时使用了这两个属性,那么将会从Spring上下文中查找指定类型指定名字bean进行装配,找不到将会抛出异常;
如果两个属性都没有使用,那么将会按照默认方式byName进行bean注入。

@ModelAttribute

@ModelAttribute注解有两种用法:一种是用在拥有返回值的方法上,方法的返回值将会作为Model中指定属性的值;另一种是用在请求处理方法参数上,方法参数将会从Model的属性列表中获取指定属性的值。通过@ModelAttribute(“xxxx”)可以指定属性的名称。在Controller的请求处理方法调用之前,@ModelAttribute注解的方法都会被首先执行。

@SessionAttributes

@SessionAttibutes注解只能用在类上,不能使用在方法上。该注解将Model属性列表中指定的一些属性保存到Session对象中

@PathVariable

该注解用于将请求URL的模板变量提取出来,应用到请求处理方法参数中

@RequestParam

@RequestParam主要用于SpringMVC后台请求处理方法中获取参数,类似与request.getParameter(“name”), 该注解包含三个属性:required, defaultValue, value,其中required表示请求中是否必须包含该参数,defaultValue表示请求中没有包含该参数时的默认值,value表示传入的参数的名称

@ResponseBody

该注解用于将Controller请求处理方法返回的对象,通过适当的HttpMessageConverter转换为指定的格式,保存到Response对象的body区

@Component

相当于通用的注解

@Repository

用于注解DAO层

一个简单的SpringMVC项目

项目结构图

image.png

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>springMVC1</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>springMVC</servlet-name><!-- 请求触发器 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup><!-- 提前启动 --></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern><!-- 或*.action --></servlet-mapping><!-- 解决springMVC的post乱码 --><filter>  <filter-name>encodingFilter</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <init-param>  <param-name>encoding</param-name>  <param-value>UTF-8</param-value>  </init-param>  <init-param>  <param-name>forceEncoding</param-name>  <param-value>true</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>encodingFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

springMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--  配置controller层路径扫描  com.qfedu.springmvc.controller  --><context:component-scan base-package="com.springmvc.controller"></context:component-scan><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean>
</beans>

Controller

@Controller
public class HelloWorld {@Resourceprivate ISysMonitorService sysMonitorService;@RequestMapping("/hello")public String helloworld() {return sysMonitorService.query();}
}

Service

public abstract interface ISysMonitorService {String query();
}
@Service
public abstract class SysMonitorServiceImpl implements ISysMonitorService {@Autowiredprivate ISysMonitorDao iSysMonitorDao;public String query() {return iSysMonitorDao.query();}
}

Dao

public interface interface ISysMonitorDao{String query();
}
@Repository
public interface SysMonitorDaoImpl implements ISysMonitorDao{public String query() {// 数据库查询调用return "Hello World";}
}

学习更多JAVA知识与技巧,关注与私信博主(学习)

spring mvc框架、mvc框架模式相关推荐

  1. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  2. 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

    现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...

  3. spring框架mvc框架_Spring的MVC测试框架入门–第1部分

    spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...

  4. spring框架mvc框架_Spring MVC测试框架入门–第2部分

    spring框架mvc框架 这个迷你系列的第一个博客介绍了Spring MVC测试框架,并演示了其在单元测试Spring MVC Controller类中作为控制器而不是POJO进行单元测试的用途. ...

  5. spring框架mvc框架_5篇Spring框架书籍,通过MVC学习Spring

    spring框架mvc框架 Spring Framework is one of the most widely used Java EE Frameworks. It's an open sourc ...

  6. SSM框架实现用户查询、注册、登录——IDEA整合Spring、Spring MVC、Mybatis 框架

    目录 零.前言 一.说明 1.整合说明 2.最终目标 3.数据库准备 二.搭建整合环境 1.创建 maven 工程 2.导入依赖坐标 3.创建java和resources文件夹 4.创建类和接口文件 ...

  7. php cli python,PHP MVC框架 CodeIgniter CLI模式简介

    PHP MVC框架 CodeIgniter CLI模式简介 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/7/25 让我们以Hello World为例,首先创建一个简单的 ...

  8. JSPssh物流便利店管理系统SSH 框架 MVC 模式 mysql数据库

    一.源码特点     JSPssh物流便利店管理系统 是一套完善的WEB设计系统,对理解JSP java 编程开发语言有帮助,系统采用ssh框架 MVC模式进行开发,系统具有完整的源代码和数据库,系统 ...

  9. ssh名片管理系统ssh框架 MVC模式myeclipse开发

    一.源码特点     JSPssh名片管理系统 是一套完善的WEB设计系统,对理解JSP java 编程开发语言有帮助,系统采用ssh框架 MVC模式进行开发,系统具有完整的源代码和数据库,系统主要采 ...

  10. JSP 房产租赁销售管理系统ssh框架 MVC模式mysql数据库

    一.源码特点     JSP 房产租赁销售管理系统  是一套完善的WEB设计系统,对理解JSP java 编程开发语言有帮助,系统采用ssh框架 MVC模式进行开发,系统具有完整的源代码和数据库,系统 ...

最新文章

  1. Word文档使用密码加密
  2. redhat 禁止selinux步骤
  3. win32按钮按下不弹起_荣耀亲选智能恒温电热水壶,宝爸冲奶粉再也不做难了
  4. .Net Core功能开关实战
  5. CSS3那些不为人知的高级属性
  6. mysql内部实现原理面试_理解完这些基本上能解决面试中MySql的事务问题
  7. 从留存的本质出发,制定留存策略
  8. jQuery函数 - 左右抖动效果,用于提示
  9. mysql 开发进阶篇系列 34 工具篇 mysqlcheck(MyISAM表维护工具)
  10. codeforces 385C Bear and Prime Numbers
  11. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用...
  12. exec调用oracle,exec 和 call 用法详解
  13. 批量提取html文件数据库,风越批量文本提取器
  14. 常用的3dsmax插件(批处理模型的插件)
  15. 薄织物和隔热材料的热阻及热导率测试中存在的问题
  16. Python中用正则表达式搜索本地英汉词典,找到具有某种pattern的单词
  17. OA系统审批流程思路梳理
  18. 反距离加权插值IDW计算详细步骤
  19. git 将暂存区文件提交_git 暂存区
  20. python文本匹配_python 匹配@

热门文章

  1. 关于使用通用mapper出现的错误
  2. Oracle语法求水仙花数,python实现水仙花数实例讲解
  3. js 动态生成 input 的绑定事件 blur 无效
  4. greenplum 源码解析 FTS辅助进程工作主流程
  5. 用Unity实现景深效果
  6. Led显示屏设备自发现技术实现-上海灵信
  7. windows无法访问共享(linux,smb)
  8. @SuppressWarnings的使用、作用、用法
  9. 如何更改layui弹出层样式
  10. IDEA安装 激活 基本使用