1.5.3 基于Java配置方式使用Spring MVC

news2024/9/21 2:47:53

在这里插入图片描述
本实战教程主要介绍了如何使用Java配置方式来使用Spring MVC框架。相较于XML配置方式,Java配置方式提供了一种更为简洁和灵活的配置方法。

  1. 项目创建与配置

    • 创建一个Jakarta EE项目,并设置项目名称和位置。
    • 选择Jakarta EE 10版本,不添加依赖,并创建Maven项目框架。
  2. 项目依赖添加

    • 修改pom.xml文件,添加Spring MVC相关的依赖,包括Spring核心模块、Web功能、MVC框架等。
    • 添加JSTL、Servlet API、日志框架、单元测试和JSON/XML处理库等依赖。
  3. 视图层页面创建

    • resources/templates/views目录下创建登录页面login.jsp、登录成功页面success.jsp和登录失败页面failure.jsp
  4. 控制器编写

    • 创建LoginController类,使用@Controller注解标注,并编写登录处理方法。
  5. Spring MVC配置类

    • 创建SpringMvcConfig类,使用@Configuration@EnableWebMvc@ComponentScan注解,并定义视图解析器和视图控制器。
  6. Web应用初始化配置

    • 实现WebApplicationInitializer接口,创建MyWebAppInitializer类,用于替代传统的web.xml配置。
  7. 部署Web应用项目

    • 配置服务器,添加Tomcat本地服务器,并设置项目artifacts。
  8. 功能测试

    • 启动服务器,访问登录页面,并测试登录成功与失败的页面跳转。
  9. 实战练习

    • 完成多个任务,包括创建首页、首页跳转到登录页面、正确处理静态资源、获取服务器端返回的简单字符串和JSON/XML数据。
  10. 控制器扩展

    • 创建GetStringControllerGetJsonController类,用于返回HTML字符串和JSON数据。
    • 创建GetXmlController类,用于返回XML数据,并解决消息转换问题。
  11. 静态资源处理

    • 配置静态资源处理器,添加图片、CSS样式表和JavaScript脚本,并在首页中使用。
  12. 消息转换器配置

    • 在Spring MVC配置类中添加MappingJackson2HttpMessageConverterMappingJackson2XmlHttpMessageConverter,以支持JSON和XML数据的转换。

通过本教程,学习者将能够掌握Spring MVC的Java配置方式,并能够创建一个具有用户登录功能、静态资源处理、以及能够返回JSON和XML数据的Web应用。


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
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <properties>
        <!-- spring.version -->
        <spring.version>6.1.5</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 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>jakarta.servlet.jsp.jstl</groupId>
            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!--日志框架-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <!--对json的支持-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.14.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.14.0</version>
        </dependency>
        <!--对xml的支持-->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.14.0</version>
        </dependency>
    </dependencies>
</project>

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

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

相关文章

【webrtc】RtpToNtpEstimator:最小二乘法、ntp估计及c++实例

上一篇: 【webrtc】RtpToNtpEstimator:将 RTP 时间戳映射到 NTP 时间 分析了最小二乘法的实现及对rtp到ntp的映射计算的调用流程 基于最小二乘法进行估计 RtpToNtpEstimator::Estimate G:\CDN\rtcCli\m98\src\system_wrappers\source\rtp_to_ntp_estimator.cc RtpToNtpEstima…

kettle学习之子映射组件

映射组件就跟java中的函数方法一样&#xff0c;类似一个子流程。 练习开始 根据数据库表中的id查询出想要的字段&#xff0c;并把字段存到excel表中 一、表输入 二、子映射 映射输入规范&#xff0c;类似java方法中的形参 name vsxcd是方法返回的参数 三、excel输出 运行结果…

【Linux】线程操作

文章目录 前言一、线程相关操作函数1. pthread_create2. pthread_join3. pthread_exit4. pthread_cancel5. pthread_detach6. 示例代码 前言 在 Linux 中并不存在真正意义上的线程, 而是通过复用进程的结构来实现的, 叫做轻量级进程. 线程是一个进程内部的一个执行流, 而一个进…

LangChain实战技巧之三:关于Tool的一点拓展

&#xff08;几乎&#xff09;任一LLM在bind_tools时&#xff0c;都是习惯先定义一个Function或BaseTool&#xff0c;然后再bind&#xff08;bind_tools&#xff09;具体方式可参考我的这篇文章 AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会 但这里的tool未必需…

GC日志中的Metaspace

GC 日志中的 Metaspace used 20580K, capacity 21180K, committed 21248K, reserved 1067008K class space used 2594K, capacity 2752K, committed 2816K, reserved 1048576K 一、Metaspace介绍 知道jdk8之前有perm这一整块内存来存klass等信息&#xff0c;我们的参数里也…

Python 文件操作指南:使用 open 和 with open 实现高效读写

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本系列文章主要分享文件操作&#xff0c;了解如何使用 Python 进行文件的读写操作&#xff0c;介绍常见文件格式的读取和写入方法&#xff0c;包括TXT、 CS…

vue 表格表头展示不下,显示。。。;鼠标悬浮展示全部

