一、 开发环境与项目构建
-
Tomcat 服务器
-
目录结构 :
conf(配置文件如server.xml)、webapps(网站存放位置,ROOT为默认网站)、work(JSP编译成Java和class文件的地方)。 -
常见状态码 :
404(未找到资源)。 -
常见报错 :
java.net.BindException: Address already in use: bind(端口被占用,如8081/8080)。
-
-
Gradle 编译工具
-
作用:代替手动下载jar包,自动解决依赖。
-
环境变量 :需将gradle的
bin目录加入Path。 -
核心配置 (
build.gradle):-
plugins:引入功能(如id 'java'、id 'application')。 -
repositories:配置下载源(如阿里云maven)。 -
dependencies:引入类库坐标(如implementation 'org.hsqldb:hsqldb:2.7.4'、Lombok)。
-
-
-
IDEA 建立 Web 工程
-
使用 Jakarta EE / Web application 模板,服务器选 Tomcat。
-
修改默认部署网站名 :在 Tomcat 运行配置中修改
Application context(如改为/jsp14)。 -
开发目录结构 :
src/main/java(代码)、src/main/resources(资源)、src/main/webapp(网站根目录,含 JSP、HTML、WEB-INF)。 -
部署后目录结构 :
WEB-INF下包含classes(自己写的类)、lib(第三方库)、web.xml(部署描述符)。
-
二、 HTML表单与请求接收
-
表单标签
-
单选框(
radio)、多选框(checkbox)、下拉列表(select)、文件上传(file)。 -
注意 :单选框/多选框必须提供
value属性发给服务器。 -
form的method默认是GET,提交到action指定的路径。
-
-
Request 接收参数
-
单值 :
request.getParameter("username"); -
多值(如多选框) :
String[] hobbies = request.getParameterValues("hobbies");(注意校验hobbies != null)。 -
中文乱码解决 :JSP 头部需加
<%@ page contentType="text/html;charset=UTF-8" %>。
-
-
GET 与 POST 的区别
-
GET:参数放在 URL(Query String Parameters),长度有限,安全性低。
-
POST:参数放在请求体(Form Data),长度不限,相对安全。
-
可在浏览器 F12 的 Network 面板中观察数据交互。
-
三、 JSP 与 Servlet 核心机制
-
JSP 本质与生命周期
-
JSP 最终会被 Tomcat 编译为 Servlet(
.java和.class文件存放在work目录)。 -
JSP = Java + HTML。
-
生命周期 :
init(初始化,运行1次)、service(访问一次运行一次)、destroy(销毁,运行1次)。
-
-
Servlet 基础
-
使用
@WebServlet("/路径")配置访问地址。 -
继承
HttpServlet,重写doGet和doPost,通常在doGet中调用doPost统一处理。
-
-
Servlet 与 JSP 的分工
-
JSP:负责显示页面,接收用户输入。
-
Servlet:负责判断、业务处理、访问数据库,然后跳转到 JSP 显示结果。
-
四、 页面跳转与作用域
-
转发 (Forward):服务器内部跳转,地址栏不变,只有 1 次请求,参数和 request 数据都在。
- 代码:
request.getRequestDispatcher("login_suc.jsp").forward(request, response);
- 代码:
-
重定向 (Redirect):客户端跳转,地址栏改变,发送 302 状态码和 location,有 2 次请求,参数丢失。
- 代码:
response.sendRedirect(req.getContextPath() + "/login_suc.jsp");
- 代码:
-
四大作用域
-
request:一次请求内有效。
-
session :会话级别,跨多个 request 共享数据(如登录状态、保护页面)。注销使用
session.invalidate()。 -
application (ServletContext):全局级别,服务器启动到停止,跨所有 session 共享(如网站访问计数器)。
-
存取值:
setAttribute("key", value)/getAttribute("key")/removeAttribute("key")。
-
五、 JavaBean 与 Lombok
-
赋值给 Java 对象
- 接收页面参数后,实例化对象并用
setter赋值,再在页面用getter取值。
- 接收页面参数后,实例化对象并用
-
Lombok 插件
-
作用:自动生成
Getter、Setter、toString等。 -
依赖配置 :在
build.gradle中配置compileOnly和annotationProcessor。 -
使用 :在实体类上加
@Getter、@Setter注解。
-
六、 数据库操作与 CRUD 实战 (HSQLDB)
-
HSQLDB 嵌入式数据库
-
只需一个 jar 包即可运行,包含服务器、JDBC驱动、图形管理界面。
-
启动命令:
java -cp hsqldb.jar org.hsqldb.server.Server和java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing。 -
连接参数 :URL
jdbc:hsqldb:hsql://localhost/,用户sa,密码空。
-
-
JDBC 标准流程
-
加载驱动
Class.forName(driver)。 -
获取连接
DriverManager.getConnection(url, user, pass)。 -
预编译语句
PreparedStatement(防止 SQL 注入)。 -
执行查询/更新,处理
ResultSet。 -
使用
try-with-resources自动关闭资源。
-
-
DAO 设计模式
-
把数据库的
ResultSet转换为List<String[]>(多行多列)。 -
查 (Select) :返回
List<String[]>,遍历rs.next()填充数组。 -
增 (Insert) / 改 (Update) :使用
pstmt.executeUpdate(),返回受影响行数。
-
-
登录与权限控制
-
数据库中登录 :
select * from user where username=? and pass=?,如果rs.next()为 true 则登录成功。 -
保护页面 :在 JSP/Servlet 开头判断
session.getAttribute("login_user")是否为 null,若为 null 则重定向回登录页。
-
-
SQL 执行监控 (p6spy)
- 引入
p6spy依赖,配置spy.properties,将 URL 改为jdbc:p6spy:hsqldb:hsql://localhost/,即可在控制台打印带参数的完整 SQL 语句,方便调试。
- 引入
七、 典型业务场景(CRUD开发套路)
-
显示列表 :请求 Servlet -> DAO查询(
List<String[]>) -> 存入 session -> 重定向到 JSP -> JSP 校验null-> 表格遍历展示。 -
新增数据:JSP 表单提交到 Servlet -> 获取参数 -> DAO执行 Insert -> 返回行数 -> 存入 session (提示信息) -> 重定向回列表页。
-
编辑数据 :列表页传 id -> 查询 Servlet 找出对应记录 -> 存入 session -> 重定向到编辑页 -> 表单中
value回显 -> 提交 Update Servlet -> 更新数据库 -> 重定向回列表页。