一、SpringMVC引言

  Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

二、SpringMVC要点

  1、引入jar包

    spring-webmvc-3.2.4.RELLEASE.jar

  2、配置文件

    SpringMVC的配置文件的位置、名字随意。

    初始化配置dispatcher-servlet.xml(SpringMVC配置文件):

<!--配置springMVC注解扫描器-->
<context:component-scan base-package="com.xxxx"></context:component-scan>

<mvc:annotatin-driven></mvc:annotation-driven>

    初始化配置web.xml:

<!--配置SpringMVC配置文件的路径-->
<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/com/xxxx/controller/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
<!--配置控制器的访问路径形式,均以.do结尾。eg:localhost:8080/springmvc/login.do-->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

  3、基于注解开发

    a、控制器编码:

//@Contrller 注解表示该类为控制器
@Controller
@RequestMappint("/UserManager")
public class FirstController{

    //@RequestMapping 注解设置该控制器的访问路径
    @RequestMapping("/hello")
    public String Hello(){
        //调用业务逻辑Service

        return "hello";
        //方法返回的字符串为跳转的页面名,不包含.jsp.html等后缀,在springMVC配置文件中配置视图解析器,该解析器会将"hello"解析为"hello.jsp"页面。
}

    b、解析器配置:

<bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
</bean>
//id不可随便写,spring会自动创建该Bean并且赋值于springMVC内部的视图解析器

    c、SpirngMVC跳转

      (1)forward跳转jsp

@RequestMappint("/hello")
public String Hello(){
    //调用Service业务逻辑

    //return "hello";   即跳转hello.jsp页面
    return "forward:/hello.jsp";  //写forward关键字,视图解析器将会失效。
}

      (2)redirect跳转jsp

@RequestMappint("/hello")
public String Hello(){
    //调用Service业务逻辑

    return "redirect:/hello.jsp";  //写redirect关键字,视图解析器将会失效。
}

      (3)forward跳转controller

@RequestMappint("/hello")
public String Hello(){
    //调用Service业务逻辑

    return "forward:/world.do";
}

@RequestMappint("/world")
public String World(){
    //调用Service业务逻辑

    return "world";
}

      (4)redirect跳转controller

@RequestMappint("/hello")
public String Hello(){
    //调用Service业务逻辑

    return "redirect:/world.do";
}

@RequestMappint("/world")
public String World(){
    //调用Service业务逻辑

    return "world";
}

    d、cient---->controller 传递参数

      (1)用request作用域传参

@RequestMapping("/hello")
public String hello(HttpServletRequest request){
    String name = request.getParameter("name");
    return "hello";
}

      (2)用方法的参数传参

//传递零散参数
@RequestMapping("/hello") public String hello(String name){ System.out.println(name); return "hello"; } //当请求参数的key与方法参数不一致时,可以用@RequestParam来进行绑定 @RequestMapping("/world") public String world(@RequestParam("name")String n){ System.out.println(n); return "hello"; }

//传递对象参数
@RequestMapping("/param")
public String param(User user){
  System.out.println(user.getName());
  return "hello"
}
//传递数组、集合
@RequestMapping("/param")
public String param(int[] ids){
  for(int i:ids){
    System.out.println(i+" ");
  }
}
//传递的集合元素为对象时,应该进行VO类封装将List<User>封装为UserVO的成员变量
@RequestMapping("/param")
public String param(UserVo uv){
  List<User> users = uv.getUsers();
  return "hello";
}

    (3)参数的字符编码

      get:在tomcat的配置文件中配置。

      post:在web.xml中配置SpringMVC内置的Filter

<filter>
    <filter-name>Encoding</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>
  </filter>
  <filter-mapping>
    <filter-name>Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

      类型转换器:

      编写implements Converter:

//以日期格式为例
pubic class DateConver implements Converter<String,Date>{

    public Date convert(String src){
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sd.parse(src);
        return date;
    }

}

      配置SpringMVC配置文件:

<!--声明自己开发的转换类-->
<bean id="dateConverter class="com.xxxx.DateConverter"></bean>
<!--将自己开发的转换类注入到springmvc的转换器服务类中-->
<bean id="converterService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <ref local="dateConverter"/>
        </set>
    <property>
</bean>
<!--注册转换器服务-->
<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>

    e、controller--->jsp传递参数

      (1)基于原生的Servlet

@RequestMapping("/hello")
public String hello(HttpServletRequest request,HttpSession session){
    request.setAttribute("name","zhangsan");
    session.setAttribute("age",18);
    return "hello";
}

