内嵌式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

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码