内置tomcat整合SpringMVC

2023-11-15

spring MVC是一个基于MVC模式的表现层框架,在spring2.5以后增加了注解功能。使得开发变得更加高效、快捷。由于spring MVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,可以达到无缝整合。

     springMVC的特点有:

    1、基于的是servlet/jsp模式

              2、控制器不再需要继承其它类,只需要用@Controller注解

      3、应用控制器方法参数,由前端控制器负责封装,方法签名定义灵活。

      4、返回页面直接在方法中指定,可以是String,也可以是其它的,比如:ModelAndView或void等

      5、性能优秀

      下面来看一下,内置tomcat中,如何整合springMVC。

      首先,创建maven项目,导入springMVC相关的依赖。

               由于springMVC是spring的一个模块,所以spring的依赖也需要导入:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.7.RELEASE</version>
</dependency>

       当然,内置tomcat也需要导入    

<dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-core</artifactId>
     <version>9.0.36</version>
</dependency>

       另外,为了方便处理json,还需要导入jackson

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.11.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.module</groupId>
   <artifactId>jackson-module-parameter-names</artifactId>
   <version>2.11.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.datatype</groupId>
   <artifactId>jackson-datatype-jdk8</artifactId>
   <version>2.11.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.11.0</version>
</dependency>  

复制代码

           第二步,需要编写配置类,完成spring和springMVC相关的配置

@Configuration //申明该类为配置类
@ComponentScan(basePackageClasses = WebApplicationConfig.class)//扫描指定类所在包及子包中的spring组件
@EnableWebMvc //提供mvc支持
public class WebApplicationConfig implements WebMvcConfigurer {

    //设置响应信息编码集
    @Override
    public void extendMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter stringHttpMessageConverter =
                (StringHttpMessageConverter) converters.get(1);
        stringHttpMessageConverter.setDefaultCharset(
                Charset.forName("utf-8"));
    }

    //提供静态资源的支持
    @Override
    public void addResourceHandlers(
            ResourceHandlerRegistry registry) {
        //客户端以/html/开始的请求,访问类路径下static/html
        registry.addResourceHandler("/html/**").
                addResourceLocations("classpath:/static/html/");
    }
}

        从这里可以看出,响应信息编码集为utf-8,解决了响应信息乱码问题。客户端所访问的静态文件,比如:html、css、js、图片等放在类路径下。由于创建的是maven项目,所以,可以在resources目录下创建static/html,用于放置静态资源。

     

         第三步,编写启动类,在启动类中注册springMVC的前端控制器。

复制代码

package com.project;

