重构测试项目为spring+springMVC+Mybatis框架
重构测试项目为spring+springMVC+Mybatis框架
背景
继上次将自动化测试时的医药管理信息系统项目用idea运行成功后,由于项目结构有些乱,一部分代码好像也重复,于是打算重新重构以下该项目,这次先使用spring+springMVC+Mybatis框架
一、设计项目目录结构
按ssm框架重新设计了目录结构,删除了一些重复代码
├─.idea
├─src
│ └─main
│ ├─java
│ │ └─mms
│ │ ├─controller
│ │ ├─interceptors
│ │ ├─mapper
│ │ ├─pojo
│ │ └─services
│ ├─resources
│ │ ├─mybatis
│ │ │ ├─mybatis-config.xml
│ │ │ └─mappers
│ │ ├─spring
│ │ │ ├─applicationContext.xml
│ │ │ ├─applicationContext-mybatis.xml
│ │ │ └─springMVCConfig.xml
│ │ ├─jdbc.properties
│ │ ├─log4j.properties
│ │ └─static
│ │ ├─css
│ │ ├─images
│ │ ├─js
│ │ └─myjavascript
│ └─webapp
│ └─WEB-INF
│ └─templates
│ ├─agency
│ ├─client
│ └─medicine
└─target
同时也修改了文件名(tabs–>templates),如果你也修改了记得将对应的代码也进行修改

二、将war包中的class
由于老师给的是项目打包后的war包,代码都是.class文件,我们需要使用工具JD-GUI将.class文件转换为.java文件,转换后将.java文件放入对应的包下。

