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

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 官方文档

相关文章:

  • ANSI编码
  • Python中的静态方法如何使用?
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(42)九龙神火罩拓扑 - 课程表排序(拓扑排序)
  • MIFNet (论文阅读笔记)
  • 4.0 相机引导XY轴控制螺丝枪打螺丝
  • 信创环境下TOP5甘特图工具对比:从功能到适配性测评
  • Arduino示例代码讲解:ArduinoISP
  • matlab 控制系统GUI设计-PID控制超前滞后控制
  • 【数学基础】概率与统计#1概率论与信息论初步
  • [本周五题]Javascript面试常考题手撕场景UR缓存、new关键字、大数相加、最长递增子序列、高并发请求、大文件上传和WebWorks
  • windows安装两个或多个JDK,并实现自由切换
  • JConsole 监控线程池状态
  • 基恩士PLC编程小技巧十:快速查找空软元件
  • 生态质量研究概述
  • Linux命令基础,创建,输入,输出,查看,查询
  • Cadence学习笔记4
  • (C语言)指针数组的运用
  • 【打卡D6】二分法
  • 【PyQt5】【Visual Studio】环境配置
  • 【MySQL数据库】约束
  • 法国参议院调查委员会公布雀巢“巴黎水”丑闻调查报告
  • 住建部:我国超9.4亿人生活在城镇
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 探月工程鹊桥二号中继星取得阶段性进展
  • 中国古代文学研究专家、南开大学教授李剑国逝世
  • 国家统计局:1-4月份,全国固定资产投资同比增长4.0%