spring mvc功能:

  以Controller为中心完成对系统流程的控制管理
  从请求中搜集数据
  对传入的参数进行验证
  将结果返回给视图
  针对不同的视图提供不同的解决方案
  针对jsp视图技术提供标签库
  拦截器
  上传文件

spring-mvc结构

  1.DispatcherServlet:(需要自己配置)
  中央控制器,把请求给转发到具体的控制类
  2.Controller:(需要自己创建)
  具体处理请求的控制器
  3.handlerMapping:(需要自己配置)
  映射处理器,负责映射中央处理器转发给controller时的映射策略
  4.ModelAndView:(需要自己创建)
  服务层返回的数据和视图层的封装类
  5.ViewResolver & View:(需要自己配置)
  视图解析器,解析具体的视图
  6.Interceptors :(需要自己创建)
  拦截器,负责拦截我们定义的请求然后做处理工作

  具体执行流程图参见 url(spring-mvc流程图.png)

SpringMVC相关类库(导包)
  com.springsource.javax.servlet.jsp.jstl-1.1.2.jar
  com.springsource.org.aopalliance-1.0.0.jar
  com.springsource.org.apache.commons.logging-1.1.1.jar
  com.springsource.org.apache.taglibs.standard-1.1.2.jar
  org.springframework.aop-3.0.0.RELEASE.jar
  org.springframework.asm-3.0.0.RELEASE.jar
  org.springframework.beans-3.0.0.RELEASE.jar
  org.springframework.context.support-3.0.0.RELEASE.jar
  org.springframework.context-3.0.0.RELEASE.jar
  org.springframework.core-3.0.0.RELEASE.jar
  org.springframework.expression-3.0.0.RELEASE.jar
  org.springframework.web.servlet-3.0.0.RELEASE.jar
  org.springframework.web-3.0.0.RELEASE.jar

