ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于东方通中间件的教学资源系统:SpringBoot+Vue从开发到TongWeb部署实战

基于东方通中间件的教学资源系统:SpringBoot+Vue从开发到TongWeb部署实战 从选题开始这个项目就比大多数“图书馆管理系统”一类毕设有意思。我见过太多学生交上来的SpringBootVue项目清一色跑在Tomcat上一问到中间件、应用服务器、部署架构就答不上来。而你这个题目里带上了“东方通中间件”天然就有了一个技术差异化切入点。这篇就围绕这个题目把从选型、建模、开发到迁移部署、答辩准备的完整链路拆开讲重点放在东方通TongWeb的适配过程、教学资源系统的功能落地以及那些“书上不会写但你一定会踩”的坑。1. 为什么“基于东方通中间件”是选题里最值钱的一句话1.1 Web中间件在毕设里的“存在感困境”做Java Web方向的毕设大多数人的技术栈是SpringBootVue数据库来个MySQL中间件直接用SpringBoot内嵌的Tomcat就完事了。整个项目做完本地双击跑起来截几张图写个论文完事。问题在于这种项目里“中间件”这个概念是隐身状态你没有单独安装、配置、部署过一个应用服务器也没有处理过真实生产环境下“怎么把一个应用放上去跑”这个过程。等评委问“你这个系统如果放到服务器上用什么部署”时只能说一个“SpringBoot自带Tomcat直接java -jar运行”然后就没有然后了。而这个题目不一样开篇点名“基于东方通中间件”相当于把“中间件”从幕后拉到了台前。你必须去了解Web应用服务器是什么它和SpringBoot内嵌的Tomcat有什么区别为什么企业级项目会单独部署中间件适配国产中间件到底要改哪些东西。仅仅这一项论文里就能多出一个完整的章节来写答辩时也多了一个可以说清楚的技术点。1.2 东方通TongWeb在项目里扮演什么角色先理解一个概念。平时我们用SpringBoot开发内置Tomcat是一个“轻量、够用”的Servlet容器它知道怎么执行Servlet怎么处理HTTP请求但它不是完整意义上的企业级中间件。东方通TongWeb这一类产品属于Java EE应用服务器除了Servlet容器本身还提供了JNDI数据源管理、集群能力、安全管理、监控平台甚至支持热部署、负载均衡等企业功能。用一句不严谨但好理解的话说Tomcat像一个路边小饭馆里的掌勺师傅能炒菜但后厨的事他一个人全包了TongWeb更像一个大酒店的中央厨房炒完菜之后菜品统一送到各个包间厨房有自己的管理体系、食材库存、送菜通道。你开发的时候菜还是那道菜但运行环境从“掌勺师傅全包”换成了“中央厨房统一管理”。放在这个项目里就体现在几个具体变化上SpringBoot应用不再用内嵌容器直接启动而是打包成war包放到TongWeb里部署。数据库连接不再在application.properties里写死而是通过TongWeb控制台配一个JNDI数据源应用从JNDI里拿连接。应用的启动、停止、日志查看、并发配置、虚拟主机管理都在TongWeb的管理控制台里操作。这个过程就是“国产化中间件适配”的一种典型落地方式。你做的不是什么花哨功能但它是真实企业中迁移动应用时最常见的一套操作。1.3 这个题目的三层价值教学、技术、答辩先看“教学资源系统”本身。这个业务域很常规用户管理、资源上传与分类、课程管理、作业布置与提交、评论留言。对毕设而言“常规”不是坏事它意味着需求边界清晰、数据库建模有章可循、工作量可控你不用花时间在琢磨稀奇古怪的业务规则上可以把更多精力留给技术实现和部署适配。再看“SpringBootVue”这套组合。SpringBoot负责提供RESTful APIVue负责页面交互前后端通过JSON通信。这是目前Java Web毕设里最主流、也最适合找工作展示的架构。更重要的是SpringBoot对新手极其友好起步快、生态资料多、出问题了一搜就有答案这一点对毕业设计这种“必须在有限时间内交付”的场景至关重要。最后是“东方通中间件”带来的增值。它解决了毕设普遍存在的一个痛点项目没有技术亮点答辩时没有深度话题可聊。一旦你把东方通TongWeb作为部署运行的基础论文里必须交代应用服务器的选型对比Tomcat/东方通TongWeb必须写清楚war包部署与内嵌容器运行的差异必须画出系统的物理部署架构图。这些内容天然就有“企业级”的味道评委很难在这个角度把你问倒。2. 技术选型之后先定好数据模型与服务边界2.1 为什么要选SpringBootVue而不是其他组合我见过有人用JSPServlet做毕设、有人用SSH架构做毕设、还有人非要上SpringCloud全家桶做微服务。前两者技术上太陈旧后者对毕设来说复杂度失控。SpringBootVue最大的优势在于“前后端分离”这个概念本身就有得写。前端工程是独立的Vue项目调用后台接口拿数据渲染后端是纯API服务不关心页面长什么样。你论文里可以画一张前后端交互图把请求流程、数据流转讲成一整章内容量立刻就起来了。对个人成长来说这套技术栈也直接对接市场需求。SpringBoot的自动配置、Starter机制、Actuator监控Vue的组件化开发、Vuex状态管理、Vue Router路由控制哪一样写进简历都不寒碜。它不像JSP那样学了就过气也不像微服务那样在毕设阶段根本学不透。如果条件允许我建议后端再加一个MyBatis-Plus或者Spring Data JPA做持久层二选一即可。MyBatis-Plus在国内企业使用率高、文档全JPA写起来更省代码。对毕设来说MyBatis-Plus通常更顺手因为单表查询都能用封装好的方法直接搞定复杂的多表查询再自己写SQL。2.2 六张核心表的建模以及表关联的取舍教学资源系统听起来名字长落到数据库里其实绕不开几张表。我按通用场景给你拆解你可以直接照搬这个建模思路。第一张是用户表字段覆盖id、用户名、密码、昵称、角色、头像、创建时间。角色建议用普通字符串存teacher、student、admin之类的值不要用数字字典省去联表解释。密码存加密后的hashSSH登录式的直接存BCrypt加密结果千万别明文。第二张是资源分类表字段有分类id、父分类id、分类名称、排序号。允许二级目录即可比如“Java基础”下面是“课程课件”“课后练习”不要设计成无限级分类毕设阶段无限级是给自己找麻烦。第三张是教学资源表这是核心表。字段包括资源id、标题、简介、类型视频/文档/压缩包、文件存储路径、原始文件名、文件大小、上传者id、所属分类id、下载次数、审核状态、上传时间。资源上传后字节流落在服务器磁盘的某个目录里数据库只存路径和元数据这是最常见的做法。第四张是课程表字段有课程id、课程名称、课程简介、封面图路径、授课教师id、开始时间、结束时间、创建时间。一门课程对多个资源的话就再加一张课程资源关联表如果简化需求可以在资源表里直接加一个course_id字段看你要不要做“课程下挂资源”的功能。第五张是作业表。字段包括作业id、所属课程id、作业标题、要求描述、截止时间、创建时间。第六张是作业提交表字段有提交id、作业id、学生id、提交内容、附件路径、提交时间、分数、批阅评语、批阅时间。学生提交和教师批阅的闭环就靠这两张表串起来。表与表之间的关系记住一个原则能少联表就少联表能容忍冗余就容忍冗余。比如课程表里直接存教师姓名而不通过教师id去联用户表虽然不符合严格的第三范式但在毕设这种量级的数据下响应速度和代码简洁度更重要。评委不会因为你用了冗余字段扣分但会因为一个简单的列表页多表join写得乱七八糟而皱眉头。2.3 服务拆分的黄金粒度按业务域不为微服务而微服务很多学生一看题里带着“系统”两个字就想着拆微服务、上注册中心、搞网关。冷静一点毕设不是生产环境微服务拆出来容易调试起来想哭。合理的做法是一个单体SpringBoot应用内部按业务域划分包结构。建议分成以下几个模块认证模块登录、注册、Token校验、当前用户信息获取。用户管理模块用户CRUD、头像上传、角色管理管理员后台用。资源管理模块资源上传、分类查询、资源列表分页、资源下载。课程模块课程CRUD、课程与资源的关联、学生选课。作业模块教师创建作业、学生提交作业、教师批阅打分。文件服务模块统一处理上传文件的存储、校验、浏览器访问、静态资源映射。包结构上不要搞太深的层次controller、service、mapper、entity、dto、config、common这七个包足够了。异常处理、统一返回体、工具类放common里跨域配置、JNDI数据源配置、文件存储配置放config里。这样拆分的逻辑在于每个业务模块都是独立的“小工厂”内部函数可以互相调用但对外只暴露Controller接口。答辩时你可以说“我按业务域做了模块化设计为后续如果业务增长再拆分微服务留下了空间”这句话说完就行了别真去拆。3. 东方通中间件适配的核心环节从Tomcat平滑迁移到TongWeb3.1 先下载、安装、授权TongWeb把管理控制台跑起来东方通TongWeb作为国产商用中间件个人或者教育用途通常可以走官方试用流程申请使用。具体的获取方式以东方通官方渠道信息为准毕设阶段的评审只看你“是否完成了适配和部署”不会要求你提供商业授权证明。建议提前一到两周申请因为是走人工流程时间不可控。拿到安装包后以Linux服务器为例操作路径大概是解压安装包到指定目录比如“/opt/tongweb”。进入bin目录执行启动脚本“./startserver.sh”启动服务。首次启动后打开浏览器访问“http://服务器IP:9060/console/”进入管理控制台。使用控制台创建一个新的域Domain这个域就相当于一个独立的运行空间。在域下面部署应用用到的是部署管理功能war包传上去之后点部署即可。这个过程和Tomcat manager界面的部署思路很像但TongWeb的控制台功能更完整应用部署、虚拟主机、数据源、JMS、日志查看全在一个界面里。第一次使用建议把每个菜单点一遍花半小时熟悉一下否则后面部署出问题都不知道去哪里排查。3.2 SpringBoot应用“去内嵌容器化”改造这一步是整个适配中技术含量最足、也最容易翻车的地方。先说结论SpringBoot默认打成可执行jar内嵌Tomcat自己启动这不符合TongWeb部署的形态。要让TongWeb接管应用的运行环境需要把应用改造成传统的war包形式。改造分三步。第一步在pom.xml里把spring-boot-starter-web中的内嵌Tomcat排除掉同时引入Servlet API依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId /exclusion /exclusions /dependency dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency第二步修改打包方式为warpackagingwar/packaging第三步修改启动类。把原来的main方法所在的类继承SpringBootServletInitializer并重写configure方法否则TongWeb启动应用时找不到SpringBoot的入口SpringBootApplication public class TeachingResourceApplication extends SpringBootServletInitializer { Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(TeachingResourceApplication.class); } public static void main(String[] args) { SpringApplication.run(TeachingResourceApplication.class, args); } }改完执行mvn clean package在target目录下就能看到一个war包。到这里“去内嵌容器化”就完成了。这一步在论文里可以写上一个完整的二级标题把为什么排除Tomcat、为什么继承SpringBootServletInitializer讲透。3.3 把war包部署到TongWeb处理数据库连接与JNDI数据源war包拿到手之后进入TongWeb管理控制台在“数据源”功能里新建一个JNDI数据源数据库选择MySQL填写数据库地址、用户名、密码。填写JNDI名称比如“jdbc/teachingResource”。在“部署管理”里上传war包上下文根Context Path填成教学资源系统项目的访问路径。启动部署的应用。关键点在于SpringBoot应用怎么拿到这个JNDI数据源。TongWeb把数据源管理起来之后连接信息不写在application.properties里而是通过JNDI方式暴露给应用。你需要在SpringBoot里写一个数据源配置类Configuration public class DataSourceConfig { Bean public DataSource dataSource() throws NamingException { Context context new InitialContext(); return (DataSource) context.lookup(java:comp/env/jdbc/teachingResource); } }然后把application.properties里原有的spring.datasource.*配置注释掉避免两条取数路径冲突。同时确保pom.xml里引入MySQL驱动依赖并把驱动jar包复制到TongWeb的lib目录下否则连接数据库时会有驱动类找不到的报错。这一步做完应用的数据库连接就完全由TongWeb托管了。答辩时可以讲“通过应用服务器统一管理数据源连接池应用与数据库连接配置解耦使得运维人员可以在不修改代码的情况下调整连接池参数。”这句话一出来技术档次和直接用SpringBoot内嵌连接池完全是两个层级。3.4 部署之后最容易卡住的三个问题第一个问题war包能部署但页面一直404。这就是上下文根配置错了。在TongWeb里部署应用时需要指定上下文根比如你希望访问地址是“http://ip:8080/teaching”那上下文根就要填成“/teaching”。如果填成“/”就是访问根路径两者对应不上自然404。第二个问题管理系统后端接口正常但前端资源请求跨域。TongWeb部署时默认会限制跨域访问来源而Vue项目开发阶段跑在localhost:5173。解决方式是后端写一个全局CORS配置类允许对应源头的跨域请求。生产部署时最稳的做法是把构建后的Vue静态资源放到TongWeb的webapps目录下前后端同源访问彻底避开跨域问题。第三个问题日志在控制台里看不到业务日志。TongWeb默认把应用日志输出到它自己统一的日志文件里如果你的项目用了Logback或Log4j2需要通过配置文件单独设置输出位置。建议在logback-spring.xml里明确日志文件路径统一写到项目应用目录下的logs文件夹上线排错时就知道去哪个目录看日志了。4. 教学资源系统核心功能落地的实用细节4.1 认证模块用JWT还是Session毕设场景下怎么选认证模块算是所有系统里最绕不开的一个基础功能。教学资源系统里学生要登录才能看资源教师要登录才能布置作业和管理资源管理员要登录才能进后台管理所以认证是刚需。JWT方案是当前前后端分离项目的主流做法。用户登录成功后后端生成一个包含用户id和角色的签名Token前端存在localStorage里每次请求头带一个Authorization: Bearer token。后端写一个拦截器或过滤器校验Token解析出用户身份然后把用户信息放到请求上下文里后续的Controller方法里随时能取到当前登录用户。注意两个毕设里常见的坑一是Token过期时间。建议设置成2小时Vue前端在axios响应拦截器里捕获一个特定的过期状态码后跳转登录页。不要为了省事把过期时间设置成7天答辩时评委只要问“长期不操作的用户如何退出”你就被动。二是密码加密。千万不要用MD5直接存密码用BCryptSpring Security里的BCryptPasswordEncoder可以直接拿来用一次加密一个随机盐就算数据库泄露了彩虹表也还原不出明文。4.2 资源管理文件上传、在线预览、分类目录的坑教学资源系统的核心操作就是上传和下载。后端需要做一个统一的上传接口接收文件后校验文件类型和大小比如视频只允许mp4、图片只允许jpg/png、单文件不超过500MB。把文件写入服务器的磁盘目录比如“/data/teaching-resource/files/202405/”。生成一个不重复的文件名比如UUID加原始扩展名防止重名覆盖。把文件路径、文件名、大小、类型等信息存入教学资源表。浏览器访问时配置一个静态资源映射目录把磁盘目录映射成URL路径。静态映射的代码很简单Configuration public class WebConfig implements WebMvcConfigurer { Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/files/**) .addResourceHandler(file:/data/teaching-resource/files/); } }在线预览这块文本文件和图片可以直接用浏览器打开视频用Vue里的video标签直接播放mp4格式。注意国内浏览器对视频编码格式有挑剔最好统一转成H.264编码的mp4否则会出现“能下载但不能在线播放”的问题。Office文档不要自己做在线预览那是给毕设挖坑让用户下载后本地打开就好。前端上传建议用el-upload组件Element UI/Element Plus配一个上传地址拿到返回的URL后回显在列表中。交互上有一个细节容易漏用Vue做上传时文件字段名和后端接口接收的参数名要一致比如前端表单的字段名是file后端接口方法参数也必须是MultipartFile file名字不一致会一直报“Required request part file is not present”。4.3 课程与作业闭环教师发题、学生提交、教师批阅作业功能的业务闭环可以串成一条完整的主线也是答辩时能演示流程的重点教师创建课程、在课程下发布作业、学生查看作业列表并提交附件、教师进入批阅页看到所有提交并打分。实现上没有什么高难度主要是状态流转要清晰。作业提交表里建议设一个status字段取值可以是submitted批阅中和graded已批阅。学生提交附件后状态变为已提交教师在批阅页面打分并填评语后状态变为已批阅学生端能看到自己的得分。这个闭环的价值在于它演示的不只是“增删改查”而是“一个完整业务动作的生命周期管理”。在论文里可以画一张作业管理流程图把状态流转画出来评委会觉得你的业务流程理解是扎实的。4.4 前端Vue页面组织的可复用套路Vue项目不要所有代码塞在一个巨型组件里按目前主流项目规范来组织api目录按业务域拆分接口请求文件比如resource.js、course.js、homework.js。组件目录公共组件和页面组件分开页面组件按路由对应。store目录保存用户信息、Token状态等全局数据。router目录配置路由和守卫。axios拦截器是必写的请求拦截器统一加Token响应拦截器统一处理返回码和错误提示。路由守卫做登录校验未登录跳转到登录页。Vuex或Pinia存用户信息退出登录时清空。这些设计模式单独拿出来都是面试题里的常客写在毕设里既不会增加太多工作量又能让代码结构显得专业。5. 联调、部署和验收“能跑”和“经得起问”是两码事5.1 联调阶段最值得花时间的四件事前后端分离项目联调阶段最容易出问题的集中在四个点上。第一接口文档先行。哪怕是自己写前后端也要先定好接口路径、请求方式、请求参数、返回结构把整个系统的接口列表拉出来。不要前端写一个字段、后端又写一个字段联调时全在找Bug。第二统一返回体。后端所有接口返回格式保持一致比如{code: 200, message: success, data: {}}。前端响应拦截器只看code决定是否抛出异常省去大量重复判断。第三文件接口单独验证。上传接口涉及文件类型、大小、路径映射三个容易出问题的地方联调时先单独用小文件测通再上大文件。第四异常处理兜底。后端一定要写全局异常处理类用RestControllerAdvice捕获业务异常和未知异常返回统一格式的出错信息不要裸抛500让前端看到一堆英文堆栈。5.2 服务器部署CentOS7 TongWeb MySQL 8的一次完整操作记录不管本地开发多顺畅毕设终稿一定要完整部署到一台服务器上跑一遍这既是验收要求也是答辩底气的来源。我这里给一条完整的操作链路安装JDK 1.8或更高版本配置JAVA_HOME环境变量。安装MySQL 8创建数据库导入项目的SQL脚本创建一个专门的业务账号不要用root直连。解压TongWeb启动服务进入控制台创建域、配JNDI数据源、部署war包。构建前端项目执行npm run build把dist目录下的静态文件复制到TongWeb的webapps路径下目录名和war包的上下文根保持一致。关闭或放行防火墙端口。TongWeb的HTTP访问端口、控制台端口、MySQL端口按需放行。用外网地址或服务器IP访问验证全部核心功能包括登录、上传、下载、提交作业、打分。这里有一个实际经验服务器内存至少给2G以上否则Tomcat换TongWeb之后内存很可能不够用。TongWeb的默认启动脚本里如果有内存参数改成至少-Xms512m -Xmx1024m。5.3 答辩准备评委最爱问的四个问题及回答思路第一个问题“为什么要用东方通TongWeb平时开发不是都用Tomcat吗”回答思路区别在于开发环境和运行环境的不同。SpringBoot内置Tomcat方便开发调试但企业生产环境通常使用独立的应用服务器来做集中管理包括统一的数据源管理、日志管理、应用生命周期管理和安全策略。本次课题使用东方通TongWeb作为部署运行环境完成了一次标准的国产中间件适配实践。第二个问题“SpringBoot应用怎么部署到TongWeb上”回答思路第一步排除内嵌Tomcat依赖改为war包打包第二步继承SpringBootServletInitializer重写configure方法第三步在控制台配置JNDI数据源并部署war包。说清楚这三个点说明你是真做过不是看了一篇教程就来应付的。第三个问题“你的数据源怎么配置的特点在哪里”回答思路数据库连接配置不在代码里写死而是统一交给TongWeb管理通过JNDI方式从Java EE容器中获取DataSource。这样连接池参数调整不需要改代码运维只需在控制台修改配置即可生效实现了应用与基础设施的解耦。第四个问题“系统安全性做了哪些处理”回答思路密码BCrypt加密、JWT做身份认证、登录拦截器校验Token、文件上传做了类型和大小校验、前端Vue Router用路由守卫控制页面访问权限。把这五点列清楚安全性这块就基本过关了。6. 踩坑清单与避坑经验总结6.1 我实际踩过的坑按“必踩程度”排序第一个坑JDK版本和TongWeb版本不匹配。TongWeb有些版本依赖JDK 8有些版本支持JDK 11以上安装前要看清楚官方说明。版本对不上启动脚本跑起来直接报ClassNotFoundException一类的错误。第二个坑JNDI数据源名称写错。控制台里的JNDI配置名称和应用代码里lookup的名字必须完全一致包括大小写。配完后一定要先用测试连接功能验证一下再启动应用否则应用启动时会卡在初始化数据源上。第三个坑SpringBoot排除Tomcat之后本地开发跑不起来了。这是因为本地你还在用mvn spring-boot:run或者IDE直接运行Application类排除了内嵌Tomcat自然起不来。解决办法是开发阶段不要排除Tomcat部署阶段再通过profile区分开发用内嵌Tomcat打包部署时使用一个单独的profile排除Tomcat并打成war包。这样本地开发和线上部署互不干扰多花一点配置时间省下的是几个晚上的困惑。第四个坑上传文件的存储目录没有创建权限。服务器上的目录默认归属root用户TongWeb进程如果是用其他用户启动的上传文件时会报权限不足。提前执行chown或者chmod 777把目录权限放开或者让TongWeb直接用root运行毕设场景无所谓生产环境另说。第五个坑跨域问题不是只发生在开发阶段。即使前后端放到了同一个TongWeb里如果前端页面端口和后端接口端口不一致浏览器依然会拦截。最简单的排查方法F12打开开发者工具看网络请求是报CORS错误还是404逐一排除。6.2 时间不够的话砍掉什么也不能砍什么毕设时间永远不够用这里给你一个优先级排序。绝对不能砍的功能用户登录注册、资源上传下载、资源列表展示、教师创建作业学生提交作业、管理员基础管理。这五个功能构成了完整的业务闭环演示的时候可以从登录一路操作到批改打分整个系统是“能讲故事”的。可以适当砍掉的功能在线聊天、系统消息通知、数据可视化统计大屏、点赞收藏、评论留言。这些属于锦上添花遇到时间紧张就直接砍。如果一个功能写了两天还没跑通就说明它超出了毕设需要的复杂度果断止损。工作量分配建议需求分析建模加开发占六成时间中间件适配加服务器部署占两成时间论文写作占两成时间。大多数学生的问题在于开发阶段无限拖延最后留给部署和论文的时间只有一星期导致项目没跑起来、论文也没写透。提前把开发截止日期定好别把部署当彩蛋。6.3 一点个人体会写给正在做毕设的你如果让我总结这个题目和普通SpringBoot项目的差别就一句话普通项目完成的是一个“能用的系统”而这个项目完成的是一个“能交差的系统”交差的对象不仅是老师还包括你自己在面试官面前的那几句自我介绍。你真正做完这一轮之后收获的不只是代码而是一整套“把应用从开发环境搬到生产环境”的完整心智模型。以后再遇到Tomcat、Jetty、Undertow、东方通TongWeb、中创中间件这些应用服务器你知道它们之间是什么关系、适配一套要动哪些地方、部署排错从哪个控制台入口进去看。这是光刷面试题刷不出来的经验。最后给一个小技巧整个项目完成后把部署、运行、操作演示的过程录一个十分钟的视频存好。以后无论是写简历项目经历、发给面试官看还是自己回顾总结都比一堆截图靠谱得多。也请务必相信能在答辩现场把“排除内嵌Tomcat、改War包、配JNDI、部署TongWeb控制台”这套流程讲清楚的人绝对不多。就凭这一点你的毕设已经赢了。
返回列表