SpringMVC先来看一下百度百科中的定义;

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

说一下我对上面定义的理解

      Spring Web是一个大的框架,Spring Web Flow属于Spring Web但是它脱离了Spring Web 属于一个页面流程管理模块,在它的内部实现了页面流程控制功能即Springmvc,这样的框架还有Struts等如果你不想使用内置的框架,就可以使用外置的让spring与其集成,Spring在与别的框架集成这方面做的很不错,比如同hibernate、ibatis等等都有很好的集成实现,在多种视图上Spring使用策略模式实现,上面大家了解的视图技术主要是jsp,对于后面几个不是很了解,

再说一下Velocity它是模板引擎,现在做的这个项目中使用了模板,使用的地方不是很多,在分页的时候使用了这个技术,分页有关的上一页、下一页、总页数、等这些按钮都是在一个一个的模板里面,在模板里面又引用了Pagemodel这个类,编辑模板的时候就会用着模板引擎语法,有关这个模板代码类似于${} JSTL表达式,有关模板实例请看这个分页博客数据分页模块封装。

HelloWorld的一个方法对应于一个Action,

首先,需要引入spring mvc 以及相关jar包,这不可以归为一个框架必有步骤,用到哪个框架都需要引入它用到的jar包或者库文件等,如下:

然后,建立一个HelloWorldController类并实现Controller接口,一般来说呢框架是越轻量级越好,如果新建一个类还需要去实现别的接口或者继承别的类,会使得该类耦合很大,

package com.tgb.web.controller;import java.util.HashMap;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;public class HelloWorldController implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception {System.out.println("nihao shijie");String str="lilongsheng nihao!";Map<String, Object> map=new HashMap<String, Object>();map.put("nihao1", "nihao1");map.put("nihao2", "nihao2");map.put("nihao3", "nihao3");return new ModelAndView("/welcome","map",map);}}

除此之外还需要常用的配置文件web.xml全局文件,和springmvc-servlet.xml框架相关文件,别的框架也会有自己的配置文件

  <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*:config/spring-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></servlet-mapping>
    <!--  视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"></property><property name="suffix" value=".jsp"></property></bean>

效果如下

多方法对应于一个Action的配置(两种方法继承和注解)

假如一个方法对应于一个Action的话是不现实的,开发中方法往往会特别多一个,倘若一个方法对应一个Action那需要写很多Actin,项目会变得很轮,常常是一个一个Action里面写很多个方法这种开发更适合,我们开发是越简单越高效越好。

继承方式,即是让action类继承一个父类,代码如下

public class MutilController extends MultiActionController{public ModelAndView add(HttpServletRequest request,HttpServletResponse response){System.out.println("--------add--------");return new ModelAndView("/multiMethod","method","add()");}public ModelAndView update(HttpServletRequest request,HttpServletResponse response){System.out.println("---------update---------");return new ModelAndView("/multiMethod","method","update()");}

另外还需要配置一个类,该类的作用是解析URL中的参数,确保可以找到每个方法对应的action,看下面配置

   <bean name="/test2/mutil" class="com.tgb.web.controller.MutilController"><property name="methodNameResolver"><ref bean="paramMethodResolver"></ref></property></bean><bean id="paramMethodResolver"  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"><property name="paramName" value="action"></property></bean>

其它的配置同上面的一样,这样就可以完成多方法的访问。

采用注解方式

采用注解减少了action类与其它的类耦合、写起来也觉得快了、不用像struts1/2中的每个action写一个标签、可见以后编程还是朝着注解方面发展,现在很多框架都提供了注解功能,目前我接触过的如EJB、Web Service、JPA、Transaction、hibernate的ORM等,在提供配置文件实现的同时都提供了注解方式实现,相比配置文件注解看起来就简单多了,越来越多的注解也有一个疑问?它是怎么样利用一个小小的注解来封装实现各种功能?也就是说注解是实现的原理是什么?

说了这么多来看一下注解是怎么实现的吧。

@Controller
public class UserController {@RequestMapping(value="/user/addUser",method=RequestMethod.GET)public ModelAndView addUser(){String str="this is addUser-----";return new ModelAndView("/annotation","result",str);}@RequestMapping(value="/user/delUser",method=RequestMethod.GET)public ModelAndView delUser(){String str="this is delUser-----";return new ModelAndView("/annotation","result",str);}

在action类的上面增加了一个@controller,控制器标签,在方法上写了一个@requestMapping()映射,这个是在URL中请求的地址,是那个servlet分发地址。

在注解配置文件里面只需要,如下三个标签即可完成。