配置 web.xml
  在web-app标签内配置:
    <!-- 中央转发(控制)器 -->
    <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>  
 
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>

      <!-- 不要配置/*,否则404,但是可以配置 / -->
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>

  创建springmvc的核心配置文件(springmvc-servlet.xml) (非注解模式未详细说明)
  文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”
  默认位置:WEB-INF下

  配置:controller和视图解析器
  controller控制器
  也可以直接在配置文件中配置(但此方式不常使用,不再介绍,通常都使用注解开发,直接开启注解即可)

  <!-- 指定使用注解的包,该包及其以下的所有内容均会被扫描 -->
  <context:component-scan base-package="com.rl.controller"/>

  <!-- mvc注解的驱动但是如果context:component-scan存在mvc:annotation就没有必要配 -->
  <!-- <mvc:annotation-driven/> -->

视图解析器:
  <!-- 视图解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 配置从项目根目录到指定目录一端路径 ,建议指定浅一点的目录 -->
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <!-- 文件的后缀名 -->
    <property name="suffix" value=".jsp"></property>
  </bean>

controller
  controller的配置
  @controller:标识当前类是控制层的一个具体的实现
  @requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问
  该内容可以指定,但是默认为value的值,通常value的值与方法名称保持一致
  返回字符串的含义,指的是ModelAndView中viewName,也就是要跳转的页面

数据交互
  (本处解释不详细,可直接参见代码 url(Myeclipse源码:springmvc_2))

  在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,并且转换我们所定义的数据类型。
  如果参数列表里定义了自定义的类springmvc会给我们把匹配的参数组合起来并且组装成对象。

  requestMapping里面的method的类型必须要与前台form的类型一致
  @RequestMapping 中可以定义请求方式,如果指定某种请求方式那就必须要以这种请求方式来访问
  要配置别的属性时,value就不能省略了

  通过request直接获取传递过来的参数
  零散的接受单个数据:在参数列表中直接定义要接收的参数和参数的类型
  Date数据的传递时需要,绑定时间类型的属性编辑器,然后可以自定义时间的格式
  接收多选框中的数据
  通过request直接获取传递过来的参数
  直接在参数列表中定义数组
  实体类的接收:
  在参数列表中直接定义要接收的实体类,请求中传递的参数名要和实体类中的set方法后的字符串匹配,否则无法注入
  只要有请求到达就会按着参数列表中的实体类来创建对象
  因为所有的参数的接收都是在参数列表中,并不是成员变量,每次请求,传递的参数都是一个新的实例,不会产生并发问题
  往页面回写数据
  设置方法返回值类型是ModelAndView
  返回值类型是String,在参数列表中直接来定义一个Map,这个map不是用来接收参数的,而是用来把参数写到页面上去的
  返回值类型是String代表viewName,参数列表使用Model用来把数据写到页面上(此方法较为常用,建议使用此方法)
  通过ajax访问springmvc
  (toAjax.jsp),引入jquery,添加
  $(function(){
    $("#mybutton").click(function(){
      var mytext = $("#mytext").val();
      $.ajax({
        url:"test/ajax1.do",
        type:"post",
        data:{
          name:mytext
        },
        success:function(responseText){
          alert(responseText);
        },
        error:function(){
          alert("system error");
        }
      });
    });
  });
  在控制器中,通过ajax访问springmvc,返回值的类型为void,有两种方式
  使用HttpServletResponse往页面写数据
  在参数列表中直接定义PrintWriter为我们往页面上写数据
  重定向:
  直接在返回值中添加"redirect:",如果"redirect:"后面不加"/"代表在当前的controller里面来执行方法,如果加上"/"代表退到根目录下去访问方法""

文件上传
  引入jar包
  com.springsource.org.apache.commons.fileupload-1.2.0.jar
  com.springsource.org.apache.commons.io-1.4.0.jar
  配置相应的视图解析器(springmvc-servlet.xml)
  <!-- 上传文件复杂表单中文件解析视图 -->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- 以字节为单位 -->
  <property name="maxUploadSize" value="1024000"></property>
  </bean>
  form表单(fileform.jsp):
  <form action="upload/upload.do" method="post" enctype="multipart/form-data">
   头像:<input type="file" name="pic"> 

   <input type="submit" value="提交"><br>
    </form>

    enctype="multipart/form-data"用于POST方式的文件上传,这个属性管理的是表单的MIME编码。
 
  文件上传中的controller的配置(TestUploadController.java)
  @RequestMapping("/upload.do")
  public String upload(HttpServletRequest request) throws Exception{

    //强制转换request
    MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
    //获得到文件
    CommonsMultipartFile cmf = (CommonsMultipartFile) mr.getFile("pic");
    //获得文件的字节数组
    byte[] fbyte = cmf.getBytes();
    String fileName = "";
    //设置时间戳格式
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    //获得时间戳的字符串
    fileName = format.format(new Date());
    //加三位随机数
    Random random = new Random();
    for(int i = 0; i < 3; i++){
      fileName = fileName + random.nextInt(10);
    }
    //获得原始文件名
    String oriFileName = cmf.getOriginalFilename();
    //获得文件的后缀名
    String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
    //获得发布后的根路径
    String realPath = request.getSession().getServletContext().getRealPath("/");
    OutputStream out = new FileOutputStream(new File(realPath+"/upload/"+fileName+suffix));

    out.write(fbyte);
    out.flush();
    out.close();

    return "success";
  }
  @RequestMapping("/toFileForm.do")
  public String toFileForm(){
    return "fileform";
  }

拦截器
  最终拦截
  后置拦截
  前置拦截

Spring MVC 基础笔记的更多相关文章

  1. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  2. Spring MVC 基础

    Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是 ...

  3. 第63节:Java中的Spring MVC简介笔记

    前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...

  4. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  5. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  6. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  7. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  8. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  9. Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目

    Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目 Spring Tool Suite 是一个带有全套的Spring相关支持功能的Eclipse插件包. ...

随机推荐

  1. Android数据库之判断表是否存在

    Android开发的时候我们可能会用到它的本地数据库,在使用的时候有可能我们已经储存了数据了,但是,我们的表已经创建了,里面有数据,我们要怎么判断表是否已经创建可能就需要琢磨一下. 以下便是利用了,查 ...

  2. 数据结构-栈(应用篇)之快速排序法-C和C++的实现

    一.原理解析 快速排序法: 基本思路是,从第一个元素开始,把所有比它大的元素放在它后面,把所有比它小的元素放前面.然后划分它前面和后面的所有元素,分别再做快速排序,直到无法再划分为止. 在以下程序案例 ...

  3. springboot开启access_log日志输出

    由于在调试时需要查看access_log日志,但是springboot默认并没有开启,因此查看了一下文档,在springboot的配置文件中添加如下设置,即可将日志输出当磁盘文件中以供查看. #日志开 ...

  4. Java DB 访问之 mybatis mapper xml 配置方式

    1 项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: mysql 数据连接 : mysql-connector-java ...

  5. CSS3中only-child伪类选择器

    <body> <style type="text/css"> //只对li1设置样式 li:nth-child(1):nth-last-child(1){ ...

  6. Codeforces 626F Group Projects(滚动数组+差分dp)

    F. Group Projects time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  7. [hdu5632][BC#73 1002]Rikka with Array

    点开BC发现今晚没比赛..然后似乎上一场有数位DP?...(幸好我没去 一开始被BCDcode那题的思路带歪了..后来发现得把n转成二进制才能搞TAT 题目大概是要求一种类似逆序对的鬼东西: 有一个长 ...

  8. 【原创】最新的"答题热"中,前端的一点小工作

    一.前言 据王思聪引爆全民HQ也3个星期了,总结下最新做的一个有关"答题热"的工具.并借由这个工具的开发,分析当下HybridApp中H5的一些技术. 在百万英雄等节目刚出来的时候 ...

  9. 最新版Sublime Text Build 3156 x64 的下载 + 注册码 + Install Package Control + 汉化教程

    一.Sublime Text  下载 神器 Sublime Text 最近开始更新到开发版本 Build 3156,本身英语不是太6,汉化党自然各种百度汉化教程,网上不是一堆绿色汉化包,就是让你下载汉 ...

  10. python之hashlib、configparser、logging模块

    hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数 ...