public class MainServer {
    public MainServer(){
        Tomcat tomcat = new Tomcat();//创建tomcat对象
        tomcat.setPort(8088); //设置端口
        tomcat.getConnector();
        
        //创建web容器上下文
        Context context = tomcat.addContext("", null);
        try {
            //注册前端控制器
            DispatcherServlet dispatcherServlet = new DispatcherServlet(
                    this.createApplicationContext(context.getServletContext()));
            Wrapper servlet = tomcat.addServlet(context, "dispatcherServlet", dispatcherServlet);
            servlet.setLoadOnStartup(1);
            servlet.addMapping("/*"); 

            tomcat.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建spring容器的应用上下文对象
     * @param servletContext WEB容器上下文对象
     * @return spring容器应用上下文对象
     */
    public  WebApplicationContext createApplicationContext(
            ServletContext servletContext) {
        AnnotationConfigWebApplicationContext ctx
                = new AnnotationConfigWebApplicationContext();
        ctx.register(WebApplicationConfig.class); //加载配置类

        ctx.setServletContext(servletContext);
        ctx.refresh();
        ctx.registerShutdownHook();
        return ctx;
    }

    public static void main(String[] args) {
        new MainServer();
    }
}

复制代码

  好了,springMVC已经注册进内置tomcat。

       第四步:书写应用控制器处理客户端请求,产生响应:​​​​​​​

package com.project.conrtroller;

@Controller
public class TestController {
    @RequestMapping("/test")
    public String testRequest(String name){
        System.out.println("执行应用控制器方法,参数name为"+name);
       //重定向到指定页面
        return "redirect:/html/info.html";
    }
}

  注意,应用控制器所在的包,必须是配置类扫描包,或子包。比如,在上面配置类中的扫描定义为

@ComponentScan(basePackageClasses = WebApplicationConfig.class)//扫描指定类所在包及子包中的spring组件
public class WebApplicationConfig implements WebMvcConfigurer {
……
}

  那么,应用控制器必须是配置类WebApplicationConfig所在包,及子包中的类。

        在resources目录下,创建static/html。然后,在该目录下,新建info.html,书写文本:“info.html”

  第五步,测试

  运行启动类,打开浏览器,输入:http://localhost:8088/test?name=tom。就可以看到info.html中的内容。并且,在服务器控制台上,有"执行应用控制器方法,参数name为tom"文字输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内置tomcat整合SpringMVC 的相关文章

随机推荐

  • Java中构造方法的继承问题

    1 父类的构造方法是不会被子类继承的 但是子类的构造方法中会有一个隐式的super 来调用父类中的无参数构造方法 验证代码如下 public class FatherClass int a int b public FatherClass
  • 图解ARP协议(四)代理ARP:善意的欺骗

    首发于 跟杰哥学网络与安全 写文章 登录 图解ARP协议 四 代理ARP 善意的欺骗 拼客学院陈鑫杰 24 天前 一 代理ARP概述 我 当电脑要访问互联网上的服务器 目标MAC是什么 很多小伙伴在刚学习网络协议的时候 经常这样直接回应 不
  • [413]notepad把多行转换为一行和内容去重

    文章目录 notepad中如何把多行转换为一行 notepad 文件内容去重 notepad中如何把多行转换为一行 ctrl f 然后替换 扩展按钮 or 正则表达式 先 n 替换为空 后 r 替换为空 notepad 文件内容去重 方法1
  • PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named ‘numpy‘

    原因分析 pycharm所使用的解释器并不是已经安装的python3 6 而是自带了python exe解释器 解决方法 在PyCharm的settings File gt settings gt project 当前项目名 gt Proj
  • idea配置jdbc连接MySQL的全部详细步骤(包含运行代码)

    前言必读 读者手册 必读 云边的快乐猫的博客 CSDN博客 一 导包 1 打开idea 在左上角找到当前使用的这个模块 右键打开新建一个Directory 2 这个目录包命名为lib 3 在本地磁盘中找到下载的MySQL的这个jar包 点击
  • vscode常用插件-Auto Close Tag

    1 插件作者 Jun Han 2 作用 自动补全结束标签 输入
  • seata分布事务

    Seata是什么 官网解释 Seata 是一款开源的分布式事务解决方案 致力于提供高性能和简单易用的分布式事务服务 Seata 将为用户提供了 AT TCC SAGA 和 XA 事务模式 为用户打造一站式的分布式解决方案 用咱们理解的说 s
  • [Pandas]Dataframe中的多条件切片为什么不能使用and运算符

    对于Dataframe中同一列 如果有多个条件 则不能使用and运算符 需要使用 位运算符 示例如下 import pandas as pd df pd DataFrame name a a b b classes 1 2 3 4 pric
  • [哲学部分]马克思主义基本原理概论思维导图

    2020 3 3 更新 之前链接关了补一个 链接 https pan baidu com s 1tsmAkdRG7jE1eMz34Ea4qQ 提取码 7y2j 2019 10 23 更新 由于最近比较忙 没时间一一回复大家的评论和邮件 我把
  • 用选择法对数组中n个整数按由小到大排序

    include
  • 判断python字典中key是否存在的两种方法

    今天来说一下如何判断字典中是否存在某个key 一般有两种通用做法 下面为大家来分别讲解一下 第一种方法 使用自带函数实现 在python的字典的属性方法里面有一个has key 方法 这个方法使用起来非常简单 在python的字典的属性方法
  • 前几天面了个30岁左右的测试员,年薪50w问题基本都能回答上,必是刷了不少八股文···

    互联网行业竞争是一年比一年严峻 作为测试工程师的我们唯有不停地学习 不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水 进入心仪的企业 阿里 字节 美团 腾讯等大厂 所以 大家就迎来了一堆问题 自己目前的能力能不能够支撑自己晋升 如果
  • 2022年11月26日-12月15日(CesiumGeospatial源码抄写+其他视频教程,本周10小时,合计1757小时,剩余8243小时)

    远程办公中 目前 视频教程进行到了mysql 7 1 tf1 4 4 oss 12 1 蓝图反射 1 7 moba 1 5 webapp 2 4 mmoarpg 00A 04 socket 2 41 按照月计划 制定周计划如下 1 cesi
  • 关于浏览器主页被https://hao.360.com/?src=lm&ls=n78852a3c9b劫持

    一 起因 是我的vscode不支持html文件夹右键用vscode打开 后来百度了下 有两种方法 一种是重新下载vscode 一种是在注册表注册vscode信息 鉴于我的vscode里用很多插件了 懒得再下载就决定使用第二种方法 结果设置到
  • java学习路线

    阶段一 第一阶段 Java 基础 第二阶段 数据库 第三阶段 Java Web 第四阶段 主流框架 第五阶段 服务器中间件 第六阶段 微服务和分布式 第七阶段 练手项目 第一阶段 Java 基础 最开始要学习的是 Java 基础 学习了这部
  • Java实现一个简单的Kafka消息测试程序

    记录一下最近做的一个小程序 模拟很多辆车不定时上报里程等状态数据到Kafka 从而对后端的批处理应用进行性能测试 车辆的上报消息是JSON格式 假设包含如下字段 telemetry engineStatus 1 odometer 120 d
  • Always On 数据库无法自动同步的问题

    问题 在给客户的SQL Server 2019 配置好Always On 之后 不久就出现高可用组里的一个库无法正常同步 第一次出现 以为是偶发性问题 直接右键点击恢复数据同步 没一会就同步好了 过了一个月问题又出现了 这次右键恢复数据同步
  • 计算机网络 概念

    一 计算机网络概念 计算机网络的组成 有若干个节点和连接的节点的链路组成 主机的概念 与网络相连接的计算机称为主机 计算机网络 是一个将分散的 具有独立功能的计算机系统 通过通信设备和线路 由功能完善的软件实现资源共享和信息传递 计算机网络
  • 再谈缓存

    凡是涉及管理数据的系统 都可以用图书馆来考虑 都要面临图书的位置查找和实际摆放两个问题 对应的两大组件就是就是index store 所有的数据管理系统都包含这两部分 缓存从过期又什么触发的角度分为容量触发和时间触发 容量触发 就是缓存满了
  • 内置tomcat整合SpringMVC

    spring MVC是一个基于MVC模式的表现层框架 在spring2 5以后增加了注解功能 使得开发变得更加高效 快捷 由于spring MVC是spring框架的一个模块 springmvc和spring无需通过中间整合层进行整合 可以