web-第一次课后作业
任务要求
1、完成编程环境的安装和配置,成功运行helloworld!jdk,tomcat,maven,vs code。
2、编写九九乘法表的jsp页面并打包部署运行。具体如下:
-
项目简介
本项目是一个基于 JSP 的 Web 练习项目,采用 Maven 构建并以 WAR 包形式部署 。
项目实现了注册、登录、会话管理、权限页面访问控制,以及九九乘法表展示等基础功能。
-
技术与环境
开发语言:Java(JSP/Servlet 运行环境)
构建工具:Maven
打包方式:war
编码:UTF-8
登录校验方式:固定账号密码(admin/admin),不连接数据库
-
功能模块
注册模块:填写姓名、密码、性别、年龄、爱好并提交展示
登录模块:输入用户名和密码,正确后写入 Session 并跳转首页
权限控制模块:page1-page4 页面按是否登录显示内容
退出登录模块:使 Session 失效
乘法表模块:首页和授权页面展示三角形九九乘法表
-
目录说明(核心页面)
-
src/main/webapp/index.jsp:项目首页,显示欢迎语与三角形乘法表
-
src/main/webapp/login.jsp:登录表单页
-
src/main/webapp/loginCheck.jsp:登录校验处理页
-
src/main/webapp/zhuce.jsp:注册表单页
-
src/main/webapp/zhuceCkeck.jsp:注册结果展示页
-
src/main/webapp/page1.jsp:登录授权示例页
-
src/main/webapp/page2.jsp /
page3.jsp / page4.jsp:与 page1.jsp 同类权限页面
-
src/main/webapp/logout.jsp:退出登录页
-
src/main/webapp/chengfabiao.jsp:早期乘法表示例页
版权声明:本文为CSDN博主「wust王老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wyhwust/article/details/160214781
解决方式
AI编码环境: IDEA社区版+Claude Code+deepseek V4-pro
用IDEA原因:内置 Maven,搭配 Maven 插件免装 Tomcat,单软件搞定所有环节。
完成情况如图:



