初识SpringMVC以及它的开发步骤

平和地做事

本篇只是简单介绍了关于SpringMVC的开发步骤以及注解开发,有助于了解原理,加深印象。

Spring MVC framework is widely used for java web applications.

传统的模型层被拆分为了业务层(Service)和数据访问层(DAO,Data Access Object)。 在 Service 下可以通过 Spring 的声明式事务操作数据访问层

img

1、MVC

M 代表 模型(Model)

模型是什么呢? 模型就是数据,就是 dao,service,bean

V 代表 视图(View)

视图是什么呢? 就是网页, JSP,用来展示模型中的数据

C 代表 控制器(controller)

控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。

2、为什么要学习SpringMVC

基于MVC框架,可以与 Spring无缝结合,具备AOP和IOC;

约定大于配置;

功能强大:RESTful、数据验证、格式化等

用的人多!!!

3、SpringMVC执行流程

springMVC执行流程

客户端请求提交到DispatcherServlet

由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

DispatcherServlet将请求提交到Controller

Controller调用业务逻辑处理后,返回ModelAndView

DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

视图负责将结果显示到客户端

image-20220926210037237

4、开发步骤

4.1 创建web项目

<!-- 普通maven变为 web工程:修改打包方式 -->
<packaging>war</packaging>
  • 只要是web工程就得有web.xml

4.2 pom.xml添加依赖

<!-- springMVC依赖-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.22</version>
</dependency>

4.3 web.xml 下配置DispatcherServlet,绑定配置文件

<!-- 配置DispatchServlet -->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--  绑定springMVC配置文件 app-context.xml -->
    <init-param> 
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app-context.xml</param-value>
    </init-param>
    <!--  启动级别:1  服务器一启动就初始化 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 这里的 / :匹配所有请求,不会匹配jsp页面
     如果 /* :匹配包括jsp的所有请求
-->

image-20220926213347650

4. 4 添加SpringMVC配置文件app-context.xml

<!-- 添加处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀、后缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
    <!-- BeanNameUrlHandlerMapping : bean-->
    <bean id="/hello" class="com.jr.controller.HelloController"/>

image-20220926215925879

我的项目结构:

image-20220926213135150

4.5 编写Controller

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
        // 业务代码
        String res = "HelloSpringMVC!";
        mv.addObject("msg",res);
        // 视图跳转
        mv.setViewName("test");
        return mv;
    }
}

image-20220926215740970

4.6 启动tomcat测试

5、注解开发

同样,创建一个web项目,maven依赖都是一样的,我做步骤如下:

我是直接创建的普通maven项目,然后添加web项目,也可以用别的方式

5.1 添加web项目,准备环境

image-20220927105342733

5.2 web.xml 配置

没有就自己在WEB-INF下新建web.xml

其实这个是一劳永逸的~~

  • 注册DispatcherServlet
  • 绑定springMVC配置文件
  • 启动级别设置为1
  • 注意映射路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
         version="4.0">

    <!-- 配置DispatchServlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 绑定springMVC配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:app-context.xml</param-value>
        </init-param>
        <!--  启动级别:1  服务器一启动就初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

5.3 添加springMVC配置文件

在resource 下新建配置文件 app-context.xml

  • 让IOC注解生效,(扫描注解)
  • 静态资源过滤,HTML,JS,CSS……
  • MVC 注解驱动,(开启注解)
  • 配置视图解析器
<?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
       https://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/mvc 
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 让注解生效 自动扫描包:在指定的包下注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.jr.controller"/>
    <!-- 默认资源过滤 -->
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀、后缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>
<mvc:annotation-driven/>
<!--
    使支持springMVC注解 ,
    在spring中一般采用 @RequestMapping 注解来完成关系映射,
    想要让 @RequestMapping 注解生效,必须向上下文中注册 DefaultAnnotationHandlerMapping
    和一个AnnotationMethodHandlerAdapter 实例,
    这两个实例分别在类级别和方法级别处理,而 annotation-driven 可以帮我们自动完成这两个实例的注入
-->

5.4 创建Controller,添加注解

  • @Controller
  • @@RequestMapping("这里是映射地址"),如果类和方法上都加了,路径就会有父子关系
@Controller
public class HelloController{

    @RequestMapping("/hello")// 访问地址
    public String hello(Model model){
        // 封装数据,可以在jsp中取出
        model.addAttribute("msg","hello!我是hello.jsp");
        // 会被试图解析器处理
        return "hello"; // hello.jsp
    }
    /* 多个请求,对应多个方法即可 */
}

5.5 测试

我的项目结构
image

5.6 一些小点

如果加上了@RestController 那么数据就不走视图解析器啦

参考来源

搭建maven环境可以参考:https://www.cnblogs.com/fulfill/p/16611208.html
https://www.digitalocean.com/community/tutorials/spring-mvc-tutorial

https://www.jianshu.com/p/91a2d0a1e45a

狂神说视频

posted @ 2022-09-27 14:18  来日可追  阅读(48)  评论(0编辑  收藏  举报