Java配置方式使用Spring MVC

news2024/12/23 5:05:10

文章目录

  • 基于Java配置方式使用Spring MVC
    • 一、创建Maven项目
    • 二、添加相关依赖
    • 三、创建日志属性文件
    • 四、创建首页文件
    • 五、创建Spring MVC配置类
    • 六、创建Web应用初始化配置类
    • 七、创建演示控制器
    • 八、配置Tomcat服务器
    • 九、启动服务器,查看效果


基于Java配置方式使用Spring MVC

上一节,我们学习了如何基于XML配置与注解的方式使用Spring MVC,涉及到三个XML配置文件:Spring配置文件(spring-config.xml)、Spring MVC配置文件(spring-mvc-config.xml)、Web部署描述文件(web.xml),这一节,我们通过案例学习如何基于Java配置类与注解的方式使用Spring MVC,只有Java配置类,没有XML配置文件。

一、创建Maven项目

Maven项目 - SpringMvcDemo02
在这里插入图片描述在这里插入图片描述

二、添加相关依赖

在pom.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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.army.spring</groupId>
    <artifactId>SpringMvcDemo02</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <!-- spring.version -->
        <spring.version>5.3.25</spring.version>
    </properties>

    <dependencies>
        <!--Spring核心-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--Spring Bean-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--Spring容器-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--Spring测试-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--Spring数据库支持-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--数据库驱动工具包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <!--数据库连接池框架-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.24</version>
        </dependency>
        <!--日志框架-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--Spring AOP-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--AspectJ支持-->
        <dependency>
            <groupId>aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.5.4</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
            <scope>runtime</scope>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--Spring Web-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--Spring MVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--JSP标准标签库-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--Servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--对json的支持-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.7</version>
        </dependency>
        <!--对xml的支持-->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.5.3</version>
        </dependency>
    </dependencies>
</project>

单击刷新按钮,下载(更新)依赖
在这里插入图片描述
查看依赖
在这里插入图片描述

三、创建日志属性文件

在resources目录里创建log4j.properties
在这里插入图片描述

四、创建首页文件

在resources里创建templates子目录,然后在里面创建index.jsp
在这里插入图片描述

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>首页</title>        
    </head>
    <body>
        <h1 style="text-align: center">Welcome to Spring MVC World~</h1>
        <h3 style="text-align: center"><%= new Date() %></h3> <!--JSP表达式元素-->
    </body>
</html>

五、创建Spring MVC配置类

创建net.army.spring.config包,然后在里面创建SpringMvcConfig类
在这里插入图片描述

package net.army.spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

/**
 * 作者:梁辰兴
 * 日期:2023/5/11
 * 功能:Spring MVC配置类
 */
@Configuration // 表明当前类是配置类
@EnableWebMvc  // 启用Web MVC功能
@ComponentScan("net.army.spring") // 组件扫描
public class SpringMvcConfig {
    // 定义内部资源视图解析器
    @Bean
    public InternalResourceViewResolver viewResolver() {
        // 创建内部资源视图解析器对象
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        // 设置内部资源视图解析器对象属性
        viewResolver.setViewClass(JstlView.class); // 设置视图类
        viewResolver.setPrefix("/WEB-INF/classes/templates/"); // 设置前缀
        viewResolver.setSuffix(".jsp"); // 设置后缀
        // 返回内部资源视图解析器对象
        return viewResolver;
    }
}

六、创建Web应用初始化配置类

现在Java配置方式在逐步取代XML配置方式,WebApplicationInitializer接口可以看做是web.xml的替代,通过实现WebApplicationInitializer接口,在其中可以添加servlet,listener等,在加载Web项目时会加载这个接口实现类,从而起到web.xml相同的作用。

在net.army.spring.config包里里创建MyWebAppInitializer类
在这里插入图片描述

package net.army.spring.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * 作者:梁辰兴
 * 日期:2023/5/11
 * 功能:Web应用初始化配置类
 */
public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // 创建Web应用容器(基于注解配置类的Web应用容器)
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        // 注册配置类
        context.register(SpringMvcConfig.class); // 对应先前的spring-mvc-config.xml文件
        // 绑定当前的ServletContext对象 - 方法的参数(servletContext)
        context.setServletContext(servletContext);
        // 注册Spring MVC的前端控制器(DispatcherServlet)
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
        // 过滤一切资源请求
        servlet.addMapping("/");
        // 设置启动加载顺序
        servlet.setLoadOnStartup(1);
    }
}

