SpringMVC1---初识SpringMVC、编写SpringMVC实例、SpringMVC粗略执行流程、SpringMVC404报错可能原因

学习链接为狂神说Java的SpirngMVC前4章,希望学习更多新的知识!学习真的是太棒了!要一直学习哦!视频教得很好哦,特别适合初学者!

1 回顾MVC

ssm:MyBatis+Spring+SpringMVC

记忆中的MVC:也就是做项目时候的MVC三层架构.

1.1 MVC是什么:
  • 模型(dao,service),视图(jsp),控制器(servlet),是一种软件设计规范。
  • 是将业务逻辑、数据、显示分离的方法来组织代码。
  • MVC的主要作用是降低了视图和业务逻辑之间的双向耦合。
  • MVC不是一种设计模式,而是一种架构模式。不同的MVC存在差异。

模型Model:数据模型,提供要展示的数据,因此包含数据和行为。可以认为是领域模型或是JavaBean组件(包含数据和行为),不过现在一般都要先分离成:Value Object(dao层,包含数据)和服务层(行为Service),也就是模型层提供了模型数据查询模型数据的状态更新等功能,包含着数据和业务。

视图View负责模型的展示,一般就是我们见到的界面,是客户想看到的对象。

控制器Controller:接受用户请求,委托给模型进行处理(状态改变),处理完毕后再把返回的模型数据传递给视图,由视图负责展示。起了一个调度员的身份。

最典型的MVC就是JSP+Servlet+JavaBean的模式。

1.2 对三者的职责分析:

Controller(控制器):

  • 获取表单数据
  • 调用相应的业务逻辑
  • 转到具体页面

Model(模型):

  • 保存业务逻辑
  • 保存数据的状态

View(视图):

  • 展示界面

2 回顾Servlet

导包,Servlet只用到servlet-api和jsp-api两个包,其他的是SpringMVC中要用的

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.8.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>
2.1 Servlet有两个注意点,
  • 一个是要写一个类继承HttpServlet;
  • 第二个是要取web.xml中配置Servlet.

ps:
HttpServlet的父类最终实现了Servlet的接口。
如果为了保证安全,确保用户不可见,可以把页面放到WEB-INF中;如果一些公共的页面就放在web目录下

2.2 MVC框架要做的事情:
  1. 将url映射到java类中或java的方法;
  2. 封装用户提交的数据;
  3. 处理请求----调用相关的业务处理----封装响应数据;
  4. 将数据进行渲染,用jsp/html等表示成数据。

ps:M V VM(ViewModel:双向绑定)

3 SpringMVC

官方文档链接

3.1 SpringMVC是什么

SpringMVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

3.2 SpringMVC的特点

为什么我们要学习Spring MVC?

  1. 轻量级,简单易学。
  2. 高效,基于请求响应的MVC框架。
  3. 和Spring兼容好,无缝结合。
  4. 约定大于配置。
  5. 功能强大:RESTful(url地址栏区别它不用问号传参)、数据验证(上传的方式必须是邮箱啊之类的)、格式化、本地化、主题等。
  6. 简洁灵活。
    Spring的Web框架是围绕**DispatcherServlet(调度Servlet)**设计的

中心控制器
Spring的web框架是围绕DispatcherServlet设计的。DispatcherServlet的作用是将请求分发到不同的处理器。
SpringMVC框架是以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能。DispatcherServlet是一个实际的Servlet(他继承于HttpServlet)
在这里插入图片描述

SpringMVC原理如图—英文版来自官方。
在这里插入图片描述

4 编写一个SpringMVC程序实例

新建一个module-maven项目并添加web框架支持。

4.1 编写web.xml文件
<?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">
    <!--注册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>
    </servlet>
    <!--/ 匹配所有的请求: (不包括.jsp)-->
    <!--/* 匹配所有的请求:(包括.jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
4.2 编写web.xml中使用到的springmvc-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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--URL处理器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--URL适配器-->
    <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>
</beans>
4.3 编写一个继承控制器的类,通过这个类去起到控制器的功能
public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //新建一个ModelAndView对象,模型和视图类
        ModelAndView mv = new ModelAndView();

        //封装对象,放在ModelAndView中,
        mv.addObject("msg","HelloSpringMVC");

        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("hello");//存放在/WEB-INF/jsp/hello.jsp中

        return mv;
    }
}
4.4 将hello注册到Spring容器中

在springmvc-servlect.xml中注入bean

<bean id="/hello" class="com.swrici.controller.HelloController"/>
4.5 编写对应的jsp页面,启动Tomcat
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/9/23
  Time: 15:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>
4.6 可能会遇到的问题404报错
  • 创建lib目录,并添加响应的包。
  • 步骤
  • 按住Ctrl+Alt+Shift+S,选择出现PojectStructure结构。
  • 接着就是在WEB-INF目录下创建lib文件夹并添加所有的依赖。

在这里插入图片描述

4.7 SpringMVC粗略执行流程

地址栏访问的hello,没有在web.xml配置,是如何访问到的?

  1. 按下地址栏,发生url请求过来,我们在web.xml中只配置了一个DispatcherServlet,所以说明我们所有的请求都会经过它。
    ,DispatcherServlet接受到请求之后发送url到url处理器和url适配器

  2. url处理器和url适配器起的作用是根据url去找spring里面有哪个Contronller去匹配它去处理它。

  3. 在Spring容器中也已经提前注册好了bean,在bean中包含着页面和具体的控制器类的映射关系,bean中id是url,对应的类型是一个继承Controller接口的类。然后通过这个Bean提供的信息跳转到对应的类中。

  4. 在这个继承Controller接口的类中存在着一个要实现的方法handleRequest(),这个方法会返回一个对象ModelAndView,模型保存数据,视图去设计要跳转到哪个页面。然后返回这个ModelAndView对象。

  5. 接下来会经过视图解析器,然后拼接url,然后找到这个页面,再返回这个页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值