Spring Mvc面试知识点复习

1.SpringMvc框架简介

1.1.Mvc概念

M:Model 模型 (模型层:业务逻辑层+数据库访问层)

V:view 视图( JSP(翻译java--->编译class----->运行)、模板引擎:Themleaf、FreeMarker..)

C: Controller控制 (Servlet控制层)

1.2 SpringMvc简介

SpringMvc其实就是Spring框架其中的一个Web模块!Web相关的模块:封装了传统Servlet操作,让控制层开发起来更高效和简介!

SpringMvc是目前市场上最流行的控制层框架!早起Struts2,因为有安全漏洞现在过时!

SSH:Struts2(安全漏洞)+Spring+Hibernate

SSM: SpringMvc + Spring +MyBatis(MyBatis Plus)

2.SpringMvc框架搭建-HelloWorld

2.1.新建一个Web版本的Maven工程

2.2.导入SpringMvc Web开发依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!--AOP面向切面编程-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!--SpringMvc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!-- servlet依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.2.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- JSP相关 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <!--Druid数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- MyBatis plus 包含了MyBatis-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--Spring-jdbc 整合MyBatis-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!-- Spring测试模块和Junit4整合-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--面向切面编程依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!-- 日志工具-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.22</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>

2.3. 配置一个SpringMvc中央控制器(本质是一个Servlet)

在Web-INF下的Web.xml文件下配置一个Servlet,用来接收和响应用户的请求

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!--Web初始化参数-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring.xml</param-value>
    </context-param>

    <!--Springmvc乱码过滤器-->
    <filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!---ContextLoaderListener:监听Web项目启动的事件:Web项目Spring框架随之启动-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--配置SpringMvc核心控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--DispatcherServlet创建对象的时候,加载这个SpringMvc配置文件-->
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:spring-mvc.xml</param-value>
       </init-param>
        <!--
           Servlet 第一次发送请求,请求Servlet对象创建,创建一次,以后新的请求过来,公用Servlet对象,也就是说Servlet本质是单例的!
           load-on-startup:调整Servlet创建对象的时机,服务器启动的时候就创建对象!
        -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <!--中央控制器访问地址:*.do,*.action,/ -->
        <!-- 拦截所有带有/的路径请求(所有请求)
          /index.jsp
          公共资源:js/css/images 无需要拦截 在spring-mvc的第四步设置静态资源访问
          /js/index.js
          /css/index.css
          /images/1.png
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

load-on-startup标签的作用

Servlet默认是第一次访问的时候创建对象,那么可以load-on-startup标签设置Servlet创建对象的时机:

如果<load-on-startup>负数</load-on-startup>,那么表示用户第一次请求就实例化对象

如果<load-on-startup>正整数</load-on-startup>,表示提前了Servlet创建对象的时机,是服务器启动的时候就创建!如果有多个Servlet,那么正整数越小优先级越高!

2.4. 创建SpringMvc.xml

    <!--扫描控制器-->
    <tx:component-scan base-package="com.ssm.controller"/>

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

    <!--静态资源放行-->
    <!--    <mvc:resources location="/images/" mapping="/images/**"/>-->
    <!--    <mvc:resources location="/js/" mapping="/js/**"/>-->

    <!--静态资源放行 把静态资源交给 tomcat默认的servet处理 SpringMvc不管!-->
    <mvc:default-servlet-handler/>

    <!--开启注解驱动-->
    <mvc:annotation-driven/>

2.5.创建一个控制器

@Controller
public class IndexController {
    /**
     * 跳转Index
     */
    @RequestMapping(value = "/")
    public String toIndex(){
        //默认转发
        return "index";
    }
}

2.6.创建一个JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SSM项目首页</title>
</head>
<body>
  <a href="/student/list">学生列表</a></br>
  <a href="/classes/list">班级列表</a></br>
  <img src="/images/12345.jpg" width="400"/>
</body>
</html>

2.7.启动访问

3.HelloWorld基本流程(面试重点,记住了)

4.SpringMvc整合模板引擎-Thymeleaf模板引擎

简单说,Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:

n Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示

n Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能

4.1.导入Thymeleaf模板引擎依赖

 <!-- thymeleaf模板 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>
​
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>

4.2. SpringMvc整合Thymeleaf模板

要将Thymeleaf 整合到springMvc中,只需将模板解析器实例和模板引擎实例以bean的方式配置到spring的配置文件中,让spring 容器自动管理模板解析器实例和模板引擎实例,和手动代码创建模板解析器实例和模板引擎实例原理是一样的。

<!--模板引擎解析器-->
<bean id="templateResolver"
      class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <!--视图前缀-->
    <property name="prefix" value="/WEB-INF/templates/" />
    <!--视图后缀-->
    <property name="suffix" value=".html" />
    <!--模板语法模式 HTML5-->
    <property name="templateMode" value="HTML5" />
    <!--模板引擎关闭缓存 开发方便 -->
    <property name="cacheable" value="false" />
    <!--编码-->
    <property name="characterEncoding" value="UTF-8" />
</bean>

<!--模板引擎-->
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver" />
</bean>

<!--Thymeleaf视图解析器-->
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine" />
    <!-- 中文乱码问题 -->
    <property name="characterEncoding" value="UTF-8"/>
</bean>

4.3. 测试SpringMvc整合Thymeleaf模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李仙桎

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值