资讯动态

软件工程实习记录:从需求分析到Tomcat部署的完整实战参考

发布时间:2026/10/23 6:59:19 来源:尧图企业网站定制
简介面向软件工程专业本科生的实习记录文档适合正在参加实习、需要撰写或修改实习报告的同学参考。文档以周为单位记录真实实习过程涵盖软件开发中的可行性分析、需求分析、概要设计、详细设计、编码、项目验收等核心流程并详解项目经理职责及软件开发员、架构师、技术总监等岗位要求同时梳理前端html/css/javascript、后端Java/Python/Ruby、数据库MySQL/Oracle等常用技术栈。内容按日期详细记录了从eclipse Swing开发文件查找与排序功能到利用node.js实现页面数据响应、连接MySQL完成增删改查再到Linux环境编译运行ARM程序的具体实践完整呈现从需求到编码的实习脉络。资源为单个doc文档大小40KB已有2924人学习下载可直接作为实习记录编写的改写素材。1. 软件工程实习记录不是流水账是能直接改用的毕业实习素材软件工程实习记录这份材料记录了一个本科生在软件公司五周的完整实习过程从第一天的开发动员、需求分析到最后的 Tomcat 部署正好覆盖了毕业实习报告最需要的几个板块软件开发流程、岗位分工、技术选型、踩坑记录。如果你正在写大学阶段的实习日志或者毕业前需要交一份像样的软件工程实习记录这份材料可以直接拿来当模板把具体的公司信息、项目名称、时间节点换成自己的就能省掉大量回忆和编造的时间。尤其值得留意的是记录里的一个判断真正写代码的时间只占整个开发过程的百分之十五前期可行性分析、需求分析、概要设计和详细设计才是决定项目能不能验收的关键。这个观点放进实习总结里比单纯罗列学会了什么更有说服力。2. 从实习日记里挖出的开发主线六阶段流程与五个职位角色2.1 可行性分析到项目验收六个阶段的产出与验收点这份实习记录的第一天就记录了软件开发的主要流程。记录的原文把它分成六步可行性分析、需求分析、概要设计、详细设计、编码、项目验收。很多人第一次看到这个流程会觉得是教科书上的空话但记录里把它落到了一次实际项目上。可行性分析回答的是“这个软件要不要做、技术上能不能做”需求分析回答的是“用户到底要什么”概要设计把系统拆成模块详细设计把模块拆成类和接口编码阶段只是把前面确定的方案翻译成代码最后的项目验收则是拿着需求文档逐项核对功能。我一般会建议实习生用这个六阶段来组织自己的实习日志原因很简单公司里的真实任务往往是从某个小功能切入比如记录里第一周做的“文件查找功能”如果只写“我实现了查找”就只是一条流水账。如果按六阶段来写就会变成需求是支持模糊查找设计是 Swing 面板加主程序编码过程中发现只能从固定目录查找于是修改为可配置路径最后验证模糊匹配是否生效。这样一写读者能看到的就不只是代码而是完整的工程思维。表格式的产出清单也可以直接借用。可行性分析阶段的产出是可行性报告需求分析阶段的产出是需求说明书和用例概要设计阶段的产出是架构图和模块划分详细设计阶段的产出是类图、时序图和数据库设计编码阶段的产出是源码和单元测试验收阶段的产出是测试报告和验收记录。这些名词翻译成实习日志里的表达就是“我这周参与了需求讨论、画了模块图、写了数据库表、完成了功能、被项目经理验证了”。顺着这个框架写实习记录不会散。这六步里最容易在实习记录里写出层次感的是需求分析。记录里第二天做的文件查找一开始只想到从固定路径查但用户真正要的是能模糊查找、能跨目录查找。这个场景放在真实项目里就是需求边界没定义清楚。写日志时不要写“我完成了查找功能”而是写“我一开始把根目录写死后来发现用户需要任意目录下的模糊查找于是把路径改成可配置的参数”。这样一句话既体现了你会写代码更体现了你会做需求分析。2.2 代码实现只占 15%需求与设计为什么更关键记录里有一个很反直觉的结论代码实现的时间只占整个开发过程的百分之十五。这个结论不是从书本上抄来的而是实习生看到公司以前做过的项目后得出的。也就是说一个看似“写代码”的岗位其实大部分时间花在了搞清楚要写什么、怎么写、写完之后怎么验收上。这个结论对正在准备毕业实习材料的你特别有用。如果只写“我用了 Swing、用了 Node.js、用了 MySQL”那只是工具清单。如果写出“我在动手前先做了需求沟通发现用户需要的是模糊查找而不是精确查找于是调整了设计方案”这就把实习记录的层次拉高了。记录里第二天的文件查找就是典型例子一开始从固定地址查找老师稍一提示“这个功能只能从固定地址找”就立刻意识到需求边界没有想清楚。这个很小的细节恰恰是需求分析能力的体现。写实习记录时我建议把“改需求”和“改 bug”分开写。改需求说明你能理解用户意图改 bug 说明你能定位问题。两者都有最好但前者在评分中的分量明显更高。把某天“向老师提出疑问”的过程写进去比写“完成了功能”更真实。2.3 实习记录中的职位地图从开发到售后的成长路径记录里第三天通过和老师互动了解到 IT 行业的主要职位软件开发员、项目经理、技术总监、架构师、总经理、售前售后。这段内容如果只停留在“我知道了有哪些职位”对毕业实习报告的帮助不大。更好的做法是把它扩展成一张岗位地图说明每个岗位在软件工程六阶段中的位置。职位主要职责对应开发阶段软件开发员编码、单元测试、修复缺陷编码项目经理计划、组织、协调、控制项目进度全流程架构师技术选型、系统设计、技术决策概要设计、详细设计技术总监团队技术方向、技术规范全流程售前售后需求沟通、方案讲解、部署支持需求分析、项目验收项目经理这个职位尤其值得写。摘要里专门提到项目经理的职责负责整个项目的计划、组织、协调和控制需要具备领导、沟通和组织能力。在实习记录里你不太可能真的当项目经理但可以写“我们在建模时扮演项目经理角色讨论系统中需要实现的功能”这说明你已经理解了项目经理的核心工作不是写代码而是让所有人都清楚目标。写实习记录时可以在某一天的日志后面加一段“岗位认知”结合当天的任务说明自己适合哪个方向。比如记录里第五天用了 HTML、CSS、JavaScript 做页面就可以写“我初步了解了前端开发的职责也意识到数据不能写死在数组中需要从数据库读取”。这种句子比“我会了网页开发”更有区分度也更容易让指导教师看到你的职业规划意识。2.4 实习记录怎么用五周内容对应一份完整报告这份实习记录的结构本身就是一份很好的报告骨架。第一周对应软件开发流程和 Java Swing 基础第二周对应网页前端和 Node.js 入门第三周对应 Linux 环境和网络服务器认知第四周对应框架学习和项目建模第五周对应 JSP、数据库操作和 Tomcat 部署。如果你要把这份材料改成自己的实习记录不需要重写结构只需要替换每天的具体任务和项目名。举个例子原记录里“利用 Swing 实现文件查找功能”你可以改成“利用 Swing 实现学生信息查询功能”原记录里“教师信息展示”你可以改成“图书信息展示”。技术栈不变但业务场景变了报告看起来就更像你自己做过的。要注意的是替换之后要保证前后逻辑一致比如前面写的是文件查找后面写教师管理就会很突兀。最好的做法是选定一个主题从需求分析一路写到部署上线这样整份记录才有一条完整的线。3. 跟着实习记录复现技术线Swing 查找、网页交互与 Node.js 数据链路3.1 文件查找与排序用 Swing 拆出视图和主程序记录里第一周的任务是用 Java Swing 做一个文件查找功能再做一个按文件名排序的功能。特别值得学习的是它的包结构视图写在 com.shixi.viwe 包主程序写在 com.shixi.main 包。这个分层思路虽然简单但能避免把所有代码堆在一个类里。下面是一个简化版本的查找面板对应记录里“在面板上添加组件和按钮设置相对位置”的过程。// 文件查找面板省略布局细节只保留核心逻辑 JTextField searchField new JTextField(16); JButton searchBtn new JButton(查找); DefaultListModelString listModel new DefaultListModel(); JListString resultList new JList(listModel); JPanel panel new JPanel(); panel.add(searchField); panel.add(searchBtn); panel.add(new JScrollPane(resultList)); searchBtn.addActionListener(e - { listModel.clear(); String keyword searchField.getText().trim(); if (keyword.length() 0) return; // 注意这里的根目录可以做成可配置项 File root new File(D:/workspace); File[] files root.listFiles(); if (files null) return; for (File f : files) { if (f.getName().contains(keyword)) { listModel.addElement(f.getAbsolutePath()); } } });这段代码里的关键是“先清空再填充”。如果不先调用listModel.clear()每次点击查找都会把新结果追加到旧结果后面页面上的数据会越堆越多这就是记录里提到过的重复显示体验问题。contains实现的是模糊查找如果你需要区分大小写或者按扩展名过滤可以改成toLowerCase().contains(keyword.toLowerCase())或者再加一个扩展名判断。排序功能在记录里用的是冒泡排序下面是一个可复现的按文件名排序的代码片段。冒泡排序不是最高效的排序但它的逻辑足够简单适合写进实习日志里解释“我掌握了排序算法的实现”。// 冒泡排序按文件名升序排列 File[] files {new File(b.txt), new File(a.txt), new File(c.txt)}; for (int i 0; i files.length - 1; i) { for (int j 0; j files.length - 1 - i; j) { if (files[j].getName().compareTo(files[j 1].getName()) 0) { File temp files[j]; files[j] files[j 1]; files[j 1] temp; } } }这里的compareTo是字符串比较方法返回值大于 0 表示前面的文件名应该排在后面。Swing 里排序和查找不要在事件线程里做大量循环文件数量少的时候无所谓文件多的时候界面会卡住。常见做法是把耗时的遍历放到后台线程再通过SwingUtilities.invokeLater回填结果。实习记录里没写这一步但你要是自己复现最好加上。3.2 教师信息展示与添加HTML 表格到 JavaScript 动态操作第二周的任务从 Swing 切到了网页开发用 HTML 做布局、CSS 做样式、JavaScript 做动态效果。记录里先是把教师信息存在数组中再用表格显示到页面上。这个阶段的关键不是技术复杂而是理解“静态数据”和“动态数据”的区别。下面这段代码可以复现“教师信息展示 添加”的核心逻辑。!DOCTYPE html html head meta charsetgbk /head body table idteacherTable border1 trth编号/thth姓名/thth课程/th/tr /table input ididInput placeholder编号 input idnameInput placeholder姓名 input idcourseInput placeholder课程 button onclickaddTeacher()添加/button script var teachers [ {id: 1, name: 张老师, course: 软件工程}, {id: 2, name: 李老师, course: 数据结构} ]; function render() { var table document.getElementById(teacherTable); while (table.rows.length 1) { table.deleteRow(1); // 先删除已有数据行避免重复 } teachers.forEach(function(t) { var row table.insertRow(-1); row.insertCell(0).innerText t.id; row.insertCell(1).innerText t.name; row.insertCell(2).innerText t.course; }); } function addTeacher() { var id document.getElementById(idInput).value; var name document.getElementById(nameInput).value; var course document.getElementById(courseInput).value; if (id name course) { teachers.push({id: id, name: name, course: course}); render(); } } render(); /script /body /html这段代码的注意点在于render()函数里的while循环。如果不先删除旧行每点一次“添加”整个表格就会重新渲染一遍旧数据加新数据形成重复列表。记录里明确写了“在添加信息前先删除原来的信息”这就是这个细节的出处。table.deleteRow(1)中的参数 1 表示从第一行数据开始删除保留表头行。insertRow(-1)表示在表格末尾追加行。到这里你会发现前端显示数据的逻辑其实不复杂真正的差距在数据来源。数组里的数据是写死的刷新页面就没了所以记录里后两天转向 Node.js 和 MySQL目的就是让数据来自数据库。3.3 Node.js Express MySQL从静态数组到数据回显的链路第三周开始记录里的技术栈升级为 Node.js。流程是先在官网下载 Node.js然后在桌面新建文件夹作为根目录在 cmd 窗口执行npm init初始化项目再安装 express 框架和 MySQL 辅助包。这个链路今天看起来很简单但当时对新手来说最大的门槛是分清“前端请求”和“后端接口”。下面是一个最简的 Express MySQL 数据回显示例。// 项目根目录执行npm init -y // 再执行npm install express mysql const express require(express); const mysql require(mysql); const app express(); const connection mysql.createConnection({ host: localhost, user: root, password: 123456, database: teacher_db }); connection.connect(err { if (err) { console.error(数据库连接失败, err.message); return; } console.log(数据库连接成功); }); // 把静态数组替换成数据库查询 app.get(/api/teachers, (req, res) { connection.query(SELECT id, name, course FROM teacher, (err, rows) { if (err) { res.status(500).json({message: 数据加载失败}); return; } res.json(rows); }); }); app.listen(8080, () { console.log(server running at http://localhost:8080); });这段代码里的mysql.createConnection参数就是四个最常用的配置地址、用户名、密码、库名。如果你本地的 MySQL 端口不是默认的 3306还要加一个port字段。res.json(rows)会自动把查询结果转成 JSON 格式浏览器端拿到之后就可以用fetch或axios渲染到页面上。记录里特别提到“将读出的数据用 json 工具进行格式转化”这在 Express 中已经内置了不需要额外处理。真正需要留意的反而是查询语句里的字段名和页面里的字段名保持一致比如name和course否则前端拿不到值页面就会显示 undefined。这个阶段如果翻车优先打开浏览器的 Network 面板看接口返回不要盯着页面代码猜。到了这一步记录里的单页已经具备请求响应能力下一步就是对数据库做增删改查。实现思路很直接页面上不同按钮触发不同的 JavaScript 函数每个函数调用不同的接口接口里执行不同的 SQL 语句。比如添加教师就是POST /api/teachers删除就是DELETE /api/teachers/:id修改就是PUT /api/teachers/:id。这个链路打通之后一个动态页面就算成型了。3.4 数据库里的中文问题连接参数影响全局记录里第二次碰到中文乱码是在网上书城项目往数据库录入中文信息时。现象是中文变成问号原因是数据库连接代码没有指定字符集。这个问题在 Node.js 里同样存在解决方法是在createConnection里加一段配置。// 带字符集配置的 MySQL 连接 const connection mysql.createConnection({ host: localhost, user: root, password: 123456, database: book_db, charset: gbk });加了charset: gbk之后中文录入就不再是问号了。如果你用的是 utf8就要把这里的gbk改成utf8mb4同时页面的 meta 和数据库表的默认字符集也要保持一致。很多人只改代码不连表结构结果一样乱码。这个坑属于“你越急越找不到原因”的类型后来我养成一个习惯任何涉及中文数据的项目开工第一天就把页面编码、数据库连接、表结构三处的字符集统一好后面能少很多折腾。4. 避坑指南500 错误、端口占用、中文乱码四个排查现场4.1 服务器 500 错误数据库驱动包和数据库版本不匹配现象一个 Java 网站用 Tomcat 做服务器浏览器加载页面时提示 500 错误查看服务器日志里面写着“数据加载失败”。原因排除了 Tomcat 配置问题后最后发现是 jar 包和数据库版本不匹配。当时本地用的是旧版数据库但项目里引用的驱动包版本太新两边协议对不上导致连接失败。解决把数据库驱动包换成和数据库版本对应的版本重新编译部署。这个教训说明遇到 500 错误不要先怀疑服务器配置先看日志里有没有底层异常再检查驱动包、数据库版本、连接字符串这三项的兼容性。写在实习记录里可以写成“排查了一天最后定位到驱动与数据库版本不匹配”。4.2 中文乱码页面编码和数据库编码不一致现象教师信息回显到网页上时中文显示成乱码图书信息录入数据库后中文也变成问号。原因页面保存的编码和数据库表使用的编码不一致。记录里第一次处理是在连接数据库的代码处添加了限定字符集的参数第二次处理是把数据库和页面编码统一改成 gbk。解决最稳妥的做法是统一字符集。页面用meta charsetgbk数据库连接字符串加useUnicodetruecharacterEncodinggbk表结构字段也采用 gbk 或 utf8。注意如果你改用 utf8那页面、数据库、连接参数三处都要一致只改一处仍然会乱。这个坑几乎每个做中文系统的项目都会遇到实习记录里写了两处说明是真踩过。4.3 Tomcat 端口号被占用启动成功但页面访问失败现象项目移动到 Tomcat 的 webapp 目录后修改了配置并启动服务器访问 index.jsp 却失败。原因打开错误日志发现配置的端口已经被计算机上的其他进程占用Tomcat 没有真正监听那个端口。解决重新给 Tomcat 配置一个空闲端口比如 8080 被占就改成 89然后重启访问。以后遇到“Tomcat 启动成功但页面打不开”先执行netstat -ano | findstr 端口号看端口是否被占用再去看日志。别一上来就改代码改代码解决不了端口问题。4.4 MySQL 安装失败安装类型没选对现象在个人电脑上安装 MySQL 数据库时安装过程反复失败项目没法继续。原因安装过程中没有选择“开发者”选项导致缺少后续开发需要用到的组件或配置。解决重新运行安装程序选择开发者默认类型把常用的客户端和开发库一起装上。这个坑看起来很小但对第一次装数据库的人来说极其常见。写实习记录时把“安装数据库时因为没有选择开发者选项导致失败后来修正后成功”写进去比写“成功安装 MySQL”更有细节感。4.5 IIS 本地网站无法访问NTFS 权限和来宾账户问题现象在本地电脑上配置 IIS 网站地址栏输入网址后无法查看网页。原因本地虚拟访问网站时Internet 来宾账户没有访问权限同时磁盘不是 NTFS 格式看不到安全选项卡无法设置权限。解决把磁盘格式化为 NTFS然后在安全选项卡中给 Internet 来宾账户勾选“修改”权限。这个坑在实习记录里只占一天但很有代表性很多本地开发问题不是代码问题而是操作系统权限问题。遇到类似情况先看日志和权限再动代码。这五个坑放在一份实习记录里价值比“学会了 XX 技术”大得多。因为技术栈每个人都能学但踩坑经验是只有真到现场才会遇到的。写实习报告时把每个坑按“现象、原因、解决”写清楚就是最好的项目经历。5. 框架与建模Struts、Spring、Hibernate 的分层逻辑与商城项目拆解5.1 三层框架到底做了什么MVC、IOC/AOP 与 ORM记录里第四周学的是当时 Java Web 开发最主流的三个框架Struts、Spring、Hibernate。简单说Struts 管表示层Spring 管业务逻辑层Hibernate 管持久层。这个划分是为了让团队里每个人写出来的代码结构一致保证可读性同时把一些重复的基础工作交给框架自动完成实现代码复用。Struts 是 MVC 中 Model 的一个具体实现负责接收请求、调用业务逻辑、跳转页面。Spring 通过控制反转IOC管理对象把对象的创建和依赖关系交给容器又通过面向切面编程AOP处理事务、日志等横切逻辑。Hibernate 则是对 JDBC 的再封装让程序员不用手写 SQL 也能操作数据库。框架层次核心机制解决的问题Struts表示层MVC请求分发和页面跳转Spring业务逻辑层IOC、AOP对象管理、事务管理Hibernate持久层ORM对象与数据库表的映射这段话写进实习记录能体现出你不仅会用框架还知道框架之间怎么配合。不需要讲太深把“谁管哪一层”和“为什么这样分”说清楚就够了。记录里还提到一个观点大家都在同一个模式下写代码程序就能被别人读懂代码复用率也提高了。这个观点放在毕业设计的说明里能解释你为什么要用框架而不是从零写。5.2 JSP 数据回显动态页面的核心是请求作用域记录里第五周开始做商城项目的 JSP 页面。JSP 的作用是在 HTML 中嵌入 Java 代码和标签让页面可以动态显示数据库里的数据。这里最容易出错的是数据回显时拿不到值原因通常是数据没有放到正确的作用域。下面是一个最简单的 JSP 回显片段对应“把教师列表显示在表格里”的需求。% page contentTypetext/html; charsetgbk % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html body table border1 trth编号/thth姓名/thth课程/th/tr c:forEach items${teacherList} vart tr td${t.id}/td td${t.name}/td td${t.course}/td /tr /c:forEach /table /body /html这里的关键是${teacherList}。如果 servlet 里执行了request.setAttribute(teacherList, list)JSP 就能读取到如果数据放在 session 或 application 里写法要对应改成${sessionScope.teacherList}或${applicationScope.teacherList}。写实习记录时可以写“我理解了 JSP 里的数据必须由后端通过 request 或 session 传递而不是写死在页面里”。在标准 Java Web 结构中servlet 负责查询数据库然后把结果放到 request 作用域再转发给 JSP 显示。下面这段代码对应记录里“在 control 包内编写对应的逻辑类”的过程。// Servlet 中查询教师列表并转发到 JSP protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ListTeacher teacherList teacherDao.findAll(); request.setAttribute(teacherList, teacherList); request.getRequestDispatcher(/teacherList.jsp).forward(request, response); }这里的findAll()是数据访问层的方法返回一个 List。request.setAttribute把数据绑定到请求上forward再把它交给 JSP 渲染。写实习记录时把这段逻辑描述成“我实现了 Servlet 查询数据库并转发到 JSP 显示”就够了不需要贴完整代码。5.3 从需求到模型商城项目怎么拆功能模块第四、五周的任务是搭建一个商城类项目的模型和功能。记录里提到一个商城项目和网上书城实际上就是一个典型的 CRUD 练习图书信息录入、删除、修改、查询。它的工程价值在于把一个综合性需求拆成一组边界清晰的模块。下面是一个简化版的功能拆解表可以直接用在实习记录里。模块功能涉及技术首页展示显示图书列表、商品图片JSP、Servlet、数据库查询信息录入新增图书信息HTML 表单、POST 请求、SQL INSERT删除按 ID 删除图书超链接或 JS 点击、SQL DELETE编辑修改图书信息新窗口打开编辑页、SQL UPDATE搜索按关键字模糊查找SQL LIKE、条件拼接在做信息录入时记录里踩过一个典型坑中文不能录入数据库。原因就是连接数据库时没有指定字符集后来在连接代码处加了限定字符集参数才解决。这个问题在第四章已经展开过这里不再重复但要提醒的是建模阶段多花十分钟把“哪些字段是中文、哪些是主键、哪些允许为空”定清楚能省掉后面不少编码阶段的返工。实习记录里的建模任务还有一个价值扮演项目经理的角色讨论系统中需要实现的功能。这个经历说明建模不只是画图更是和用户确认“系统到底做什么”的过程。写实习记录时可以加一句“我们在项目模型阶段共同探讨了图书信息录入等功能明确了字段和流程为后续编码提供了依据”这句话很短但能证明你参与了项目前期。5.4 从 JDBC 到 ORM为什么框架能提高效率记录里专门提到了 JDBC 和 Hibernate 的区别。以前 Java 程序员操作数据库要写 JDBC 代码、拼 SQL 语句Hibernate 在 JDBC 之上做了封装实现了不用写 SQL 就能操作数据库。这个认知对写实习记录很重要因为它解释了为什么项目会选 Hibernate。一个典型的 JDBC 查询要写加载驱动、获取连接、创建语句、执行查询、处理结果集、关闭资源六步里面任何一步漏了都会有隐患。Hibernate 把这些重复过程封装起来程序员只需要定义实体类和数据表的关系调用 session 的方法就能增删改查。写实习记录时可以写“我理解了 ORM 的目的是减少重复代码而不是消灭 SQL复杂查询仍然需要原生 SQL”。如果要在实习记录里展示这个认知不需要写大段代码写一句“通过对比 JDBC 和 Hibernate 的使用过程我理解了框架是对常见问题的封装”就够了。这句话比“我学了 Hibernate”更有深度。6. 把实习记录变成可部署项目Tomcat 发布的四个验证技巧实习记录的最后一步是把项目部署到 Tomcat 上发布。这一步看着简单但最容易在“启动成功但访问失败”上翻车。我后来把发布验证固定成四步每次都按这个顺序检查很少再被卡住。第一步把项目放到 webapp 目录。Tomcat 的 webapp 目录名就是项目的上下文路径比如项目文件夹叫bookstore访问地址就是http://localhost:8080/bookstore/index.jsp。如果你直接访问根路径打不开先确认文件名和目录名对不对。第二步检查端口。修改 Tomcat 的conf/server.xml中 Connector 节点的port属性默认是 8080。如果被占用改成 89 或者 8081 都可以。Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /改完端口后用命令确认端口已经监听。# Windows netstat -ano | findstr :8080 # Linux / macOS lsof -i :8080第三步查看日志。启动失败时打开 Tomcat 的logs/catalina.out或localhost.日期.log错误信息一般会直接告诉你原因。实习记录里的 500 错误就是靠日志里的“数据加载失败”定位到数据库驱动和版本不匹配的。第四步验证外网访问。本地访问通过后如果要让局域网内其他机器访问需要关闭防火墙对应端口并确认 IP 地址不是 127.0.0.1。这一步在毕业设计答辩时经常用到提前在实习记录里写出来能让你的报告更完整。从那以后我每次部署项目都强迫自己走一遍“端口确认、目录确认、日志确认、编码确认”这四步哪怕已经部署过很多次也不跳过。尤其是编码确认中文乱码这个问题不会因为你换了一台电脑就消失它藏在每个页面的 meta 和每条连接数据库的 URL 里。如果你正在准备毕业实习材料这份软件工程实习记录可以作为一个底稿把里面的项目名、技术栈、踩坑细节改成你自己经历过的再补上几段真实的工作日志就能形成一份比空话套话强得多的实习记录。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