springMVC学习笔记

一. springMVC简介

springmvc:与 struts2类似,它web(表现)层框架,该框架是spring的子项目之一(spring模块之一)。与spring之间无需整合(不需要提供整合包)。

二. springMVC原理

自己拼接的一张小图:
这里写图片描述

其中有4大组件:

  • 前端控制器(servlet)
  • 处理器映射器(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 视图解析器(ViewResolver)

三. 快速入门

1. 配置web.xml
    <servlet>
        <servlet-name>springDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:/spring-mvc.xml</param-value>
        </init-param>
        <!-- 服务器启动初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcher</servlet-name>
        <!-- 拦截所有 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
2. 配置springMVC.xml

配置内容:

  1. 配置扫描器
  2. 配置处理器映射器
  3. 配置处理器适配器
  4. 配置视图解析器

注意:
2-3步可以使用配置注解驱动而代替:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!-- 1.配置扫描器,扫描@Controller -->
    <context:component-scan base-package="online.bendou.springmvc.controller" />

    <!-- 2.配置处理器映射器 
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    3.配置处理器适配器
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->

    <!-- 配置注解驱动,取代2,3步骤 -->
    <mvc:annotation-driven />
    <!-- 4.配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 设置返回视图的前后缀 -->
        <property name="prefix" value="/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 放行静态资源 -->
    <mvc:resource location="/js" mapping="/*" />
</beans>
3.编写controller
@Controller
@RequestMapping("/user")    // 窄化请求
public class UserController{

    @RequestMapping("/toIndex")  // 窄化请求
    // 返回的是字符串
    public String toIndex(){
        // 返回的页面需要和springMVC中配置的前后缀拼接
        // 例如: 需返回视图${baseurl}/jsp/index.jsp
        return "index";
    }

    @RequestMapping("/getNames")
    public String getNames(Model model){
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("李四");
        model.addAttribute("names", names);
        return "getNames";
    }

    @RequestMapping("/getAges")
    public ModelAndView getAges(){
        List<Integer> userList = new ArrayList<Integer>();
        userList.add(19);
        userList.add(25);
        // 创建ModelAndView对象,构造方法中传入返回的视图名称
        ModelAndView modelAndView = new ModelAndView("getAges");
        modelAndView.addObject("userList",userList);
        return modelAndView;
    }
}
四. springMVC方法参数中的Model和ModelAndView对象区别

Model:

Model是一个接口, modelMap是其实现类. 如果直接使用Model, springMVC会实例化Model. 方法返回的是字符串(视图名)
使用Model和ModeMap效果是一样的, 都是向页面发送数据.如:
Items item = itemService.findItemById(id);
model.addAttribute("item", item);

页面可以通过${item.xxx}取值.

ModelAndView:
不仅可以向页面发送数据, 也可以设置返回的视图名称. 方法返回ModelAndView对象.
五. springMVC的返回值
  1. 返回ModelAndView
    • 设置返回数据
    • 设置返回视图名
  2. 返回void

    • ajax异步请求, 返回void
  3. 返回String

    • 返回视图名
    • 可以通过model设置返回数据
  4. 返回redirect
    • 重定向
      return "redirect:queryUser;"
    • 数据不共享, 两次request
  5. 返回forward
    • 请求转发
      return "forward:queryUser";
    • 数据共享
六. springMVC和Struts2的区别
  1. springMVC是一个servlet; struts2是一个filter.
  2. springMVC是基于方法的开发; struts2基于类
  3. springMVC将数据绑定到方法的参数上; struts2则绑定到全局变量中.
  4. springMVC可以单例开发, 因为它是通过controller的形参接收参数,方法完成,形参数据销毁; 但是struts2是通过模型驱动将数据绑定到全局变量上, 因此struts2必须是多例开发;
  5. springMVC将需要返回的数据存放在model中; struts则存放在值栈valuestack中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值