SpringMVC入门:最最最最最简单的配置

歪比巴卜~~~~

一、SpringMvc是什么?

个人理解:是Spring这个容器里面的一个技术框架,主要方便管理表现层这一层(Controller)

MVC主要架构:

表现层(Controller)主要拦截用户请求,调用处理器调用各个Controller并返回视图
业务层(Service)接收前端传过来的参数,调用Dao层完成复杂的业务逻辑
持久层(Dao)直接与数据库交互,负责传输数据给业务层

本篇主要通过xml配置文件简单的叙述SpringMVC执行原理,底层原理博主也不懂,等我学会了再讲详细一点


二、SpringMvc讲解

在之前学习过JavaWeb的吴彦祖们都知道,要想接收到用户的请求,必须要有实现了Servlet接口实现类,通过 Servlet 的 service() 方法才能知道用户想要干什么。不同请求可能会需要写多个Servlet类来处理业务逻辑。这样会非常不方便,所以Spring MVC 的核心思想就是统一管理:用一个 DispatcherServlet 接收所有请求,我们只需要实现 Controller 接口专注业务逻辑就行, 因为这一切 Spring MVC 都帮我们搞定了!

图中大概就是SpringMvc的执行流程和顺序,下面简单叙述

假设用户的请求地址:http://localhost:8080/SpringMvc01_config/hello

1.用户发起了请求,被DispathcerServlet拦截并对URL进行拆分

协议:http://

ip地址:localhost

端口号:8080

应用上下文:/SpringMvc01_config

请求的路径:/hello

2.DispathcerServlet调用HandlerMapping:嘿,Bro来活该咋办?(把/hello传过去)

3.HandlerMapping会根据/hello在配置文件里找到HelloControlle控制类路径,并告诉DispathcerServle还需要做啥,这些就是HandlerExecution

4.DispathcerServlet收到这些具体信息,就知道该咋办了

5.DispathcerServlet调用HandlerAdapter, 让他去执行对应的Handler(Handler有很多类型,HandlerAdapter提供了统一的接口)

6.具体的Handler执行具体的Controlle

7.Controlle执行返回信息(ModelAndView)给HandlerAdapter

8.HandlerAdapter再把信息传给DispathcerServlet

9.DispathcerServlet把信息传给ViewResolver

10.ViewResolver解析信息传给DispathcerServlet

11.DispathcerServlet通过解析信息知道具体调用哪个视图给用户


三、配置SpringMvc

1.使用maven工具创建父文件夹

在父文夹中的pom.xml添加核心依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>SpringMvc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>Spring_mvc1</module>
        <module>Spring_mvc2</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
</project>

2.在父文件夹中创建子maven项目

子maven项目中添加web工程

配置web.xml

和配置Servlet格式一样,都需要配置<servlet>和<servlet-mapping>标签,因为DispatcherServlet就相当于一个Servlet

<!--1.注册DispatcherServlet-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>

    <!--启动级别-1-->
    <load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

3.在resources目录下创建springmvc-servlet.xml

org.example.HelloController是自己是自己实现控制类的包名

处理映射器会根据id="/hello"找到这个控制类

再由处理适配器执行该控制类

视图解析器会解析控制类返回的ModelAndView,假如ModelAndView里面设置视图名字是hello,那么视图解析器会进行拼接:/WEB-INF/jsp/hello.jsp

所以前缀主value值是存放视图位置的目录路径,后缀value值存放该视图的文件类型

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

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

<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--后缀-->
    <property name="suffix" value=".jsp"/>
</bean>

<!--Handler-->
<bean id="/hello" class="org.example.HelloController"/>

4.创建HelloController控制类

只要实现了Controller接口就是一个控制类,里面创建ModelAndView对象,通过该对象设置需要显示的内容以及需要跳转的视图名。

这里mv.addObject("msg","灵魂汁子~浇给~~~~");是一个Map类型,hello.jsp通过msg知道要显示的信息。

public class HelloController implements Controller {
    @Nullable
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //ModelAndView 模型和视图
        ModelAndView mv = new ModelAndView();
        //封装对象,放在ModelAndView中。Model
        mv.addObject("msg","灵魂汁子~浇给~~~~");
        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("hello");
        //: /WEB-INF/jsp/hello.jsp
        return mv;
    }
}

5.在WEB-INF/jsp下创建hello.jsp

用js格式写入msg接收具体信息

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>

    </title>
</head>
<body>
${msg}
</body>
</html>

6.运行结果


四、补充

运行不成功参考博主配置:jdk8 + tomcat9.0+

报404:检查跳转视图路径是否有错误

             <url-pattern>/</url-pattern>该标签中一定是/

             mv.setViewName("hello")设置视图名不要加文件格式

             手动创建lib,点+号全选,添加依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值