【WEEK2】 【DAY1】第一个MVC程序之使用注解【中文版】

2024.3.4 Monday

接上文 【WEEK1】 【DAY5】第一个MVC程序之配置文件【中文版】

目录

3.2.使用注解(在实际使用中用不到3.1)

3.2.1.新建一个module,名为springmvc-03-hello-annotation,添加web支持

3.2.2.由于Maven可能存在资源过滤的问题,我们将配置完善(web-pom.xml)

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">
    <parent>
        <artifactId>SpringMVC_try1</artifactId>
        <groupId>com.kuang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springmvc-03-hello-annotation</artifactId>

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

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

3.2.3.在pom.xml文件引入相关的依赖

  • 主要有Spring框架核心库、Spring MVC、servlet , JSTL等。
    (在父依赖中已经引入了:仅需检查右侧Maven栏中的Dependencies)

3.2.4.配置web.xml

  1. 添加web支持(详见W1D2 1.3 建立一个module:名为 springmvc-01-servlet, 添加Web app的支持
  2. 添加lib依赖(详见W1D5 3.1.8.配置tomcat,启动测试
  3. 修改web-WEB-INF-web.xml
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">

    <!--1.注册servlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
            <!--     这里仍然需要配置springmvc-servlet.xml文件       -->
        </init-param>
        <!-- 启动顺序,数字越小,启动越早 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--所有请求都会被springmvc拦截 -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
  1. 注意点
  • / 和 /* 的区别:< url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* </ url-pattern > 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
  • 注意web.xml版本问题,要最新版!
  • 注册DispatcherServlet
  • 关联SpringMVC的配置文件
  • 启动级别为1
  • 映射路径为 / 【不要用/*,会404】

3.2.5.添加SpringMVC配置文件

  1. 在resource目录下新建springmvc-servlet.xml配置文件


    配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:
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
       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容器统一管理 -->
    <!-- 想要让注解生效,则需要(在java文件夹下)额外注册一个包(每层名称如下行双引号引用部分com.kuang.controller) -->
    <context:component-scan base-package="com.kuang.controller"/>

    <!-- 让Spring MVC不处理静态资源 -->
    <!-- 一般会引用一些资源(suffix is like .css .js .html .mp3 .mp4)-->
    <!-- 下面这行是默认的资源过滤代码(固定写法) -->
    <mvc:default-servlet-handler />

    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们 自动完成 上述两个实例的注入。
     -->
    <mvc:annotation-driven />

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

</beans>
  1. 注意
  • 在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。
  • 让IOC的注解生效
  • 静态资源过滤 :HTML . JS . CSS . 图片 , 视频 ...
  • MVC的注解驱动
  • 配置视图解析器

3.2.6.新建视图层

  1. 在web->WEB-INF下创建->jsp文件夹->再创建hello.jsp文件
xml 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>标题显示在这里</title>  <!--显示在标签上-->
</head>
<body>
${msg}
</body>
</html>

参考的链接:HTML中的head和body标签及作用

  1. EL表达式

Expression language可以取出Model中存放的值,或者对象
EL表达式

3.2.7.新建HelloController

  1. 在src->main->java->com->kuang->controller文件夹下创建HelloController.java文件
java 复制代码
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //自动装配到springmvc-servlet.xml第15行
//@RequestMapping("/hello0")//如果在这写地址,则下方所有都在此地址下继续拼接具体路径

public class HelloController {

    // 这是一个映射请求,如果想要多个请求,则需要写多个方法(从@RequestMapping()开始直至方法结束)
    //如果第八行生效,则真实路径为localhost:8080/hello0/hello
    @RequestMapping("/hello")   //真实访问地址"项目名->HelloController->hello":此处是跳转到hello.jsp
    public String hello(Model model){
        //封装数据:向模型中添加属性msg与值,可以在JSP页面中取出并渲染
        model.addAttribute("msg","Hello,SpringMVC Annotation");

        return "hello"; //在装配到springmvc-servlet.xml后将被视图解析器处理
    }

}
  1. 说明
  • @Controller是为了让Spring IOC容器初始化时自动扫描到;
  • @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。

3.2.8.配置Tomcat运行

详见W1D5 3.1.8.配置tomcat,启动测试,开启服务器,访问对应的请求路线
http://localhost:8080/springmvc_03_hello_annotation_war_exploded/hello

3.2.9.小结

  1. 实现步骤
  • 新建一个web项目
  • 导入相关jar包
  • 编写web.xml , 注册DispatcherServlet
  • 编写springmvc配置文件
  • 接下来就是去创建对应的控制类 , controller
    -最后完善前端视图和controller之间的对应
  • 测试运行调试
  1. 使用springMVC必须配置的三大件
  • 处理器映射器、处理器适配器、视图解析器
  • 通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置
相关推荐
oceanweave1 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
吴梓穆3 小时前
UE5学习笔记 FPS游戏制作43 UI材质
笔记·学习·ue5
学会870上岸华师3 小时前
c语言学习16——内存函数
c语言·开发语言·学习
XYN613 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
啊哈哈哈哈哈啊哈哈3 小时前
R3打卡——tensorflow实现RNN心脏病预测
人工智能·深度学习·学习
Alt.93 小时前
SpringMVC基础一(SpringMVC运行原理)
数据库·spring·mvc
KangkangLoveNLP4 小时前
深度探索:策略学习与神经网络在强化学习中的应用
人工智能·深度学习·神经网络·学习·机器学习·自然语言处理
穷儒公羊5 小时前
第一部分——Docker篇 第六章 容器监控
运维·后端·学习·docker·云原生·容器
CAE虚拟与现实5 小时前
记录一下学习docker的命令(不断补充中)
学习·docker·容器·容器化·docker部署·docker命令
茶茶只知道学习5 小时前
(2)网络学习之堡垒机
网络·学习