javaWeb的详细笔记(超详细版本)
JavaWeb 详细学习笔记
1. JavaWeb 概述
1.1 什么是 JavaWeb?
- 定义:基于 Java 技术实现 Web 应用程序的开发,涵盖 Servlet、JSP、数据库交互、框架等。
- 核心组件:Servlet、JSP、JDBC、Tomcat 服务器。
- 应用场景:企业级网站、电商平台、管理系统等。
1.2 技术栈演进
- 传统 JavaWeb:Servlet + JSP + JDBC
- 主流框架:Spring + Spring MVC + MyBatis (SSM)
- 微服务架构:Spring Boot + Spring Cloud
2. 环境搭建
2.1 开发工具
- IDE:IntelliJ IDEA / Eclipse
- 服务器:Tomcat 9+
- 数据库:MySQL 8.0
- 构建工具:Maven
2.2 第一个 JavaWeb 项目
- 创建 Maven 项目,选择
webapp
模板。 - 配置 Tomcat:
xml
<!-- pom.xml 添加 Servlet 依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
- 编写第一个 Servlet:
java
@WebServlet("/hello") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().write("Hello JavaWeb!"); } }
3. Servlet 核心
3.1 Servlet 生命周期
- 初始化:
init()
(仅一次) - 处理请求:
service()
→doGet()
/doPost()
- 销毁:
destroy()
(服务器关闭时)
3.2 请求与响应
- HttpServletRequest:获取请求参数、头信息、Session。
- HttpServletResponse:设置响应内容、重定向、Cookie。
示例:表单提交
java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
// 验证逻辑...
resp.sendRedirect("welcome.jsp");
}
}
4. JSP 与 EL 表达式
4.1 JSP 基础
- 作用:动态生成 HTML,简化页面开发。
- 语法:
<% ... %>
(脚本)、<%= ... %>
(表达式)、<%@ ... %>
(指令)。
示例:显示数据
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h1>欢迎, ${sessionScope.user.name}!</h1>
</body>
</html>
4.2 EL 表达式与 JSTL
- EL:简化 JSP 中的 Java 代码,如
${param.id}
。 - JSTL:标签库实现逻辑控制:
jsp
<c:forEach items="${userList}" var="user"> <tr><td>${user.id}</td><td>${user.name}</td></tr> </c:forEach>
5. 数据库交互(JDBC)
5.1 连接 MySQL
java
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
5.2 使用 PreparedStatement 防 SQL 注入
java
public boolean login(String username, String password) {
String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
6. 会话管理
6.1 Cookie 与 Session
- Cookie:客户端存储,保存用户偏好。
java
Cookie cookie = new Cookie("username", "zhangsan"); cookie.setMaxAge(60 * 60 * 24); // 有效期1天 resp.addCookie(cookie);
- Session:服务端存储,保存用户登录状态。
java
HttpSession session = req.getSession(); session.setAttribute("user", user);
6.2 过滤器(Filter)与监听器(Listener)
- Filter:实现权限控制、编码统一。
java
@WebFilter("/*") public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); chain.doFilter(req, resp); } }
7. MVC 分层架构
7.1 MVC 模式
- Model:数据层(DAO、Service)
- View:展示层(JSP、HTML)
- Controller:控制层(Servlet)
7.2 分层代码示例
java
// Service 层
public class UserService {
public User getUserById(int id) {
return userDao.findById(id);
}
}
// Servlet 控制器
@WebServlet("/user")
public class UserServlet extends HttpServlet {
private UserService userService = new UserService();
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int id = Integer.parseInt(req.getParameter("id"));
User user = userService.getUserById(id);
req.setAttribute("user", user);
req.getRequestDispatcher("/userInfo.jsp").forward(req, resp);
}
}
8. 常见问题与优化
8.1 中文乱码解决
- JSP 页面:
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- Servlet:
java
req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8");
8.2 连接池优化
- 使用 Druid 连接池:
xml
<!-- pom.xml 添加依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency>
9. 实战项目推荐
- 学生管理系统:CRUD 操作 + 分页。
- 在线商城:商品展示、购物车、订单管理。
- 博客系统:文章发布、评论功能。
10. 学习资源推荐
- 书籍:《Head First Servlet & JSP》《Spring 实战》
- 视频:B 站黑马程序员 JavaWeb 教程
- 文档:Oracle Servlet 官方文档