JSP 个人网站项目 ------ 基础知识总结
一、项目概述
这是一个基于 JSP + Servlet + Maven + Tomcat 的 Java Web 入门项目,实现了用户注册、登录、权限校验、页面导航、九九乘法表等功能。项目代码量很小,适合用来理解 Java Web 开发的核心概念。
二、核心概念详解
2.1 HTTP ------ 浏览器与服务器的"通信协议"
是什么?
HTTP(HyperText Transfer Protocol,超文本传输协议)是浏览器和服务器之间传递数据的规则。你在浏览器里做的每一个操作(输入网址、点按钮、提交表单),背后都是一个 HTTP 请求被发送到服务器,服务器再返回一个 HTTP 响应。
一个登录操作背后的完整 HTTP 交互:
你的浏览器 服务器(Tomcat)
│ │
│ POST /loginCheck.jsp │
│ Host: localhost:8080 ──────────→ │ 请求行:方法 + 路径
│ Content-Type: application/x-www-form-urlencoded │ 请求头:描述附带数据的格式
│ │
│ username=admin&password=123456 │ 请求体:表单数据
│ ──→ │
│ │
│ ←────────── │
│ 302 Found │ 响应状态码:告诉浏览器"跟我跳转"
│ Location: /index.jsp │ 响应头:目标地址
│ │
│ GET /index.jsp ──────────→ │ 浏览器自动发起第二次请求
│ │
│ ←────────── │
│ 200 OK │ 响应状态码:成功
│ Content-Type: text/html │ 响应头:告诉浏览器这是HTML
│ │
│ <html><body>欢迎你,admin!</body></html> │ 响应体:页面内容
最常见的 HTTP 状态码:
最常见的 HTTP 状态码:
| 状态码 | 含义 | 项目中出现的地方 |
|---|---|---|
| 200 | 成功,页面正常返回 | 所有正常访问的页面 |
| 302 | 重定向,让浏览器跳转到另一个地址 | response.sendRedirect("index.jsp") 登录成功后跳转 |
| 404 | 找不到页面 | 访问了一个不存在的 JSP 文件时 |
| 500 | 服务器内部错误(代码报错) | JSP 中 Java 代码写错时 |
GET vs POST:
GET vs POST:
| 对比项 | GET | POST |
|---|---|---|
| 用途 | 向服务器"要"东西(看页面、查数据) | 向服务器"交"东西(提交表单、上传文件) |
| 参数位置 | 跟在 URL 后面(?key=value) |
放在请求体里,URL 上看不到 |
| 安全性 | 参数暴露在地址栏 | 相对安全,但也不是加密的 |
| 项目中例子 | 直接访问 index.jsp、点击超链接 |
<form method="post"> 登录、注册表单 |
2.2 Tomcat ------ 运行 Java Web 程序的"容器"
是什么?
普通 Java 程序你直接 java HelloWorld 就跑起来了。但 Web 程序不一样------它需要有人帮它接收 HTTP 请求、解析 HTTP 内容、把请求转发给你的代码、把你的处理结果打包成 HTTP 响应发回去。Tomcat 就是做这件事的。
浏览器 ──HTTP请求──→ [Tomcat Servlet容器] ──调用──→ [你的 JSP/Servlet]
│
浏览器 ←──HTTP响应── [Tomcat Servlet容器] ←──返回── [你的 JSP/Servlet]
没有 Tomcat 会怎样?
你的 JSP 文件只是一段文本文件,浏览器不认识 <% ... %> 这种 JSP 语法。必须由 Tomcat:
- 把 .jsp 文件翻译成 .java Servlet 源文件
- 把 .java 编译成 .class 字节码
- 执行这个 class,生成 HTML 结果
- 把 HTML 原路返回给浏览器
你可以去 target/tomcat/work/ 目录下看到 Tomcat 自动生成的 Java 和 class 文件。
Servlet 是什么?
Servlet 就是一段能"响应 HTTP 请求"的 Java 类。JSP 的底层其实就是一个 Servlet------Tomcat 把每个 JSP 都自动翻译成一个 Servlet 类来执行。你可以理解为:
JSP ≈ 把 HTML 和 Java 混在一起写的模板 (写起来方便)
Servlet ≈ 纯 Java 类,用 out.print() 输出 HTML (JSP 的底层实现)
2.3 JSP ------ 在 HTML 里嵌入 Java 代码
是什么?
JSP(JavaServer Pages)让你可以在 HTML 页面中直接写 Java 代码。它的设计思想是:页面大部分是静态 HTML,只有少数动态内容需要用 Java 生成。
JSP 九大内置对象(本项目中用到了 4 个):
JSP 最大的便利是它预置了 9 个可以直接使用的对象,你不需要自己创建它们:
JSP 九大内置对象(本项目中用到了 4 个):
| 内置对象 | 类型 | 作用 | 类比理解 |
|---|---|---|---|
request |
HttpServletRequest |
获取客户端发来的请求数据(表单参数、URL 参数、Cookie 等) | 快递员送来的包裹 |
response |
HttpServletResponse |
控制服务器的响应行为(跳转、设置 Cookie、设置响应头等) | 你准备回寄的信封 |
session |
HttpSession |
在多次请求之间记住用户状态(登录信息、购物车等) | 服务器给每个用户开的临时档案袋 |
out |
JspWriter |
向页面输出内容(动态生成 HTML) | 往网页上写字的笔 |
项目中的对应代码:
request.getParameter("username") // 从请求中取出表单里 name="username" 的值
response.sendRedirect("index.jsp") // 告诉浏览器跳转到 index.jsp
session.setAttribute("isLogin", true) // 把登录状态存到 session 中
out.print("欢迎你," + username) // 把"欢迎你,admin"输出到页面上
request、session、response 的生命周期区别(面试常考):
request 的生命:一次请求 ─────────────────────→ 响应返回后立即销毁
(你登录 → 服务器返回结果,这次 request 就没了)
session 的生命:用户打开浏览器 ───────────────→ 关闭浏览器 / 超时 / 手动退出
(登录后,浏览 page1、page2、page3...一直有效)
ServletContext 的生命:服务器启动 ────────────→ 服务器关闭
(全局唯一,所有用户共享)
本项目的 JSP 语法快速参考:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- 指令:设置页面属性 -->
<% String name = request.getParameter("name"); %> <!-- 脚本段:执行 Java 代码,不输出 -->
<%= name %> <!-- 表达式:输出变量值到页面 -->
<%! private int count = 0; %> <!-- 声明:定义成员变量/方法(本项目没用) -->
2.4 Session ------ 让服务器"记住你是谁"
为什么需要 Session?
HTTP 协议本身是无状态的------服务器处理完一次请求后,就"忘记"刚才跟谁说过话。但你登录网站后,不可能每点一个页面都重新输入账号密码。Session 就是来解决这个问题的。
Session 的工作原理:
首次访问(未登录):
浏览器 ──GET /index.jsp──→ 服务器
浏览器 ←──响应 + Set-Cookie: JSESSIONID=ABC123── 服务器创建一个 Session,ID 为 ABC123
登录:
浏览器 ──POST /loginCheck.jsp (JSESSIONID=ABC123)──→ 服务器根据 ABC123 找到对应的 Session
服务器往 Session 里写入: isLogin=true, username=admin
之后访问任何页面:
浏览器 ──GET /page1.jsp (JSESSIONID=ABC123)──→ 服务器根据 ABC123 找到 Session
从 Session 中取出 isLogin 和 username
判断用户已登录,直接展示页面
一句话: Session 存在服务器上,浏览器只保存一个 JSESSIONID(像号码牌)。你每次来,亮一下号码牌,服务器就去档案柜找你的资料。
项目中的 Session 代码:
// 登录成功 → 写入 Session
session.setAttribute("username", username); // 存用户名
session.setAttribute("isLogin", true); // 存登录标记
// 之后任何页面 → 读取 Session
Boolean isLogin = (Boolean) session.getAttribute("isLogin");
String username = (String) session.getAttribute("username");
// 退出登录 → 销毁 Session
session.invalidate(); // 清空这个用户的全部 Session 数据
2.5 Maven ------ 项目的"包管理器 + 构建工具"
是什么?
Maven 做了三件事:
- 管理依赖:你需要什么第三方库(比如 Servlet API),写在 pom.xml 里,Maven 自动下载
- 编译打包:帮你编译 Java 代码、运行测试、打包成 war 文件
- 插件扩展:比如本项目的 tomcat7-maven-plugin,让你不用单独装 Tomcat,一个命令就启动
没有 Maven 会怎么样?
你需要手动去网上下载 servlet-api.jar、jsp-api.jar,放到项目的 lib 目录,手动管理版本。项目变大后这是噩梦。
pom.xml 关键部分解读:
xml
<!-- 项目坐标:全球唯一标识这个项目 -->
<groupId>org.example</groupId> <!-- 组织/公司名 -->
<artifactId>jsp-personal-website</artifactId> <!-- 项目名 -->
<version>1.0-SNAPSHOT</version> <!-- 版本号,SNAPSHOT 表示开发中 -->
<!-- 打包方式:war 是 Web 项目的标准格式,jar 是普通 Java 项目 -->
<packaging>war</packaging>
<!-- 依赖:告诉 Maven "我需要这些库" -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope> <!-- provided = 运行时由 Tomcat 提供,不用打进 war 包 -->
</dependency>
</dependencies>
<!-- 插件:拓展 Maven 能力 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId> <!-- 内嵌 Tomcat,mvn tomcat7:run 就能启动 -->
</plugin>
</plugins>
Maven 生命周期(几个最常用的命令):
mvn clean → 删除 target 目录(清理上次构建产物)
mvn compile → 编译 Java 源码
mvn package → 编译 + 打包成 war 文件
mvn tomcat7:run → 启动内嵌 Tomcat,运行项目(本项目专用)
2.6 项目文件结构 ------ 约定大于配置
jsp-personal-website/
│
├── pom.xml # Maven 配置文件(项目最核心的配置)
│
└── src/
└── main/
├── java/ # Java 源码目录(本项目没有,因为所有代码都写在 JSP 里)
│
└── webapp/ # Web 资源根目录(打包时直接放 war 包根目录)
│
├── index.jsp # 首页(直接访问 http://localhost:8080/ 就是这个页面)
├── login.jsp # 登录页面(GET 访问显示登录表单)
├── loginCheck.jsp # 登录校验(POST 提交到这里处理)
├── zhuce.jsp # 注册页面
├── zhuceCheck.jsp # 注册校验
├── logout.jsp # 退出登录
├── chengfabiao.jsp # 九九乘法表
├── page1.jsp ~ page4.jsp # 需要登录才能访问的受保护页面
│
└── WEB-INF/
└── web.xml # Web 应用描述文件(本项目里基本是空的)
WEB-INF 目录是特殊的:浏览器永远无法直接访问这个目录下的文件,所以放配置文件和安全的东西。
三、本项目请求处理流程
以"用户登录"为例,串联所有知识点:
第1步:用户访问 login.jsp
→ 浏览器发起 GET /login.jsp
→ Tomcat 找到 login.jsp,翻译成 Servlet,执行
→ 返回一个包含登录表单的 HTML 页面
第2步:用户填写账号密码,点登录
→ 浏览器发起 POST /loginCheck.jsp
→ 请求体携带 username=admin&password=admin
→ Tomcat 找到 loginCheck.jsp,翻译成 Servlet,执行
→ JSP 代码通过 request.getParameter() 拿到用户名密码
→ 校验成功,通过 session.setAttribute() 存储登录状态
→ 通过 response.sendRedirect() 返回 302 跳转到 index.jsp
第3步:浏览器自动访问 index.jsp
→ 浏览器发起 GET /index.jsp(自动带上 JSESSIONID Cookie)
→ Tomcat 通过 JSESSIONID 找到对应用户的 Session
→ JSP 代码通过 session.getAttribute() 读取登录状态
→ 发现已登录,显示"欢迎你,admin" + 受保护页面的链接
第4步:用户点击"页面1"
→ 浏览器发起 GET /page1.jsp(自动带上 JSESSIONID)
→ JSP 代码检查 session 中的 isLogin
→ 已登录 → 正常显示 → 输出九九乘法表
→ 未登录 → response.sendRedirect("login.jsp") 强制跳回登录页
第5步:用户点击"退出登录"
→ 浏览器发起 GET /logout.jsp
→ session.invalidate() 销毁所有 Session 数据
→ response.sendRedirect("index.jsp") 跳回首页
→ 首页检测到未登录,显示"请先登录"
四、关键概念一句话总结
关键概念一句话总结
| 概念 | 一句话 |
|---|---|
| HTTP | 浏览器和服务器之间收发数据的通信规则 |
| Tomcat | 一个能接收 HTTP 请求并调用你 Java 代码的服务器程序 |
| Servlet | 能处理 HTTP 请求并返回响应的 Java 类,JSP 的底层就是它 |
| JSP | 让开发者在 HTML 里写 Java 代码的技术,本质会被编译成 Servlet |
| Session | 存在服务器端的用户数据,解决 HTTP "记不住人"的问题 |
| Maven | 帮你下载依赖库、编译代码、打包部署的自动化工具 |
| pom.xml | Maven 的核心配置文件,声明依赖和插件 |
| war 包 | Java Web 项目的标准打包格式,Tomcat 读取它来运行网站 |
| WEB-INF | Web 应用的安全目录,浏览器无法直接访问 |
五、学习路线建议
Java 基础语法(变量、循环、判断、数组)
↓
HTML 表单基础(form、input、radio、checkbox)
↓
理解 HTTP 请求-响应模型(GET vs POST、状态码)
↓
理解 JSP 怎么把 HTML 和 Java 混在一起(脚本段、表达式、内置对象)
↓
理解 Session 怎么记住用户(setAttribute / getAttribute / invalidate)
↓
理解 Maven 做了什么(pom.xml、依赖、插件)
↓
理解 Tomcat 在整个流程中的角色(翻译 JSP → 编译 → 执行 → 返回 HTML)
这七个概念串起来,就是 Java Web 开发的完整入门地图。