三、修改配置文件springMVCConfig.xml并添加控制器
- 由于资源文件位置发生了改变,重启项目后会出现资源访问404的错误,我们需要对相关的配置文件springMVCConfig.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:p="http://www.springframework.org/schema/p"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.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 注解驱动 --><mvc:annotation-driven /><!-- 定义Controller的扫描包 --><context:component-scan base-package="mms.controller" /><!-- 定义静态资源映射 --><mvc:resources mapping="/static/**" location="classpath:/static/" /><!-- 定义视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/templates/" /><property name="suffix" value=".html" /></bean><!-- 处理静态资源被“/”所拦截的问题 --><mvc:default-servlet-handler /><!-- 定义拦截器 --><mvc:interceptors><mvc:interceptor><!-- 所有的请求都进入 --><mvc:mapping path="/**"/><!-- 不拦截登陆页面 --><mvc:exclude-mapping path="/login.html" /><mvc:exclude-mapping path="/static/css/*" /><mvc:exclude-mapping path="/static/js/**" /><mvc:exclude-mapping path="/static/images/*" /><!-- 不拦截处理登陆的业务 --><mvc:exclude-mapping path="/Login/loginUser" /><bean class="mms.interceptors.MyHandlerInterceptor"/></mvc:interceptor></mvc:interceptors></beans>
- 由于之前的html文件都是直接暴露在根目录下的静态资源,因此可以直接通过 URL 访问。而现在我们将html文件移动到 WEB-INF 目录下,需要视图解析器通过控制器返回视图名去访问,因此我们还需要添加控制器IndexController
package mms.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author Orange peel* @create 2025-02-16 19:08*/
@Controller
public class IndexController {@RequestMapping("/index")public String showIndex() {return "index"; // 返回的视图名称}@RequestMapping("/templates/client/Search")public String clientSearch() {return "client/Search";}@RequestMapping("/templates/agency/Search")public String agencySearch() {return "agency/Search";}@RequestMapping("/templates/medicine/Search")public String medicineSearch() {return "medicine/Search";}@RequestMapping("/templates/client/Entry")public String clientEntry() {return "client/Entry";}@RequestMapping("/templates/agency/Entry")public String agencyEntry() {return "agency/Entry";}@RequestMapping("/templates/medicine/Entry")public String medicineEntry() {return "medicine/Entry";}@RequestMapping("/templates/client/Delete")public String clientDelete() {return "client/Delete";}@RequestMapping("/templates/agency/Delete")public String agencyDelete() {return "agency/Delete";}@RequestMapping("/templates/medicine/Delete")public String medicineDelete() {return "medicine/Delete";}@RequestMapping("/templates/client/Modify")public String clientModify() {return "client/Modify";}@RequestMapping("/templates/agency/Modify")public String agencyModify() {return "agency/Modify";}@RequestMapping("/templates/medicine/Modify")public String medicineModify() {return "medicine/Modify";}@RequestMapping("/templates/client/Browse")public String clientBrowse() {return "client/Browse";}@RequestMapping("/templates/agency/Browse")public String agencyBrowse() {return "agency/Browse";}@RequestMapping("/templates/medicine/Browse")public String medicineBrowse() {return "medicine/Browse";}@RequestMapping("/templates/client/Report")public String clientReport() {return "client/Report";}@RequestMapping("/templates/agency/Report")public String agencyReport() {return "agency/Report";}@RequestMapping("/templates/medicine/Report")public String medicineReport() {return "medicine/Report";}@RequestMapping("/templates/User")public String User() {return "User";}
}
四、配置tomcat后直接启动即可


等下次有空再重构成springboot项目,加纳~
相关文章:
重构测试项目为spring+springMVC+Mybatis框架
重构测试项目为springspringMVCMybatis框架 背景 继上次将自动化测试时的医药管理信息系统项目用idea运行成功后,由于项目结构有些乱,一部分代码好像也重复,于是打算重新重构以下该项目,这次先使用springspringMVCMybatis框架 …...
如何使用OPENAI的Whisper功能进行音频字母提取功能
首先你可以使用 Python 中的 requests 库来下载该音频文件,然后通过 open() 打开该文件并传递给 OpenAI Whisper API。 完整代码如下: 安装需要的库: pip install openai requests Python 代码: OPENAI_API_KEY "your o…...
DFS算法篇:理解递归,熟悉递归,成为递归
1.DFS原理 那么dfs就是大家熟知的一个深度优先搜索,那么听起来很高大尚的一个名字,但是实际上dfs的本质就是一个递归,而且是一个带路径的递归,那么递归大家一定很熟悉了,大学c语言课程里面就介绍过递归,我…...
2025java常见面试题第一弹
1. Java中的HashMap和Hashtable有什么区别? 答案: 线程安全性: HashMap是线程不安全的,适合单线程环境。如果在多线程环境下使用,可能会出现数据不一致的问题。 Hashtable是线程安全的,内部方法通过synch…...
JMeter工具介绍、元件和组件的介绍
Jmeter功能概要 JDK常用文件目录介绍 Bin目录:存放可执行文件和配置文件 Docs目录:是Jmeter的API文档,用于开发扩展组件 printable_docs目录:用户帮助手册 lib目录:存放JMeter依赖的jar包和用户扩展所依赖的Jar包…...
机舱卫生和空气质量改善
公共卫生挑战:在密闭空间内控制病原体 由于公共交通等密闭空间内的人员密度很高,因此保持良好的空气质量至关重要。有效的通风系统在循环新鲜空气和降低空气中病原体和污染物的浓度方面起着关键作用。使用高效微粒空气 (HEPA) 过滤…...
springBoot之环境变量
springboot 在new SpringBootApplication()时, 会扫描所有的spring.factory; 它会给每个接口当做group,所有实现类为List当做value,形成map; group -> List 系统属性 java的相关属性 系统环境属性,指的是操作系统相关的配置 每个配置对应一个contro…...
萨班斯-奥克斯利法案(Sarbanes-Oxley Act, SOX):公司财务透明度的守护者(中英双语)
萨班斯-奥克斯利法案(Sarbanes-Oxley Act):公司财务透明度的守护者 在2001年安然(Enron)和世通(WorldCom)等公司财务造假丑闻爆发后,美国政府迅速出台了《萨班斯-奥克斯利法案》&am…...
iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)
FFmpeg 提供了强大的滤镜功能,可以对音视频进行各种处理,例如裁剪、缩放、添加水印、调整颜色、添加特效等。 1. FFmpeg 滤镜基础知识 1.1 什么是滤镜(Filters)? 滤镜是 FFmpeg 提供的一种功能,用于对音视频流进行处理。滤镜链(Filter Chain)是多个滤镜的组合,按顺序…...
tomcat html乱码
web tomcat html中文乱码 将html文件改成jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%>添加 <meta charset"UTF-8">...
kubectl exec 实现的原理
kubectl exec 是 Kubernetes 提供的一个命令,它允许你在指定的 Pod 中执行命令,类似于在容器中打开一个终端会话。这个功能对于调试、监控和管理容器化应用非常有用。kubectl exec 的实现涉及到多个 Kubernetes 组件和机制,包括 API Server、…...
Unity中可靠的UDP实现
可靠 UDP(Reliable UDP)是一种在用户数据报协议(UDP)基础上,通过添加额外机制来实现可靠数据传输的技术。与传统 UDP 相比,它克服了 UDP 本身不保证数据可靠性、顺序性以及可能丢失数据的缺点,同…...
CentOS 7操作系统部署KVM软件和创建虚拟机
CentOS 7.9操作系统部署KVM软件和配置指南,包括如何创建一个虚拟机。 步骤 1: 检查硬件支持 首先,确认您的CPU支持虚拟化技术,并且已在BIOS中启用: egrep -c (vmx|svm) /proc/cpuinfo 如果输出大于0,则表示支持虚拟…...
Golang GORM系列:GORM分页和排序
高效的数据检索和表示是应用程序开发的关键方面。GORM是健壮的Go对象关系映射库,它为开发人员提供了强大的工具来实现这一点。无论你是在构建动态web应用程序还是数据密集型服务,掌握GORM中的分页和排序使您能够提供无缝且高效的用户体验。本文我们将深入…...
WPF的MVVMLight框架
在NuGet中引入该库: MVVMLight框架中的命令模式的使用: <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…...
微服务SpringCloudAlibaba组件sentinel教程【详解sentinel的使用以及流量控制、熔断降级、热点参数限流等,附有示例+代码】
文章目录 四.Sentinel限流熔断4.1 sentinel介绍4.2 Sentinel 的历史4.3 Sentinel 基本概念资源规则 4.4 Sentinel 功能和设计理念4.4.1 流量控制4.4.2熔断降级什么是熔断降级熔断降级设计理念系统负载保护 4.5 Sentinel 是如何工作的4.6 Sentinel使用4.7 Sentinel 控制台4.8 Sp…...
ScoreFlow:通过基于分数的偏好优化掌握 LLM 智体工作流程
25年2月来自 U of Chicago、Princeton U 和 U of Oxford 的论文“ScoreFlow: Mastering LLM Agent Workflows via Score-based Preference Optimization”。 最近的研究利用大语言模型多智体系统来解决复杂问题,同时试图减少构建它们所需的手动工作量,从…...
数字水印嵌入及提取系统——基于小波变换GUI
数字水印嵌入及提取系统——基于小波变换GUI 基于小波变换的数字水印系统(Matlab代码GUI操作) 【有简洁程序报告】【可作開题完整文档达辩PPT】 本系统主要的内容包括: (1)使用小波变换技术实现二值水印图像的加密、…...
基于海思soc的智能产品开发(图像处理的几种需求)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于一个嵌入式设备来说,如果上面有一个camera,那么就可以有很多的用途。简单的用途就是拍照,比拍照更多一点的…...
【R语言】聚类分析
聚类分析是一种常用的无监督学习方法,是将所观测的事物或者指标进行分类的一种统计分析方法,其目的是通过辨认在某些特征上相似的事物,并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。 方法优点缺点适用场景K-means计算效率高需…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