七、创建演示控制器

创建net.army.spring.controller子包,然后在里面创建DemoController类
在这里插入图片描述

package net.army.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * 作者:梁辰兴
 * 日期:2023/5/11
 * 功能:演示控制器
 */
@Controller
public class DemoController {
    @GetMapping("/index")
    public String index() {
        // 返回逻辑视图名
        return "index";
    }
}

八、配置Tomcat服务器

单击【Current File】下的【Edit Configuration…】
在这里插入图片描述单击加号,【Local】
在这里插入图片描述
配置如下图所示,最后单击【Fix】
在这里插入图片描述单击【Artifacts】-【+】-【Web Application:Exploded】
在这里插入图片描述
输入项目名称:SpringMvcDemo02,添加依赖到输出目录和项目编译的输出,单击【Put into /WEB-INF/lib】
在这里插入图片描述单击【OK】按钮
在这里插入图片描述
此时可以看到SpringMvcDemo02就已经部署到服务器上了
在这里插入图片描述
切换到【Server】选项卡

在这里插入图片描述

九、启动服务器,查看效果

访问:http://localhost:8080/SpringMvcDemo02/index

在这里插入图片描述

修改演示控制器,修改映射路径
在这里插入图片描述
重启服务器,访问:http://localhost:8080/SpringMvcDemo02

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「计算机网络」HTTP1.0、HTTP1.1和HTTP2.0的演变

「计算机网络」HTTP1.0、HTTP1.1和HTTP2.0的演变 参考&鸣谢 HTTP1.0、HTTP1.1、HTTP2.0的关系和区别 doubleYong 计算机网络_HTTP1.0、HTTP1.1和HTTP2.0的区别 一只前端小马甲 文章目录 「计算机网络」HTTP1.0、HTTP1.1和HTTP2.0的演变一、先说结论二、HTTP网络请求过程三…

【01】一步一步命令行输出VC hello world

一步一步命令行输出VC hello world 安装VS2022编写hello world程序配置cl.exe编译helloworld.cpp总结 安装VS2022 VS2022的安装程序下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/ 。下载完成之后点击程序会进入到选择安装VS2022组件的安装程序&#xff0c;…

小红的好数组陡峭值之和

题目如下 这个题我一开始是先生成满足0&#xff0c;1&#xff0c;2的全排列&#xff0c;但是n很大时很快就超出内存限制了&#xff0c;后来想到用动态规划的方法做&#xff0c;这里先分析一下。 n2时&#xff0c;有01&#xff0c;02&#xff0c;10&#xff0c;12&#xff0c;2…

自动化设备应用之样本手册

Lookbook&#xff0c;新品展示图&#xff0c;是时尚品牌的必备品。Lookbook既展示了新系列&#xff0c;也突出了品牌的基本调性。创建样本手册是释放创造力并从其他时装设计师中脱颖而出的机会。有吸引力的封面、精心策划的图像、精巧的布局、颜色标识和传达风格都是品牌内容传…

建构筑物安全监测

监测要求 1&#xff09;观测点应设置在观测段结构构件的控制断面上&#xff1b; 2&#xff09;平面应力状态的结构应力观测宜设置三向应变观测点,主应力方向明晩的部位可设置单向或两向应变观测点&#xff1b; 3&#xff09;建筑物的重要部位应增设观测点&#xff1b; 4&am…

ControlNet让SD变得可控

ControlNet是一个用于深度神经网络的控制技术&#xff0c;它可以通过操作神经网络块的输入条件来控制神经网络的行为。在这里&#xff0c;“网络块”是指常用的神经层集合&#xff0c;例如“resnet”块、“conv-bn-relu”块、多头注意力块等。通过克隆神经网络块的参数并应用零…

软考A计划-真题-分类精讲汇总-第十七章(数据结构与算法)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

智慧档案馆建设之八防十防常用的设备

档案八防十防常用的十款设备 序号 名称 1 温湿度传感器 2 空气质量云测仪 3 恒湿净化一体机 4 健康防护一体机 5 综合智能触摸一体化区域控制器 6 空调红外学习控制模块 7 漏水检测控制器及感应线 8 数字烟雾传感器 9 红外防盗传感器 10 系统软件平台 附…

redis高级篇(1)

分布式缓存 单节点redis的问题: 1)数据丢失的问题&#xff0c;redis是基于内存来进行存储的&#xff0c;当服务器重启的时候可能会丢失数据 2)无法满足高并发场景 3)如果redis宕机&#xff0c;那么这个服务不可用&#xff0c;所以就需要有一种自动的故障恢复手段&#xff0c;必…

