【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配置
相关推荐
加油,旭杏24 分钟前
【中间件学习】fastCG介绍和使用
学习·nginx·fastcgi
limengshi13839230 分钟前
通信工程学习:什么是TFTP简单文件传输协议
网络·网络协议·学习·信息与通信
GFCGUO1 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
丝丝不是土豆丝2 小时前
学习 CSS 新的属性 conic-gradient 实现环形进度条
学习
S hh3 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
wusam3 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)
学习·docker·centos
攸攸太上3 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
Geek之路4 小时前
QT系统学习篇(1)
开发语言·qt·学习
IFTICing4 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
新手unity自用笔记4 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#