vue 表格表头展示不下&#xff0c;显示。。。&#xff1b;鼠标悬浮展示全部 <templateslot-scope"scope"slot"header"><span:title"临时证券类型"style"white-space:nowrap">{{ 临时证券类型 }}</span></templa…

老年人培聊助手:温暖心灵的智能陪伴

在快节奏的现代生活中&#xff0c;老年人常常感到孤独和寂寞。为了给他们带来更多的陪伴和温暖&#xff0c;我们推出了全新的老年人培聊助手智能体。 这款培聊助手智能体不仅是一个智能聊天工具&#xff0c;更是老年人生活中的贴心伙伴。它拥有自然流畅的语言交互能力&#xf…

一文详解SaaS增长模式:PLG、MLG、SLG哪种更适合你?

在SaaS&#xff08;软件即服务&#xff09;的领域中&#xff0c;增长策略的选择对于企业的成功至关重要。其中&#xff0c;PLG&#xff08;产品驱动增长&#xff09;、MLG&#xff08;市场驱动增长&#xff09;和SLG&#xff08;销售驱动增长&#xff09;是三种常见的策略&…

COD20使命召唤20新赛季免费玩 COD20免费体验在哪下

使命召唤20&#xff08;COD20&#xff09;的免费周已经正式启动&#xff0c;这是一个为期一周的特别活动&#xff0c;为玩家们带来了前所未有的游戏体验。在这个特殊的周期里&#xff0c;多人模式和僵尸模式将向公众免费开放&#xff0c;玩家们可以尽情地探索和体验游戏的精彩内…

PUBG绝地求生卡在初始界面 登不上去 打不开游戏的解决办法

PUBG绝地求生卡在初始界面 登不上去 打不开游戏的解决办法 吃鸡热潮依旧绝地求生PUBG可是咱们玩家的心头好啊&#xff01;不过有时候可能会遇到点小麻烦&#xff0c;比如PUBG绝地求生卡在初始界面 登不上去 打不开游戏的解决办法。小编这就给大家分享几个超实用的解决方法&…

想用Python做OCR?看看这篇文章

OCR是Optical Character Recognition的缩写&#xff0c;中文名为光学字符识别。它是一种通过计算机技术对图像或扫描文档中的文字进行识别和理解的过程。OCR技术可以将图像中的文字转换为可编辑、可搜索的文本&#xff0c;使得计算机能够理解和处理这些文字信息。 OCR技术通常…

马斯克拟打造xAI“算力超级工厂”,助力聊天机器人Grok

KlipC报道&#xff1a;马斯克计划推出xAI超级计算机&#xff0c;为下一代人工智能聊天机器人Grok提供动力&#xff0c;直言这将是一个“算力超级工厂”&#xff0c;并希望在2025年秋季之前能运行起来。 xAI是马斯克去年创立的人工智能初创公司&#xff0c;“尽可能寻求真相”、…

明日周刊-第11期

上周末去参加了软考&#xff0c;这个考试目前很热门&#xff0c;参加考试的人也非常多。笔者已经算是二战了&#xff0c;今年从笔试改革成了机考。618的购物活动也都已经开始了&#xff0c;我给狗子买了一袋进口的高端狗粮渴望&#xff0c;但是买回来发现它并不爱吃&#xff0c…

第五天 从零开始构建基于Kubernetes的DevOps平台

基于Kubernetes的DevOps平台实践 持续集成工具&#xff1a; JenkinsgitlabciTekton 本章基于k8s集群部署gitlab、sonarQube、Jenkins等工具&#xff0c;并把上述工具集成到Jenkins中&#xff0c;以Django项目和SpringBoot项目为例&#xff0c;通过多分支流水线及Jenkinsfile…

使用VUE3+TS+elementplus创建一个增加按钮

一、前言 在上一篇文章中分享了创建table的过程&#xff0c;详见&#xff08;VUE3TSelementplus创建table&#xff0c;纯前端的table&#xff09;&#xff0c;本文在创建好的table的基础上&#xff0c;再创建一个增加按钮。 二、程序展示 1、前面创建table的程序 <templ…

记一次攻防演练中的若依(thymeleaf 模板注入)getshell

记一次攻防演练中幸运的从若依弱口令到后台getshell的过程和分析。 0x01 漏洞发现 首先我会先把目标的二级域名拿去使用搜索引擎来搜索所用的搜索引擎收集到包含这个目标二级域名的三级域名或者四级域名的网站。 这样子可以快速的定位到你所要测试的漏洞资产。 1、推荐三个…

Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程

《渡鸦2》&#xff08;Raven 2&#xff09;是由韩国开发的一款大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;类型的手游&#xff0c;作为前作《Raven》的续集&#xff0c;继承并发展了其黑暗奇幻世界观&#xff0c;同时在游戏设计和内容上进行了大量创新。游戏预计于…

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析&#xff0c;通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件&#xff0c;并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…

阿里云天池AI课程证书学习计划

即日起&#xff0c;加入天池AI课程证书学习计划&#xff0c;解锁新技能&#xff0c;领取结业证书&#xff0c;我们的每一次学习、每一次成长都值得被见证&#xff01; https://tianchi.aliyun.com/specials/promotion/AICourses