内嵌式Tomcat整合SSM框架

2023-11-03 13:50

本文主要是介绍内嵌式Tomcat整合SSM框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

笔者在学习的时候发现,为什么每次都要手动去配置Tomcat,我能不能不配啊?所以笔者参考了SpringBoot框架的开发思想,想到了使用内嵌式Tomcat,经过笔者查询大量的资料,最终实现了,那么我们接下来就一起看看怎么实现!

技术栈

JDK17

Apache-tomcat-10.1.6

Spring-6.0.0

SpringMVC-6.0.0

MyBatis-3.5.6

MySQL Driver-8.0.27

本项目源码:https://gitee.com/mumangguo/embed-tomcat-ssm,有需要的自取!

具体实现

  1. 创建普通Maven工程,不需要创建Maven的Web工程

  1. 引入相关依赖,并在properties标签中指定公共版本号

     <properties><spring.version>6.0.0</spring.version><embed.tomcat.version>10.1.6</embed.tomcat.version></properties><dependencies><!-- tomcat相关依赖 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>${embed.tomcat.version}</version></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><version>${embed.tomcat.version}</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- spring相关依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><!-- spring web mvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.1</version></dependency><!-- jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.3</version></dependency><!-- aspectj --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.5</version></dependency></dependencies>
  1. 在resources目录下新建一个名为WEB-INF的目录,在此目录下创建一个web.xml文件,并写入以下内容

目录结构:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 加载spring.xml --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring.xml</param-value></context-param><!-- 配置spring工厂启动 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置springmvc --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
  1. 在resouces目录下新建一个config目录用来管理spring相关配置文件,具体内容如下

目录结构:

jdbc.properties

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=admin

MyBatis-Config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 开启MyBatis的STD标准日志 --><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
</configuration>

