SpringMVC 学习(三)注解开发

news/2024/7/24 12:50:38 标签: spring

4. 注解开发

4.1 环境搭建

(1) 新建 maven 模块

springmvc-03-annotation

(2) 确认依赖

确认方法同 3(2),手动导入发布依赖见3(11)

<!--资源过滤-->
<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>

(3) 添加 web 支持

注意 web.xml 版本问题,要最新版

(4) 配置 web.xml

<!--web/WEB-INF/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">

    <!--1.注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--2.关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--3.启动级别-1-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--4.映射路径为 / 【不要用/*,会404】-->
    <!--
        / 匹配所有的请求(不包括.jsp)
        /* 匹配所有的请求(包括.jsp)
    -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

springmvc__76">(5) 新建 springmvc 配置文件

<!--resources/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"
       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">
    <!--1.自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
    <context:component-scan base-package="com.kuang.controller"/>
    <!--2.让Spring MVC不处理静态资源-->
    <mvc:default-servlet-handler />
    <!--3.支持mvc注解驱动-->
    <!--
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />
    <!--4.视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

(8) 新建视图

<!--web/WEB-INF/jsp/hello.jsp-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

${msg}

</body>
</html>

(7) 新建 Controller

// 将此类作为控制器注册进 Spring 中
@Controller
@RequestMapping("hello")
public class HelloController {

    /**
     * hello 看控制器
     * @param model 模型
     * @return 字符串
     */
    @RequestMapping("/helloMvc")    // http://localhost:8080/hello/helloMvc
    public String helloMvc(Model model) {
        // 封装数据到 model
        model.addAttribute("msg", "HelloSpringMVCAnnotation!");
        // 此字符串会被视图解析器解析并匹配视图 web/WEB-INF/jsp/hello.jsp
        return "hello";
    }
}

控制器使用注解 @Controller ,此注解标注下的类中方法没有标注 @ResponseBody 返回字符串会被视图解析器解析并匹配视图;

@RestController 类下的方法或标注了 @ResponseBody 注解的方法,返回字符串不会被视图解析器解析,视图会显示原字符串。

4.2 小结

  1. 新建web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 创建视图
  6. 创建对应的控制类 , controller
  7. 完善前端视图和controller之间的对应
  8. 测试运行调试.

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器,而处理器映射器处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置


http://www.niftyadmin.cn/n/5050665.html

相关文章

小程序中Echarts实现隐藏x轴,y轴,刻度线,网格

参考了大佬的链接 首次在小程序中使用echarts踩了一些小坑做个记录&#xff0c;希望可以帮到同样踩坑的同学 这里以柱状图作为例子&#xff0c;扁扁的柱状图什么线都没有了 xAxis: {show:false, // 不显示坐标轴线、坐标轴刻度线和坐标轴上的文字axisTick:{show:false // 不显…

MySQL - 关于约束类型和作用的介绍

约束的概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 约束的作用&#xff1a;用于保证数据库中数据的正确性、完整性和一致性。 约束分类&#xff1a; 约束类型作用关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该…

Ansys Zemax | 如何设计光谱仪——实际应用

光谱学是一种无创性技术&#xff0c;是研究组织、等离子体和材料的最强大工具之一。 本文介绍了如何使用市售的光学元件来实现透镜-光栅-透镜&#xff08;LGL&#xff09;光谱仪。进行光谱仪的设置&#xff0c;并对其设计进行改进和优化。&#xff08;联系我们获取文章附件&…

手把手教 - 开源库 libmodbus 的RTU-Master 的使用笔记

测试环境&#xff1a;基于nuc980开发板 Linux信息&#xff1a;Linux buildroot 4.4.289 #8 PREEMPT Thu Sep 21 14:29:45 CST 2023 armv5tejl GNU/Linux 目录&#xff1a; 一、libmodbus 库简介 二、下载链接 三、移植准备 四、移植过程和完整代码 五、测试结果 一、libmodbus …

服务接口调用OpenFeign_入门案列

构建cloud-consumer-feign-order80工程 修改POM文件 <!-- 引入OpenFeign依赖 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>编写YML文件…

算法与数据结构-堆

文章目录 什么是堆如何实现一个堆&#xff1f;如何基于堆实现排序&#xff1f;1. 建堆2. 排序 什么是堆 堆是一种特殊的树&#xff0c;特殊点有二&#xff0c;如下&#xff1a; 堆是一个完全二叉树&#xff1b;堆中每一个节点的值都必须大于等于&#xff08;或小于等于&#…

虹科产品 | HK-ATTO 光纤通道卡利用FC-NVMe 提升全闪存存储阵列性能

一、虹科ATTO 光纤通道HBA 随着对高速数据访问和低延迟存储解决方案的需求日益增长&#xff0c;虹科ATTO 最新的光纤通道创新技术带来了改变游戏规则的突破。原生光纤通道和第二代FC-NVMe标准使虹科ATTO光纤通道HBA能够提供无与伦比的速度和效率&#xff0c;显著加快全球数据中…

积跬步致千里 || 可视化动图展示

可视化动图展示 目前只能在 jupyter notebook 中测试成功 %matplotlib notebook import numpy as np import matplotlib.pyplot as plt import timen 500 data np.random.normal(0,1,n)fig plt.figure() ax fig.add_subplot(111)fig.show() fig.canvas.draw()for i in ra…