资讯动态

JSP上机实习报告:六道题代码与避坑指南

发布时间:2026/10/14 2:01:55 来源:尧图企业网站定制
简介这份JSP上机实习报告面向高校Java Web课程学习者与初学者围绕JSP开发技术课程实验整理而成可帮助读者对照完成课堂作业、复习上机考点并梳理实验思路。报告内容覆盖JSP页面中嵌入Java代码实现算术运算、创建BookInfo等JavaBean封装name、price、stock、author属性、编写DoString工具类转换HTML特殊字符以及基于JavaBean实现用户名密码校验与页面跳转的登录程序并附有心得总结。资源包共1个doc文档约38KB结构紧凑便于直接查阅与打印。目前已有102人学习下载适合需要参考实验代码、理解JavaBean规范与JSP请求处理流程的学生对照练习也可作为课程报告撰写的参考范例。1. 从一份 JSP 上机实习报告说起它到底能帮你省下多少翻书时间如果你正在学 Java Web或者带学生做 JSP 上机实验大概率会遇到这种局面环境搭好了Tomcat 跑起来了但真到写代码的时候连一个“11 输出到页面”都要翻半天书。这份 JSP 上机实习报告就是冲着这个场景来的。它把 JSP 开发技术课程里最典型的几个上机题——表达式输出、表单提交、留言展示、JavaBean 封装、字符串转义、登录判断——全部拆成了可运行的代码片段和操作步骤。不是那种只给题目的实验指导书而是每道题都配了能直接抄进 Eclipse 的源码。适合谁刚接触 JSP 的在校生、需要快速交实验报告的开发者、以及想用最短时间把 JSP 核心语法过一遍的转行者。它解决的不是“JSP 是什么”的问题而是“这道题代码到底怎么写、为什么这么写、跑不起来该看哪里”的问题。2. 环境搭建与第一行 JSP 代码从零跑通一个动态 Web 项目2.1 选 Eclipse 还是 IDEATomcat 版本怎么定这份报告里的所有题目都默认在 Eclipse 里完成项目类型是 Dynamic Web Project。为什么不是 Maven 项目因为上机实验的场景下Maven 的依赖下载和目录结构反而会分散注意力Dynamic Web Project 的 WebContent 目录结构更直观JSP 文件放进去就能跑。Tomcat 版本建议选 8.5 或 9.0这两个版本对 JSP 2.3 和 Servlet 3.1 的支持最稳定和 Eclipse 的集成也最成熟。JDK 用 8 就行JSP 上机实验不涉及新语法JDK 8 的兼容性最好。常见做法是Eclipse 装 Java EE 版本Window → Preferences → Server → Runtime Environments 里添加 Tomcat 路径新建项目时 Target Runtime 选对应的 Tomcat。2.2 第一题用表达式标签输出 11 的完整流程第一题看起来简单但它是理解 JSP 执行模型的最小闭环。操作步骤分三步新建 Dynamic Web Project在 WebContent 下新建 JSP File然后在 body 里写表达式标签。% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8% !DOCTYPE html html head meta charsetUTF-8 title计算结果/title /head body !-- 表达式标签Java 表达式的结果会直接转为字符串插入 HTML -- h21 1 的结果是% 1 1 %/h2 % // 脚本片段这里可以写任意 Java 代码 int a 10; int b 20; int sum a b; out.println(a b sum); % /body /html这段代码里有两个关键点。第一% 1 1 %是表达式标签它等价于out.print(1 1)但写法更简洁适合输出单个值。第二% %是脚本片段里面可以声明变量、写循环、做判断但注意脚本片段里声明的变量是局部变量不能加访问修饰符。参数方面pageEncodingUTF-8和contentTypetext/html; charsetUTF-8要同时写只写一个在某些 Tomcat 版本下中文会乱码。我一般会把这两个属性当成 JSP 文件的标配新建文件后第一件事就是检查它们。2.3 部署到 Tomcat 并验证输出写完 JSP 后右键项目 → Run As → Run on Server选 TomcatEclipse 会自动把项目部署到workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/下。浏览器访问http://localhost:8080/项目名/文件名.jsp。如果页面显示“1 1 的结果是2”说明环境没问题。如果报 404先检查项目是否真的部署成功——在 Servers 视图里双击 Tomcat看 Modules 标签页里有没有你的项目。如果报 500看 Console 里的堆栈最常见的是 JSP 文件里 import 了不存在的包或者 Java 代码有语法错误。这里有个血泪经验Eclipse 有时候不会自动编译 JSP 里的 Java 代码改完代码后最好在 Servers 视图里右键 Tomcat → Clean再重新发布。3. JavaBean 封装与字符串转义把数据层和视图层拆开3.1 第四题BookInfo 的属性和 getter/setter 规范第四题要求创建一个名为 BookInfo 的 JavaBean包含 name、price、stock、author 四个 String 属性。JavaBean 的核心规范就三条类必须是 public 的属性私有提供无参构造方法和 getter/setter。这份报告里的代码把包名写成了hbe类名小写bookinfo这在 Java 命名规范里其实不太标准——类名应该用大驼峰BookInfo。但上机实验里老师可能不检查这个我建议还是按规范来避免以后被 IDE 的警告烦到。package com.example.bean; public class BookInfo { private String name; private String price; private String stock; private String author; // 无参构造方法JavaBean 规范要求显式写出 public BookInfo() {} public String getName() { return name; } public void setName(String name) { this.name name; } public String getPrice() { return price; } public void setPrice(String price) { this.price price; } public String getStock() { return stock; } public void setStock(String stock) { this.stock stock; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author author; } }参数说明四个属性都是 String 类型这是题目明确要求的。实际开发中 price 和 stock 更合理的是 BigDecimal 和 int但上机实验为了简化统一用 String 也能理解。getter/setter 的命名必须严格遵循getXxx/setXxx格式因为 JSP 里的jsp:useBean和jsp:setProperty标签依赖反射来查找方法名写错了会报NoSuchMethodException。3.2 第五题DoString 工具类与 XSS 转义的关系第五题要求写一个 DoString 工具类把字符串里的和替换成lt;和gt;。这份报告里的代码用了str(,lt;)这种写法实际上 Java 的 String 没有这个重载方法正确写法应该是str.replace(, lt;)。这个题目的实际意义是防止 XSS 攻击——如果用户输入的内容直接输出到页面恶意脚本会被浏览器执行。虽然上机实验不会讲这么深但这是 JSP 开发里必须知道的坑。package com.example.util; public class DoString { // 将 HTML 特殊字符转义防止脚本注入 public static String change(String str) { if (str null) return ; str str.replace(, lt;); str str.replace(, gt;); str str.replace(\, quot;); str str.replace(, amp;); // 注意 要最后替换 return str; } }逻辑说明替换顺序很重要。如果先替换那么lt;里的会被二次转义成amp;lt;。所以必须放在最后替换。参数方面方法声明为 static这样在 JSP 里可以直接用DoString.change(...)调用不需要实例化。我一般还会加上 null 判断避免空指针。这个工具类虽然简单但它是后面留言展示题目的基础——用户留言如果不转义页面结构会被破坏甚至被注入脚本。3.3 在 JSP 中调用 JavaBean 的两种方式在 JSP 里使用 JavaBean 有两种方式。第一种是直接用脚本片段% page importcom.example.bean.BookInfo % % BookInfo book new BookInfo(); book.setName(JSP 实战); book.setPrice(59.9); book.setStock(100); book.setAuthor(某开发者); % p书名% book.getName() %/p第二种是用 JSP 动作标签jsp:useBean idbook classcom.example.bean.BookInfo scopepage / jsp:setProperty namebook propertyname valueJSP 实战 / jsp:getProperty namebook propertyname /两种方式都能跑但动作标签的写法更“JSP 原生”适合在实验报告里展示对 JSP 标签的掌握。注意scopepage表示这个 Bean 只在当前页面有效如果要在多个页面共享需要改成session或application。常见错误是类名写错或者包名没导入报ClassNotFoundException这时候检查 WebContent/WEB-INF/classes 下有没有编译后的 .class 文件。4. 登录判断与页面转发请求流转的完整链路4.1 第六题用户名密码校验的逻辑实现第六题要求用 JavaBean 接收用户名和密码判断是否为 admin/000然后转发到不同页面。这道题的核心不是 JavaBean而是请求转发forward和重定向redirect的区别。报告里的代码用了()这种占位写法实际应该是request.getRequestDispatcher(success.jsp).forward(request, response)。% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8% % // 获取表单提交的参数 String username request.getParameter(username); String password request.getParameter(password); // 简单校验实际项目里应该查数据库 if (admin.equals(username) 000.equals(password)) { // 转发到欢迎页面URL 不变 request.getRequestDispatcher(welcome.jsp).forward(request, response); } else { // 转发到失败页面并携带错误信息 request.setAttribute(msg, 用户名或密码错误); request.getRequestDispatcher(fail.jsp).forward(request, response); } %逻辑说明request.getParameter()获取表单字段equals()判断时把常量写在前面可以避免空指针。forward()是服务器内部跳转浏览器地址栏不变请求域里的属性可以传递到下一个页面。如果换成response.sendRedirect()地址栏会变请求域属性会丢失。参数方面表单的 method 必须是 postget 会把密码暴露在 URL 里。另外这个 JSP 本身既是表单处理页又是逻辑判断页实际开发中应该拆成 Servlet但上机实验为了简化写在 JSP 里也能理解。4.2 表单提交与中文乱码的三种解法表单提交中文乱码是 JSP 上机实验里翻车率最高的地方。三种解法按推荐程度排序第一种在 JSP 页面顶部加request.setCharacterEncoding(UTF-8)但只对 POST 有效第二种在 Tomcat 的 server.xml 里给 Connector 加URIEncodingUTF-8对 GET 和 POST 都有效第三种用过滤器统一处理。上机实验里最省事的是第一种但要注意必须在获取任何参数之前调用。% request.setCharacterEncoding(UTF-8); String username request.getParameter(username); %如果已经乱码了检查三处JSP 文件的 pageEncoding、response 的 contentType、request 的 characterEncoding。这三处都设成 UTF-8基本能解决 90% 的乱码问题。剩下的 10% 可能是 Tomcat 版本问题换 8.5 或 9.0 通常就好了。4.3 留言展示题的完整数据流留言展示题虽然报告里只写了“留言输入”和“留言展示”两个标题但它的数据流是完整的表单页提交留言 → 处理页接收并转义 → 存储到 application 域 → 展示页遍历输出。这里的关键是 application 域它比 session 的作用范围更大所有用户都能看到留言。% // 处理页接收留言并转义后存入 application String content request.getParameter(content); if (content ! null !content.trim().isEmpty()) { String safeContent DoString.change(content); java.util.ListString messages (java.util.ListString) application.getAttribute(messages); if (messages null) { messages new java.util.ArrayList(); application.setAttribute(messages, messages); } messages.add(safeContent); } response.sendRedirect(list.jsp); %展示页用 JSTL 或脚本片段遍历% java.util.ListString messages (java.util.ListString) application.getAttribute(messages); if (messages ! null) { for (String msg : messages) { % p% msg %/p % } } %参数说明application 域的数据在服务器重启后丢失上机实验够用生产环境要存数据库。转义必须在存入之前做展示时直接输出即可。如果先存后转义已经存入的恶意脚本仍然可能在其他页面被触发。5. 避坑与排查JSP 上机实验里最容易翻车的五个点5.1 现象页面报 404Tomcat 日志无异常原因项目没有真正部署到 Tomcat或者访问路径写错。Eclipse 的 Dynamic Web Project 默认上下文路径是项目名但有时候 Servers 视图里的 Tomcat 配置没有同步。解决双击 Servers 里的 Tomcat在 Modules 标签页确认项目在列表里如果不在右键 Tomcat → Add and Remove 手动添加。访问路径用http://localhost:8080/项目名/文件.jsp注意大小写。5.2 现象JSP 里的 Java 代码报“无法解析为类型”原因JavaBean 类没有编译或者包名和 import 不一致。Eclipse 默认不会自动编译 WebContent 下的 Java 类需要手动检查 build 路径。解决确认 Java 类放在src目录下而不是 WebContent 下Project → Clean 重新编译检查% page import完整包名.类名 %是否写对。5.3 现象表单提交后中文变成问号或乱码原因request 的字符编码没有设置或者 JSP 文件的 pageEncoding 和 contentType 不一致。解决在获取参数前加request.setCharacterEncoding(UTF-8)JSP 顶部同时写pageEncodingUTF-8和contentTypetext/html; charsetUTF-8如果还不行检查 Tomcat 的 server.xml 里 Connector 有没有URIEncodingUTF-8。5.4 现象jsp:setProperty报 NoSuchMethodException原因JavaBean 的 setter 方法命名不规范或者属性类型不匹配。比如属性是 Stringsetter 参数写成了 int。解决严格按setXxx格式命名参数类型和属性类型一致确保类有无参构造方法如果属性名是namesetter 必须是setName而不是setname。5.5 现象forward 之后页面样式丢失或数据取不到原因forward 是服务器内部跳转浏览器地址栏不变如果目标页面用了相对路径引用 CSS 或 JS基准路径会变。解决用绝对路径${pageContext.request.contextPath}/css/style.css如果数据取不到检查request.setAttribute和request.getAttribute的 key 是否一致forward 只能在响应未提交前调用out.flush()之后会报 IllegalStateException。6. 从实验报告到可运行项目我的验证习惯和一条进阶路线这份 JSP 上机实习报告的价值不在于代码有多复杂而在于它把 JSP 开发技术课程里最核心的六个知识点串成了一条线表达式输出、脚本片段、JavaBean 封装、工具类转义、表单处理、请求转发。我拿到任何一份实验报告类的资源第一件事不是通读而是挑第一题跑通。跑通的标准是新建项目、粘贴代码、部署、浏览器看到预期输出。这一步过了说明环境和代码基本匹配。然后我会把每道题的代码单独建一个 JSP 文件按题目编号命名比如task1.jsp、task4.jsp这样排查问题时能快速定位是哪道题的代码有问题。验证 JavaBean 的时候我习惯在 JSP 里加一行% book.getClass().getName() %确认反射加载的类路径和预期一致。验证转义工具的时候我会故意输入scriptalert(1)/script看页面是显示文本还是弹窗。验证登录转发的时候我会分别用正确密码和错误密码各跑一次确认 forward 的目标页面正确并且地址栏没有变化。如果要把这份报告里的代码升级成更接近实际项目的结构下一步是把 JSP 里的 Java 逻辑抽到 Servlet 里JSP 只负责展示。比如登录判断可以写一个 LoginServlet在doPost里处理参数和转发JSP 只保留表单和提示信息。再进一步用 JSTL 和 EL 表达式替代脚本片段页面会更干净。但那是下一步的事上机实验阶段先把这份报告里的六道题跑通比什么都实在。从那以后我每次拿到类似的实验报告资源都会先跑第一题验证环境再逐题拆解最后把踩过的坑记在一个单独的 markdown 文件里。这个习惯帮我省下了大量重复排查的时间。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