简介:这份JSP上机实习报告文档面向高校Java Web课程学习者,尤其适合正在完成JSP开发技术实验或期末上机任务的学生参考。内容围绕六个典型实验题目展开,涵盖在JSP页面中用Java代码完成算术运算并输出结果、创建BookInfo与DoString等JavaBean封装数据、实现字符串中尖括号的HTML实体转换,以及基于JavaBean接收用户名密码并完成登录判断与页面转发,最后附有实习心得与总结,可帮助读者理清实验思路、对照代码查漏补缺。资源包共1个doc文件,约38KB,结构紧凑,便于直接查阅与打印。目前已有102人学习下载,适合需要快速上手JSP基础语法、JavaBean规范及页面跳转机制的初学者,也可作为课程实验报告的格式与内容参考。
1. 从一份 JSP 上机实习报告说起:为什么它值得你下载
如果你正在学 Java Web,或者要带人入门 Servlet/JSP,这份 JSP 上机实习报告.doc 大概率能帮你省下不少翻书的时间。它不是什么大厂架构文档,而是一份实打实的课程作业合集,把 JSP 开发里最基础也最容易翻车的几个环节——页面里嵌 Java 代码、JavaBean 封装、页面跳转、字符串转义——全部用可运行的代码串了一遍。整份文档按题目组织,每道题都有题目描述和对应代码,从最简单的1+1输出,到登录判断、留言板、工具类封装,基本覆盖了 JSP 入门阶段该练的手感。适合谁?刚学完 Servlet 想找练手项目的新手、需要一份现成实验参考的在校生,以及想快速回忆 JSP 写法的老开发。下面我按“能干什么 → 怎么跑 → 怎么改”的顺序,把这份文档拆开讲。
2. 项目定位与技术栈:一份典型的 JSP 课程实验合集
2.1 这份文档到底包含哪些题目
从正文看,这份实习报告至少包含六道题,每道题都对应一个 JSP 核心知识点:
| 题号 | 题目内容 | 涉及知识点 |
|---|---|---|
| 第一题 | JSP 中计算 1+1 并显示 | 表达式标签<%= %>、页面指令 |
| 第四题 | 创建 BookInfo JavaBean | JavaBean 规范、getter/setter |
| 第五题 | 创建 DoString 工具类转义<> | 静态工具方法、HTML 实体转义 |
| 第六题 | JavaBean 接收用户名密码并判断登录 | 请求参数接收、页面转发 |
| 其他 | 留言输入与展示 | 表单提交、请求处理 |
这些题目不是随便凑的,它们对应了 JSP 开发中最常见的几个动作:在页面里写 Java、把数据封装成对象、处理用户输入、做页面跳转。你把这六道题跑通,基本就理解了 JSP 的请求-响应模型。
2.2 技术栈与运行环境
这份文档用的是最经典的 Java Web 技术组合:
- JSP:作为视图层,负责展示和接收输入
- JavaBean:作为数据模型,封装 BookInfo 这类实体
- Servlet 容器:文档里没明说,但 JSP 要跑起来必须有容器,常见做法是用 Tomcat
- IDE:正文提到 Eclipse,创建动态 Web 项目
- JDK:JSP 编译需要 JDK,不是 JRE
提示:文档里 pageEncoding 出现过 ISO-8859-1 和 utf-8 混用的情况,这是新手最容易踩的编码坑,后面避坑章节会细说。
2.3 目录结构推测与文件组织
虽然文档本身是 .doc 格式,但按 JSP 动态 Web 项目的标准结构,你把它还原成工程后大概长这样:
JspLab/ ├── src/ │ ├── hbe/ │ │ └── BookInfo.java │ └── hby/ │ └── DoString.java ├── WebContent/ │ ├── index.jsp │ ├── login.jsp │ ├── loginResult.jsp │ ├── messageInput.jsp │ └── messageList.jsp └── WEB-INF/ └── web.xmlsrc下放 Java 类,WebContent下放 JSP 页面,WEB-INF放部署描述符。这个结构是 Eclipse 动态 Web 项目的默认布局,你照着建就不会乱。
3. 核心代码逐题拆解:从 1+1 到登录判断
3.1 第一题:在 JSP 里算 1+1 并输出
这道题看着简单,但它让你第一次把 Java 代码嵌进 HTML。文档里的核心代码是:
<%@ page language="java" import=".*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>计算结果</title> </head> <body> <%-- 表达式标签:直接输出 1+1 的结果 --%> <h2>1 + 1 = <%= 1 + 1 %></h2> </body> </html>逻辑说明:<%= 1 + 1 %>是 JSP 表达式标签,容器会把它翻译成out.print(1 + 1),所以页面显示1 + 1 = 2。参数方面,pageEncoding="utf-8"决定这个 JSP 文件本身的编码,contentType决定响应给浏览器的编码,两个最好保持一致。
我一般会在这里多写一句<%@ page contentType="text/html;charset=utf-8" %>,否则中文可能变问号。文档里只写了 pageEncoding,这是常见做法,但不够完整。
3.2 第四题:BookInfo JavaBean 的封装
JavaBean 是 JSP 里传数据的标准载体。文档里的 BookInfo 类:
package hbe; public class BookInfo { private String name; private String price; private String stock; private String author; 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; } }逻辑说明:四个属性全部私有,通过 public 的 getter/setter 暴露。这是 JavaBean 规范的核心——无参构造 + 私有字段 + 公共访问器。参数类型都是 String,文档明确要求如此,虽然 price 和 stock 用 String 不太合理,但作为练习可以接受。
在 JSP 里用<jsp:useBean>就能直接创建和赋值:
<jsp:useBean id="book" class="hbe.BookInfo" scope="request"/> <jsp:setProperty name="book" property="name" value="Java Web 入门"/> <jsp:setProperty name="book" property="price" value="59.9"/> <p>书名:<jsp:getProperty name="book" property="name"/></p>这样页面就不用写new BookInfo()了,容器帮你管理生命周期。
3.3 第五题:DoString 工具类做 HTML 转义
用户输入里如果带<或>,直接输出会破坏页面结构,甚至引发 XSS。文档里的 DoString 就是干这个的:
package hby; public class DoString { public static String change(String str) { str = str.replace("<", "<"); str = str.replace(">", ">"); return str; } }逻辑说明:replace把<换成<,>换成>,这样浏览器就会把它们当普通字符显示,而不是标签。参数 str 是原始输入,返回值是转义后的安全字符串。
注意:文档里写的是
str=("<","<"),这明显是伪代码或笔误,正确写法是str.replace("<", "<")。你抄的时候要改过来,否则编译不过。
在 JSP 里调用:
<%@ page import="hby.DoString" %> <p>安全输出:<%= DoString.change(request.getParameter("content")) %></p>3.4 第六题:JavaBean 接收登录参数并转发
这道题把 JavaBean 和页面跳转结合起来。文档里的登录判断逻辑:
<%@ page language="java" import=".*" pageEncoding="utf-8"%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); if ("admin".equals(username) && "000".equals(password)) { request.getRequestDispatcher("welcome.jsp").forward(request, response); } else { request.getRequestDispatcher("fail.jsp").forward(request, response); } %>逻辑说明:先从请求里拿 username 和 password,然后判断是否等于 admin 和 000。相等就转发到欢迎页,否则转发到失败页。forward是服务器内部跳转,浏览器地址栏不变。
参数说明:request.getParameter拿的是表单提交的值,表单 method 必须是 post 或 get,input 的 name 要和这里一致。文档里还提到用 JavaBean 接收,那更规范的做法是:
<jsp:useBean id="user" class="hbe.UserBean" scope="request"/> <jsp:setProperty name="user" property="*"/> <% if ("admin".equals(user.getUsername()) && "000".equals(user.getPassword())) { request.getRequestDispatcher("welcome.jsp").forward(request, response); } else { request.getRequestDispatcher("fail.jsp").forward(request, response); } %>property="*"会自动把同名请求参数塞进 JavaBean,省去逐个 getParameter。
4. 怎么把这份文档跑起来:环境搭建与部署步骤
4.1 准备 JDK 和 Tomcat
JSP 要跑,先得有 JDK 和 Servlet 容器。我一般用 JDK 8 或 11 配 Tomcat 8.5/9.0,版本太新反而容易和旧代码冲突。
# 检查 JDK 是否装好 java -version javac -version # 下载 Tomcat 后解压,设置 CATALINA_HOME export CATALINA_HOME=/opt/tomcat9 export PATH=$CATALINA_HOME/bin:$PATH # 启动 Tomcat startup.sh # Linux/Mac startup.bat # Windows启动后访问http://localhost:8080,看到 Tomcat 欢迎页就说明容器 OK。
4.2 在 Eclipse 里创建动态 Web 项目
文档明确说用 Eclipse 创建动态 Web 项目,步骤是:
- File → New → Dynamic Web Project
- 填项目名,比如 JspLab
- Target runtime 选你装的 Tomcat
- 勾选 Generate web.xml deployment descriptor
- Finish
然后把文档里的 Java 类放到src下对应包,JSP 放到WebContent下。
4.3 部署与访问
在 Eclipse 里右键项目 → Run As → Run on Server,选 Tomcat,启动后浏览器会自动打开。你也可以手动把项目打成 war 丢进 Tomcat 的 webapps:
# 假设项目目录是 JspLab cd JspLab jar -cvf JspLab.war . cp JspLab.war $CATALINA_HOME/webapps/ # Tomcat 会自动解压部署访问http://localhost:8080/JspLab/index.jsp就能看到页面。
4.4 验证每道题是否跑通
- 第一题:页面显示
1 + 1 = 2 - 第四题:用
<jsp:useBean>创建 BookInfo 并输出属性 - 第五题:输入
<script>看是否被转义成文本 - 第六题:输入 admin/000 看是否跳欢迎页,输错看是否跳失败页
每道题单独建一个 JSP,别全塞一个文件里,否则调试起来很痛苦。
5. 避坑与常见问题排查
5.1 中文乱码:pageEncoding 和 contentType 不一致
现象:页面中文显示成????或乱码。原因:JSP 文件本身编码和响应编码不一致,或者表单提交时没设编码。解决:JSP 顶部统一写<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>,表单提交前加request.setCharacterEncoding("utf-8")。
5.2 404:JSP 放错目录或访问路径不对
现象:访问页面报 404。原因:JSP 没放在 WebContent 下,或者访问 URL 少了项目名。解决:确认文件在WebContent或其子目录,访问时带上项目名,如/JspLab/login.jsp。
5.3 500:JavaBean 类找不到或包名不对
现象:用<jsp:useBean>时报ClassNotFoundException。原因:类没编译,或者 package 和 class 属性写错。解决:确认 Java 类在src下且包名一致,Eclipse 会自动编译到build/classes,手动部署时要确保 class 文件在WEB-INF/classes下。
5.4 登录判断永远失败:equals 写反或参数名不匹配
现象:输入 admin/000 还是跳失败页。原因:request.getParameter的 name 和表单 input 的 name 不一致,或者用了==比较字符串。解决:检查表单<input name="username">和getParameter("username")是否一致,字符串比较必须用equals,且常量放前面避免空指针。
5.5 转义方法报错:replace 写法错误
现象:DoString 编译不过。原因:文档里str=("<","<")是伪代码,不是合法 Java。解决:改成str = str.replace("<", "<");,两个 replace 都要赋值回 str。
6. 二次开发与改造:把实验代码变成可复用的小工具
这份文档的代码虽然简单,但稍加改造就能变成你项目里的基础组件。我一般会做三件事。
第一,把 DoString 扩展成完整的 HTML 转义工具,除了<>,还要处理&"',顺序很重要,&必须最先替换,否则会把<里的&又转一次:
public class HtmlEscape { public static String escape(String str) { if (str == null) return ""; return str.replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'"); } }第二,把登录判断从 JSP 里挪到 Servlet 或 Filter,JSP 只负责显示。这样职责清晰,也避免页面里堆满 Java 代码。改造后 login.jsp 只提交表单,LoginServlet 处理判断和转发。
第三,给 BookInfo 加一个toString和构造方法,方便调试和初始化:
public BookInfo() {} public BookInfo(String name, String price, String stock, String author) { this.name = name; this.price = price; this.stock = stock; this.author = author; } @Override public String toString() { return "BookInfo{name='" + name + "', price='" + price + "'}"; }验证改造是否成功,我习惯写一个简单的测试 JSP,把所有工具类都调一遍,看输出是否符合预期。比如转义工具,输入<a href="x">应该输出<a href="x">。
提示:改造时别一次改太多,每改一个类就重新部署验证一次,否则出问题很难定位是哪个改动引起的。
从那以后我每次拿到这种实验代码,都强制自己先跑通原始版本,再动手改,绝不跳过验证直接重构。希望这份拆解能帮你把这份 JSP 上机实习报告真正用起来。
本文还有配套的精品资源,点击获取