      (2)基于SpringMVC的封装

@Controller
@RequestMapping("/userManager")
//@SessionAttibutes注解表示将Model中request作用域的内容copy到session作用域中,即将request作用域中的name属性复制一份存入session作用域
@SessionAttributes("name")
public class MpdelController{

    @RequestMaping("/m1")
    public String m1(Model model){

        //request.setAttribute("name","zhangsan");
        //model对象代替了request作用域
        model.addAttribute("name","zhangsan");
        modle.addAttribute("age",18);

        return "result";
     //springMVC没有封装application作用域的操作方式

  }

  @RequestMapping("m2")//@ModelAttribute(value="password")与使用Model对象的功能是一样的
  public String m2(@ModleAttribute(value="password")String password){
    password = "123456";
    return "result";
  }

  //这是SpringMVC中ModelAndView机制中最正统的写法,以上内容都是该机制的简化写法
  //ModelAndView = Model(作用域中的数据) + View(视图显示)
  @RequestMapping("M3")
  public ModelAndView m3(){
    ModelAndView mav = new ModelAndView();
    mav.addObject("validationCode","xxxx");//将数据设置到Request作用域中
    mav.setViewName("redirect:/result.jsp");
    return mav;
    //在使用ModelAndView的过程中,SpringMVC如果发现redirect跳转,自动的把ModelAndView.addObject()方法的内容 拼接到url
}

  4、SpringMVC中控制器方法的返回值

    a、String

    b、ModelAndView

    c、void-----返回值的内容不是页面,而是验证码、文件下载、JSON等。 

   

浅谈SpringMVC(一)的更多相关文章

  1. 阿里P7浅谈SpringMVC

    一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...

  2. 浅谈SpringMVC(二)

    一.SpringMVC的拦截器 1.写类implements HandlerInterceptor public class MyMvcInterceptor implements HandlerIn ...

  3. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  4. 浅谈SpringMVC

    M--模型(实体vo[视图对象]与页面对面) V--视图(JSP,,velocity,FreeMarker,html,thymeleaf) C--控制器(servlet,if语句控制M数据跳转到V进行 ...

  5. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  6. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  7. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  8. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  9. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

随机推荐

  1. 弱类型语言中的0和空字符串(''或"")以及字符串'0'

    在弱类型语言(js/PHP)中, 当我们用==判断0和'0'以及空字符串(''或"")是否相等的时候, 返回的是true. 而且在PHP中, 当我们用==判断0和null是否相等的 ...

  2. js堆栈溢出错误

    function prompt() { var answer = prompt("What is your name","") if (answer) { al ...

  3. Clojure 学习入门(19)—— 数组

    1.创建数组 1.1 从集合创建数组 into-array into-array (into-array aseq) (into-array type aseq) 演示样例: user=> (i ...

  4. iOS8 用AVAudioPlayer播放音乐(Swift)

    AVAudioPlayer 类提供了播放音频文件的功能,在本次教程中,我们将对一个音乐文件进行播放暂停和停止操作,此外还会显示标题和播放时间.本次教程使用iOS8和Xcod6.3.1 打开Xcode创 ...

  5. viewPager使用时加载数据时显示IllegalStateException异常,解决不了。。。。

    从newsPager中得到newsDetailTitles标题的详细内容,这是通过构造器传过来的.打印日志78行能打印,45行打印出来共size是12.但是程序出现了异常java.lang.Illeg ...

  6. 场景:A-->B-->C 跳转到C时,要关掉B的处理方法

    场景:A-->B-->C 跳转到C时,要关掉B的处理方法:相当于从A跳转到C UIViewController *preController = [self.navigationContr ...

  7. 20151214--JSTL

  8. VBA基础概念

    一:VBA对象 'VBA对象 'VBA中的对象其实就是我们操作的具有方法.属性的excel中支持的对象 'Excel中的几个常用对象表示方法 '1.工作簿 ' Workbooks 代表工作簿集合,所有 ...

  9. Android 调用系统通讯录

    这个过程有三步:1)许可向你的应用程序的manifest中添加读取通讯录数据的许可  <uses-permission android:name="android.permission ...

  10. iframe自适应高度的问题

    最近工作中遇到了iframe自适应高度的问题. 如果在iframe中写定高度height的属性,并且iframe中内容高度小于给定的height时,会在手机浏览器中莫名的产生下拉框,造成体验度下降. ...