web-第一次课后作业

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:

  1. 把 .jsp 文件翻译成 .java Servlet 源文件
  2. 把 .java 编译成 .class 字节码
  3. 执行这个 class,生成 HTML 结果
  4. 把 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 做了三件事:

  1. 管理依赖:你需要什么第三方库(比如 Servlet API),写在 pom.xml 里,Maven 自动下载
  2. 编译打包:帮你编译 Java 代码、运行测试、打包成 war 文件
  3. 插件扩展:比如本项目的 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 开发的完整入门地图。

相关推荐
小熊Coding1 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋91 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本1 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
xiaoshuaishuai81 小时前
C# 内存管理与资源泄漏
开发语言·c#
DIY源码阁1 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
lsx2024062 小时前
SVN 检出操作
开发语言
basketball6162 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
旺仔来了3 小时前
不联网的Linux下部署python环境
linux·开发语言·python
JAVA面经实录9173 小时前
MyBatis面试题库
java·mybatis