从裸机启动开始运行一个C++程序(一)

前言 对于一个C程序员来说&#xff0c;可能更多是是每天都在跟各种上层语义、设计模式、软件方法等等在打交道。但对于「一个C程序是如何运行在机器上的」这件事可能会比较陌生。有时&#xff0c;遇到一些问题&#xff0c;在宏观角度看起来可能比较难以解释&#xff0c;但其实…

activiti6是使用,或签,会签

会签&#xff1a;指同一个审批节点设置多个人&#xff0c;如ABC三人&#xff0c;三人会同时收到审批&#xff0c;需全部同意之后&#xff0c;审批才可到下一审批节点&#xff1b; 或签&#xff1a;也有叫“竞签”、“串签”&#xff1a;指同一个审批节点设置多个人&#xff0c;…

电脑上删除掉的文件怎么恢复?一文告诉你详细恢复方法!

对于不太会整理电脑的用户来讲&#xff0c;电脑上的文件一旦保存多了&#xff0c;不但会使得电脑看上去很杂乱&#xff0c;还会在我们需要寻找某一个文件的时候&#xff0c;半天都找不到。 所以&#xff0c;对于一些可能不会再需要的文件&#xff0c;我们会选择直接删除&#x…

Dart 3.0 语法新特性 | 类型修饰符 Class modifiers

theme: cyanosis 在 dart 3.0.0 之后&#xff0c;对类型的修饰符进行了拓展&#xff0c;现在类型的修饰符有&#xff1a; | 名称 | 作用 | | --- | --- | | mixin | 混入类修饰符 | | sealed | 密封可枚举的子类型 | | abstract | 抽象类修饰符 | | final | 一定程度上关闭派生…

《测试开发》测试启蒙

文章目录 测试是什么调试和测试的区别 什么是需求需求的定义需求的特征测试人员眼里的需求是什么如何深入了解需求 测试用例什么是测试用例为什么有测试用例 bug如何描述一个bug如何定义bug的级别bug的生命周期 软件测试的生命周期 &#x1f451;作者主页&#xff1a;Java冰激凌…

理解神经网络的注意力机制(Attention)及PyTorch 实现

刚刚结束的 2022 年对于人工智能的许多进步来说是不可思议的一年。最近 AI 中的大多数著名地标都是由称为变形金刚的特定类别模型驱动的,无论是 chatGPT 的令人难以置信的进步,它席卷了世界,还是稳定的扩散,它为您的智能手机带来了类似科幻小说的功能。即使是 Tesla 的自动…

100种思维模型之联脑破界思维模型-64

前面我们分享过破界思维模型&#xff0c;即要不断打破固有认知边界&#xff0c;用变化的眼光看待一切事物的思维模型。 今天我们介绍一个破界方法的思维模型&#xff0c;一个告诉我们可通过联脑学习&#xff0c;打破独立大脑带来边界的思维模型。 01、何谓联脑破界思维模型 一…

crow-han(基于go-micro框架的微服务脚手架)-01-快速启动(简介、快速启动、接口测试)

文章目录 1. 简介1.1 包含内容1.2 swagger展示 2. 快速启动2.1 下载2.2 环境变量配置2.3 goland配置2.5 启动2.6 查看结果 3. swagger 接口测试3.1 url3.2 认证3.2.1 获取token3.2.2 Bearer 认证 3.3 测试接口&#xff08;已创建用户为例&#xff09; 1. 简介 一个基于go-micr…

测试4年,跳槽一次涨8k,我跳了3次···

最近有人说&#xff0c;现在测试岗位初始工资太低了&#xff0c;有些刚刚入行的程序员朋友说自己工资连5位数都没有.....干了好几年也没怎么涨。看看别人动辄月薪2-3万&#xff0c;其实我想说也没那么难。说下如何高效地拿到3w。 1.暂且把刚入行的条件设低些吧&#xff0c;大专…

大模型综述来了!一文带你理清全球AI巨头的大模型进化史

夕小瑶科技说 原创 作者 | 小戏&#xff0c;Python 如果自己是一个大模型的小白&#xff0c;第一眼看到 GPT、PaLm、LLaMA 这些单词的怪异组合会作何感想&#xff1f;假如再往深里入门&#xff0c;又看到 BERT、BART、RoBERTa、ELMo 这些奇奇怪怪的词一个接一个蹦出来&#xf…