SpringMVC知识整合

本人基于观看狂神的视频做出的总结传送门

1、什么是MVC

  • mvc是模型(Model),视图(View),控制器(Controller)的简写,是一种软件设计规范模型(dao,service) 试图(jsp) 控制器(Servlet)
  • 是将业务逻辑,数据,显示分离的方法来组织代码。
  • mvc主要作用是降低了视图与业务逻辑间的双向耦合。
  • mvc不是一种设计模式,mvc是一种架构模式

    Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型
或javaBean主键(包含数据行为),不过现在一般都分离开来:Value Object(数据Dao)和服务
层(行为Service)。也是模型提供了模型数据查询和模型数据的状态更新等功能,
包括数据和业务。

    View(视图):负责进行模型展示,一般就是我们见到的用户界面,客户想看到的东西。

    Controller(控制器):接收用户请求,委托给模型来进行处理(状态改变),处理完毕以后把
返回的模型数据返回给视图,由视图负责展示,也就是说控制器做了一个调度员的工作。

1.2、MOdel1时代

  • 在web早期开发中,通常采用的都是Model1。
  • Model1中,主要分2层,视图层(jsp)和模型层(dao,service)。

Model1优点:架构简单,比较适合小型项目开发;
Model1缺点:jsp职责不单一,职责过重,不便于维护;

1.3、MOdel2时代

Model2把一个项目分成三部分,包括视图、控制、模型

流程

1.用户发送请求
2.Servlet接收请求数据,并调用对应的业务逻辑方法
3.业务处理完毕,返回更新后的数据给servlet
4.servlet转向到jsp,由jsp来渲染页面
5.响应给前端更新后的页面

职责分析:
Controller:控制器
1.获取表单数据
2.调用业务逻辑
3.转向指定的页面
Model:模型
1.业务逻辑
2.保存数据状态
View:视图
1.显示页面

Model2这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。
Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View
和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,
增加了应用的扩展性和维护的难度。Model2消除了Model1的缺点。

1.4、第一个MVC程序

1.需要的配置

1.新建一个webApp模块

2.确定导入了SpringMVC相关的依赖!

3.配置web.xml , 注册DispatcherServlet

2.配置MVCServlet-servlet.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
    <context:component-scan base-package="com.controller"></context:component-scan>
    <mvc:default-servlet-handler />

    <mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver"/>
        </mvc:argument-resolvers>
    </mvc:annotation-driven>
    <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

3.配置web.xml

<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

  <filter>

    <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>
  <context-param><!--每一个webAppRootKey的值都要不一样-->
    <param-name>webAppRootKey</param-name>
    <param-value>mvcpart20.root</param-value>
  </context-param>
  <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <listener><!--监听器 监听webAppRootKey-->
    <listener-class>
      org.springframework.web.util.WebAppRootListener
    </listener-class>
  </listener>
  <!--注册DispatcherServlet-->
  <servlet>
    <servlet-name>MvcServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>MvcServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

4.编写Controller

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import pojo.User;

@Controller
public class UserController {

    @PostMapping("/login")
    public ModelAndView login(User user){
        ModelAndView mv = new ModelAndView("/loginsc");
        mv.addObject("info",user);
        return mv;
    }
}

@Controller是为了让Spring IOC容器初始化时自动扫描到;

@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;

方法中声明Model类型的参数是为了把Action中的数据带到视图中;

方法返回的结果是视图的名称loginsc,加上配置文件中的前后缀变成WEB-INF/jsp/loginsc.jsp。

5.需要跳转的页面,数据显示页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Kuangshen</title>
</head>
<body>
${msg}
</body>
</html>

6.可能遇到的问题:访问出现404,排查步骤:

1.查看控制台输出,看一下是不是缺少了什么jar包。

2.如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!

3.重启Tomcat 即可解决!

小结

实现步骤其实非常的简单:

1.新建一个web项目

2.导入相关jar包

3.编写web.xml , 注册DispatcherServlet

4.编写springmvc配置文件

5.接下来就是去创建对应的控制类 , controller

6.最后完善前端视图和controller之间的对应

7.测试运行调试.

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置


   转载规则


《SpringMVC知识整合》 我到哪里都是猪 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录