当前位置: 首页 > article >正文

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 项目
  1. 创建 Maven 项目,选择 webapp 模板。
  2. 配置 Tomcat
     

    xml

    <!-- pom.xml 添加 Servlet 依赖 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
  3. 编写第一个 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 生命周期
  1. 初始化init()(仅一次)
  2. 处理请求service() → doGet()/doPost()
  3. 销毁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. 实战项目推荐

  1. 学生管理系统:CRUD 操作 + 分页。
  2. 在线商城:商品展示、购物车、订单管理。
  3. 博客系统:文章发布、评论功能。

10. 学习资源推荐

  • 书籍:《Head First Servlet & JSP》《Spring 实战》
  • 视频:B 站黑马程序员 JavaWeb 教程
  • 文档:Oracle Servlet 官方文档

http://www.kler.cn/a/584073.html

相关文章:

  • AI大数据挖掘的威力
  • 【鸿蒙开发】Hi3861学习笔记- GPIO之按键
  • 小白学习:提示工程(什么是prompt)
  • PostgreSQL存储管理体系结构学习笔记2
  • Linux第二次练习
  • hive-进阶版-1
  • 嵌入式开发工程师笔试面试指南-模电基础
  • 查找某个端口是否被占用
  • 【数据结构】4线性表综合实验
  • 前端学习笔记(三)——ant-design vue表单传递数据到父页面
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • 单机DeepSeek做PPT,YYDS!
  • 大语言模型的潜力是否被高估
  • C# 发送邮件 报错:此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。
  • Denoising as Adaptation Noise-Space Domain Adaptation for Image Restoration
  • 【守护蓝色星球】《海洋环境保护法》的重要性与遵守主体
  • Redis三大件 穿透、雪崩、击穿
  • 如何自己做奶茶,从此告别奶茶店
  • Appium高级操作--ActionChains类、Toast元素识别、Hybrid App操作、手机系统API的操作
  • CSS-复合选择器、元素显示模式、背景