Spring MVC

概念

Spring的子模块;
基于Servlet开发的;核心是DispatcherServlet(截获请求并分派给相应处理器)的表现层(web层)框架

SpringMVC运作流程

在这里插入图片描述
在这里插入图片描述

  1. 浏览器–(Request)–DispatcherServlet
    用户发起请求

  2. DispatcherServlet–(request)–映射器
    DispatcherServlet拿到request,寻找一个HandlerMapping去处理

     处理器映射器:
     ① BeanNameURLHandlerMapping:将浏览器上的URL与处理器name映射,寻找到对应处理器
     ② SimpleUrlHandlerMapping:配合HttpRequestHandlerAdapter实现多个URL对应一个页面资源
     		<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
             <property name="mappings">
                 <props>
                     <prop key="/second1">handler</prop>(Handler指的是一个实现了HttpRequestHandler的处理器类,这5个key都可以访问这个处理器类对应的页面)
                     <prop key="/second2">handler</prop>
                     <prop key="/second3">handler</prop>
                     <prop key="/second4">handler</prop>
                     <prop key="/seconda">handler</prop>
                 </props>
             </property>
         </bean>
    
  3. 映射器–(Controller)–DispatcherServlet
    HandlerMapping根据URL找到对应Controller(即Handler),返回Controller给DispatcherServlet

     处理器(controller/Handler):
     ① 自定义类,实现controller接口
     ② 自定义类,实现HTTPRequestHandler接口
    
  4. DispatcherServlet–(Controller)–适配器
    DispatcherServlet运作:将Controller传递给适配器HandlerAdapter

    处理器适配器:
    ① SimpleControllerHandlerAdapter:处理实现了controller接口的处理器;
    ② HttpRequestHandlerAdapter:处理实现了HTTPRequestHandler接口的处理器(配合SimpleUrlHandlerMapping,实现多个URL对应一个页面资源)
    --------------------
    以上缺点:每种适配器只能处理一种Handler
    
  5. 适配器–(ModelAndView)–DispatcherServlet
    HandlerAdapter根据实际情况,运作Controller并返回一个ModelAndView(包含了view和数据)给DispatcherServlet

    modelAndView:
    model存储数据,view进行页面展示
    modelAndView的方法:
    setViewName("跳转页面地址");设置路径
    addObject(“键”,“值”);存储attribute到request域
    
  6. DispatcherServlet–(ModelAndView)–解析器
    DispatcherServlet运作:将ModelAndView传递给适配器ViewResolver

    视图解析器:
    ① InternalResourceViewResolver(可以配置逻辑视图名)
    不配置前后缀,则Controller中需要写物理视图名(完整路径);
    配置前后缀,则Controller中只需指定逻辑视图名,会自动拼接(不适用于继承HTTPRequestHandler的Handler/直接请求转发方式)



  7. 解析器–(View)–DispatcherServlet
    ViewResolver视图解析器:将ModelAndView解析成view(将model的数据取出并渲染到view)给DispatcherServlet

  8. DispatcherServlet–(Response)–浏览器
    DispatcherServlet将view封装成一个responseresponse返回给浏览器

作用、优势

SSM整合难度降低(Spring与SpringMVC整合没有难度,不会互斥)

WEB项目的创建

在这里插入图片描述

web文件头参考标准
在这里插入图片描述
在这里插入图片描述

多种页面&多种视图解析器

方法1:
同时需要配置多个视图解析器怎么办
方法2:

使用 ContentNegotiatingViewResolver,配置viewResolvers属性-list标签下加入多种视图解析器的bean节点复制进来
多个视图解析器都需要增加viewNames属性,配置html/*  或jsp/* (之前配置的前缀都要把HTML和jsp去掉改到这里,会自动拼接prefix+ viewNames + suffix)
return后面的逻辑视图名需要改用 html/页面名称  或 jsp/页面名称 写法

传值与跳转

1+5+1种传值方式

向前端页面传递:
ModelAndView对象

Model对象
ModelMap对象
Map对象
Request对象
Session对象
(以上都是Spring封装好自带的)

@ResponseBody
直接在方法上添加注解,该方法return 的内容会直接在页面展示

	如果return的是Json形式数据,项目需要添加Jackson等json解析依赖包;
	如果return的是字符串,不会做跳转处理而是直接显示

2+3+2种跳转方式

请求转发:跳转页面
return "页面物理视图名 "
return "页面逻辑视图名 "
return "forward:页面物理视图名 "

请求转发:跳转接口
return "forward:本类中的另一个接口名 "
return "forward:接口完整表示名 "(/根路径接口名/接口名)

重定向:跳转接口
return "redirect:接口名 "
return "redirect:接口完整表示名 "(/类的接口名/接口名)
return "redirect:页面物理视图名 "(WEB-INF下的页面不能使用物理视图名重定向访问)

@Controller
@RequestMapping("index")
public class MyControllerA {

    @RequestMapping(value = "showa",method = RequestMethod.GET)
    public String showA(Model model, ModelAndView mv,Map<String, Object> map, HttpSession hs, ModelMap mm, HttpServletRequest request, HttpServletResponse resp){
        request.setAttribute("req", "这是第一个信息");
        model.addAttribute("modelattr", "model~~");
        hs.setAttribute("hs", "session!!");
        map.put("map1", "asda9");
        mv.addObject(new Random().nextInt(10));
        mm.addAttribute("mm", new Random().nextInt(10));
//      不使用forward,直接逻辑视图名
//        return "showa";
//      使用forward,只能跳转到接口或绝对路径-绝对路径
//        return "forward:/WEB-INF/jsp/showa.jsp";
//      使用forward/redirect,只能跳转到接口或绝对路径-接口-相对路径写法:
//        return "redirect:showamid";
//        return "forward:showamid";
//      使用forward/redirect,只能跳转到接口或绝对路径-接口-"/"开头,表示根路径的接口,(从根路径开始指定接口)写法:
//        return "redirect:/index/showamid";
        return "forward:/index/showamid";
    }

    @RequestMapping(value = "showamid",method = RequestMethod.GET)
    public String showA2(Model model, ModelAndView mv,Map<String, Object> map, HttpSession hs, ModelMap mm, HttpServletRequest request, HttpServletResponse resp){
        return "showa";
    }
}

3种取值方式

从前端获取:
request取值
形参一致取值
形参不一致@RequestParam取值

RESTFUL设计风格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值