spring.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:tx="http://www.springframework.org/schema/tx"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.mmg.service"/><!--引入外部properties配置文件--><context:property-placeholder location="classpath:/config/jdbc.properties"/><!-- 创建数据源 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!-- 创建SqlSessionFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 配置数据源--><property name="dataSource" ref="dataSource"/><!-- 配置mapper文件的位置 --><property name="mapperLocations" value="classpath:mapper/*.xml"/><!-- 配置mybatis的别名 --><property name="typeAliasesPackage" value="com.mmg.entity"/><!-- 指定MyBatis核心配置文件的位置 --><property name="configLocation" value="classpath:/config/MyBatis-Config.xml"/></bean><!-- 配置Mapper扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.mmg.dao"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean><!-- 创建事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 开启事务注解生效 --><tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

springmvc.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"><!-- 开启注解扫描 --><context:component-scan base-package="com.mmg.controller"/><!-- 开启mvc注解驱动 --><mvc:annotation-driven/><!-- 配置试图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean>
</beans>
  1. 编写Tomcat启动类

package com.mmg;import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;import java.io.File;/*** 通过TomcatStarter启动该项目即可* @author mmg*/
public class TomcatStarter {public static void main(String[] args) throws Exception {// 启动 tomcatTomcat tomcat = new Tomcat();tomcat.setPort(Integer.getInteger("port", 8080));tomcat.getConnector();// 创建 WebAppContext context = tomcat.addWebapp("", new File("src/main/resources").getAbsolutePath());WebResourceRoot resources = new StandardRoot(context);resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes",new File("target/classes").getAbsolutePath(), "/"));context.setResources(resources);tomcat.start();tomcat.getServer().await();}
}
  1. 编写实体类,包名为com.mmg.entity,文件名为Users

package com.mmg.entity;/*** 实体类*/
public class Users {private Integer id;private String username;private String birthday;private Integer sex;private String address;public Users() {}public Users(String username, String birthday, Integer sex, String address) {this.username = username;this.birthday = birthday;this.sex = sex;this.address = address;}public Users(Integer id, String username, String birthday, Integer sex, String address) {this.id = id;this.username = username;this.birthday = birthday;this.sex = sex;this.address = address;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Users{" +"id=" + id +", username='" + username + '\'' +", birthday='" + birthday + '\'' +", sex=" + sex +", address='" + address + '\'' +'}';}
}
  1. 编写dao层,包名为com.mmg.dao,文件名为UsersDao

package com.mmg.dao;import com.mmg.entity.Users;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UsersDao {/*** 分页查询*/List<Users> selectByPage(@Param("page") Integer page, @Param("pageSize") Integer pageSize);/*** 根据id查询*/Users selectById(Integer id);/*** 查询所有用户*/List<Users> selectAll();/*** 新增*/int insert(Users users);/*** 删除*/int delete(Integer id);/*** 更新*/int update(Users user);
}
  1. 编写mapper映射文件,在resources目录下新建mapper目录,用来存放mapper映射

目录结构:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mmg.dao.UsersDao"><insert id="insert">insert into users values (null,#{username},#{birthday},#{sex},#{address})</insert><update id="update">update t_user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update><delete id="delete">delete from users where id=#{id}</delete><select id="selectAll" resultType="users">select * from users</select><select id="selectByPage" resultType="users">select * from users limit #{page},#{pageSize}</select><select id="selectById" resultType="users">select * from users where id=#{id}</select>
</mapper>
  1. 编写service层和service实现层,包名为com.mmg.service和com.mmg.service.impl

UsersService.java

package com.mmg.service;import com.mmg.entity.Users;import java.util.List;public interface UsersService {/*** 分页查询*/List<Users> selectByPage(Integer page, Integer pageSize);/*** 根据id查询*/Users selectById(Integer id);/*** 查询所有用户*/List<Users> selectAll();/*** 新增*/int insert(Users users);/*** 删除*/int delete(Integer id);/*** 更新*/int update(Users users);
}

UsersServiceImpl.java

package com.mmg.service.impl;import com.mmg.dao.UsersDao;
import com.mmg.entity.Users;
import com.mmg.service.UsersService;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Transactional //开启事务
@Service //将UsersServiceImpl交给Spring管理,默认类名首字母小写
public class UsersServiceImpl implements UsersService {private UsersDao usersDao;//使用构造注入@Autowiredpublic UsersServiceImpl(UsersDao usersDao) {this.usersDao = usersDao;}@Overridepublic List<Users> selectByPage(Integer page, Integer pageSize) {page = (page - 1) * pageSize;return usersDao.selectByPage(page, pageSize);}@Overridepublic Users selectById(Integer id) {return usersDao.selectById(id);}public List<Users> selectAll() {return usersDao.selectAll();}public int insert(Users users) {return usersDao.insert(users);}@Overridepublic int delete(Integer id) {return usersDao.delete(id);}@Overridepublic int update(Users users) {return usersDao.update(users);}
}
  1. 编写Controller层,包名为com.mmg.controller

package com.mmg.controller;import com.mmg.entity.Users;
import com.mmg.service.UsersService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController //代表类中返回值转换为json响应到浏览器
@RequestMapping("/users") //代表访问路径,通过/users访问
public class UsersController {@Resourceprivate UsersService usersService;/***  API=http://localhost:8080/users/{page}/{pageSize}*/@GetMapping("/{page}/{pageSize}")public List<Users> getUsersByPage(@PathVariable("page") Integer page, @PathVariable("pageSize") Integer pageSize) {return usersService.selectByPage(page, pageSize);}/*** API=http://localhost:8080/users/{id}*/@GetMapping("/{id}")public Users getUsersById(@PathVariable("id") Integer id) {return usersService.selectById(id);}/*** API=http://localhost:8080/users* 参数:无*/@GetMapping("") //get请求的访问路径public List<Users> getAllUsers() {return usersService.selectAll();}/*** API=http://localhost:8080/users/add* 参数:* {* "username": "木芒果",* "birthday": "2003-12-22",* "sex": 2,* "address": "湖南"* }*/@PostMapping("/add") //post请求的访问路径public String addUsers(@RequestBody Users users) {int count = usersService.insert(users);if (count == 1) {return "success";}return "fail";}/*** API=http://localhost:8080/users/{id}*/@DeleteMapping("/{id}") //delete请求的访问路径public String deleteUsers(@PathVariable("id") Integer id) {int count = usersService.delete(id);if (count == 1) {return "success";}return "fail";}/*** API=http://localhost:8080/users* 参数:* {* "username": "木芒果",* "birthday": "2003-12-22",* "sex": 2,* "address": "湖南"*/@PutMapping("") //put请求的访问路径public String updateUsers(@RequestBody Users users) {int count = usersService.update(users);if (count == 1) {return "success";}return "fail";}
}
  1. 在resources目录下新建一个index.jsp供显示

目录结构:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<div align="center"><h1>Hello World!</h1><a href="users">查看所有用户</a><a href="users/1">查看用户1</a><a href="users/1/3">分页查看</a>
</div>
</body>
</html>
  1. 到此代码全部写完,我们通过启动TomcatStarter类完成项目的启动!

总结

  1. 总体来说还是比较简单的,主要用到了Tomcat底层相关知识

  1. 如果你有更好的想法可以评论在下方哦!笔者水平有限...

  1. 如果不想看长篇的教程,可以直接拉取本项目自行查询

这篇关于内嵌式Tomcat整合SSM框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338603

相关文章

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和