        <!--  注解扫描包  --><context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan><!-- 开启注解 --><mvc:annotation-driven/><!--  根据扫描的包找某个类下面的方法 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean><!--  根据扫描的包找下面的类 --><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

它的思路理解者很容易,1.注解扫描包是确定哪些包是利用注解方式访问

2.根据包找下面的哪些类使用注解

3.根据某个类,确定里面哪些方法使用注解

对于它的视图解析器、注释等很多概念原理在一边实现一边理解,同时与struts1、struts2等框架比较,容易理解,觉得她们有很多相似之后,又略有不同,他们的优缺点还需要慢慢体会,只有在不断实践和开发中才会得到真正积累,对于编程这类东西,需要多动手、多思考才能进步很快。

转载于:https://www.cnblogs.com/lilongsheng1125/p/4978526.html

SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例相关推荐

  1. html带正方形项目列表,5种简单实用的css列表样式实例,可以直接用到项目中。...

    谁不希望有一个好看而又干净的列表?这篇文章中我们给出几个实用的例子,你可以把他们直接用到自己的工作中. 我们从一个带有动画效果的垂直列表开始,接着是一个图文混排的例子,然后是一个只有图片的list例子 ...

  2. OKRA-ERP简单实用产能分析

    传统产能,排程理论实现起来过于复杂,一般也比较难以实际运用,基础数据的复杂性和多变性使得排程似乎总是好看不好用的花瓶.为了简单实用,OKRA-ERP提供了一个相对简明实用的产能分析,其主要原理如下: ...

  3. 总裁演说思维:简单实用口才训练方法

    总裁演说思维:简单实用口才训练方法 无论做什么事,方法很重要,方法若对,事半功倍,方法不对,努力白费!练口才也一样,很多性格内向.沉默寡言.不善言辞的朋友都会说想练好口才很难.现在小编悄悄的告诉你,只 ...

  4. 一个简单实用的,基于EF的三层架构

    到底什么样的框架才是好框架呢?或许不同人有不同的看法.我个人觉一个好的框架,最重要的要是简单实用,能快速适开发,可维护性高(不会出现复制黏贴的代码),并能快速响应各种业务场景的变化的框架,同时性能不会 ...

  5. html 可调节进度条控件,jQuery简单实用的轻量级进度条插件

    jQMeter是一款简单实用的轻量级进度条jQuery插件,它可以显示为水平或垂直进度条,进度条加载时带有动画特效,你只需要简单的传入一些参数到jQMeter对象的构造函数中就可以完成你想要的进度条效 ...

  6. 分享几个用 Python 给图片添加水印的方法,简单实用

    作者 |俊欣 来源 |关于数据分析与可视化 今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多 ...

  7. matlab简单程序实例_visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)...

    近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...

  8. 用aspnetpager实现datalist分页(绝对的简单实用)

    微软的Datalist在做电子相册时候必不可少,但是不支持分页功能,都出到2008了还是没有分页功能,幸好网上有个专业的分页空间aspnetpager,帮我们解决了大问题,说实在话的,网上关于data ...

  9. 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)...

    其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用 核心就是用localStorage存.取数据,这 ...

最新文章

  1. 企业网站推广方案详解
  2. malloc()/free()的实现
  3. Ant在MyEclipse中的配置总结
  4. 四种保留小数后两位输出方法
  5. Java中使用Jedis连接Redis对SortedSet进行排序操作
  6. 如何编写常见语言带默认参数值的函数
  7. 不使用GACUtil.exe,如何部署和卸载程序集到GAC中
  8. emqx 使用端口_数据传输、存储、展现,EMQ X + TDengine 搭建 MQTT 物联网数据可视化平台...
  9. WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换
  10. 超算和服务器性能,烽火GPU高性能服务器助力武大超算中心建设
  11. 坚果云 operationnotallowed webdav_妙用 NAS 服务,将你的知识库和音乐库搬上「云」...
  12. PSD分层电商促销模板|换季大促销,不怕老板催你做海报了
  13. iOS源码分析:Block的本质
  14. 家用计算机常见故障及解决方式,计算机常见故障及解决方法
  15. 【CANdelaStudio编辑CDD】-0.2-将CDD转换成ODX/PDX诊断描述文件
  16. 2020年3月20日阿里内推笔试题
  17. 印象笔记服务器自动备份,印象笔记跨平台自动备份短信图文教程
  18. 架构 | 如何从零开始搭建高性能直播平台?
  19. 漫画 | 媳妇,去帮我放水泡个澡~
  20. java 求1000以内的所有素数

热门文章

  1. 理解注意力机制的好文二
  2. vim+python3的字符串却不能使用中文
  3. categorical data and numerical data
  4. 卸载linux 上Java的正确方式
  5. svm常用核函数及选择核函数的方法
  6. 谈判如何在博弈中获得更多_读后感--《谈判--如何在博弈中获得更多》
  7. 条形图坐标轴_手把手教你用Excel绘图 | 双轴簇状条形图
  8. tcp协议缓冲区溢出_【Socket 网络通信】TCP/IP 简介1
  9. python argv,Python argv函数简介
  10. 文件处理之解决使用 feof(c语言)或(fin.eof())出现多读问题