Java Web 核心知识点总结

ops/2024/11/2 6:41:36/

Java Web 核心知识点总结

一、HTTP协议

  1. 核心概念

    • 请求/响应模型
    • 无状态协议
    • 持久连接
  2. 关键要素

    • 请求方法(GET/POST/PUT/DELETE)
    • 状态码(2xx成功/3xx重定向/4xx客户端错误/5xx服务器错误)
    • 常用请求头和响应头

二、Servlet

  1. 生命周期

    • 加载类
    • 创建实例(单例)
    • init()初始化
    • service()服务
    • destroy()销毁
  2. 核心功能

    • 接收请求参数
    • 处理业务逻辑
    • 响应处理结果
    • 请求转发与重定向

三、JSP

  1. 运行原理

    • JSP转译成Servlet
    • 编译成class文件
    • 加载和执行
  2. 核心要素

    • 脚本元素
    • 指令元素
    • 九大内置对象
    • 四大作用域

    JSP九大内置对象和四大作用域详解与应用场景

    一、常用内置对象及最佳实践

    1. request对象

    核心功能

    • 获取请求参数
    • 获取请求头
    • 获取客户端信息

    典型应用场景

    1. 处理表单提交
    java">// 用户注册表单处理
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String[] hobbies = request.getParameterValues("hobby"); // 复选框// 获取客户端信息
    String clientIP = request.getRemoteAddr();
    String userAgent = request.getHeader("User-Agent");
    
    1. 文件上传
    java">// 获取上传的文件
    Part filePart = request.getPart("file");
    String fileName = filePart.getSubmittedFileName();
    

    2. session对象

    核心功能

    • 会话管理
    • 用户状态维护
    • 登录信息存储

    典型应用场景

    1. 用户登录状态管理
    java">// 登录成功后存储用户信息
    User user = userService.login(username, password);
    if(user != null) {session.setAttribute("loginUser", user);
    }// 检查用户是否登录
    User loginUser = (User)session.getAttribute("loginUser");
    if(loginUser == null) {response.sendRedirect("login.jsp");
    }
    
    1. 购物车实现
    java">// 添加商品到购物车
    @SuppressWarnings("unchecked")
    List<Item> cart = (List<Item>)session.getAttribute("cart");
    if(cart == null) {cart = new ArrayList<>();session.setAttribute("cart", cart);
    }
    cart.add(new Item(productId, quantity));
    

    3. application对象

    核心功能

    • 全局数据存储
    • 应用级配置

    典型应用场景

    1. 网站访问统计
    java">// 统计在线人数
    Integer onlineCount = (Integer)application.getAttribute("onlineCount");
    if(onlineCount == null) {onlineCount = 1;
    } else {onlineCount++;
    }
    application.setAttribute("onlineCount", onlineCount);
    
    1. 系统初始化配置
    java">// 在应用启动时加载配置
    public void contextInitialized(ServletContextEvent sce) {ServletContext application = sce.getServletContext();// 加载系统配置Properties config = loadSystemConfig();application.setAttribute("sysConfig", config);
    }
    

    4. out对象 (JspWriter)

    核心功能

    • 向客户端输出内容
    • 管理输出缓冲区

    典型应用场景

    1. 动态输出HTML内容
    <%
    List<User> users = userService.findAll();
    for(User user : users) {out.println("<tr>");out.println("<td>" + user.getName() + "</td>");out.println("<td>" + user.getAge() + "</td>");out.println("</tr>");
    }
    %>
    
    1. 控制缓冲区
    <%
    out.clearBuffer(); // 清除缓冲区
    out.flush();       // 刷新缓冲区
    int size = out.getBufferSize(); // 获取缓冲区大小
    int remaining = out.getRemaining(); // 获取剩余大小
    %>
    

    5. pageContext对象 (PageContext)

    核心功能

    • 统一访问其他内置对象
    • 管理页面属性
    • 提供便捷查找方法

    典型应用场景

    1. 统一获取属性
    <%
    // 搜索所有作用域
    Object value = pageContext.findAttribute("user");// 获取指定作用域的属性
    Object pageValue = pageContext.getAttribute("name", PageContext.PAGE_SCOPE);
    Object requestValue = pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);
    %>
    
    1. 获取其他内置对象
    <%
    HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
    ServletContext application = pageContext.getServletContext();
    HttpSession session = pageContext.getSession();
    %>
    

    6. config对象 (ServletConfig)

    核心功能

    • 获取Servlet初始化参数
    • 获取Servlet名称

    典型应用场景

    1. 读取初始化参数
    <%-- web.xml配置 --%>
    <servlet><servlet-name>MyServlet</servlet-name><init-param><param-name>dbUrl</param-name><param-value>jdbc:mysql://localhost:3306/mydb</param-value></init-param>
    </servlet><%-- JSP中使用 --%>
    <%
    String dbUrl = config.getInitParameter("dbUrl");
    String servletName = config.getServletName();
    %>
    

    7. page对象 (Object)

    核心功能

    • 代表当前JSP页面的实例
    • 类似于Java类中的this引用

    典型应用场景

    1. 获取页面信息
    <%
    String servletInfo = page.getServletInfo();
    String className = page.getClass().getName();
    %>
    

    8. exception对象 (Throwable)

    核心功能

    • 处理JSP页面异常
    • 获取异常信息

    典型应用场景

    1. 错误页面处理
    <%-- 错误页面: error.jsp --%>
    <%@ page isErrorPage="true" %>
    <html>
    <head><title>Error</title></head>
    <body>错误信息: <%= exception.getMessage() %>堆栈跟踪: <% exception.printStackTrace(new java.io.PrintWriter(out)); %>
    </body>
    </html><%-- 普通页面指定错误页面 --%>
    <%@ page errorPage="error.jsp" %>
    

    9. response对象 (HttpServletResponse)(前面已详细介绍)

    实际开发建议

    1. 使用频率排序

    • request/response:最常用,请求处理的基础
    • session:用户状态管理必备
    • out:动态输出内容
    • pageContext:获取其他对象和属性
    • application:全局数据
    • config:初始化配置
    • page:较少使用
    • exception:错误处理

    2. 最佳实践

    1. 缓冲控制
    <%
    // 设置不缓存页面
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", -1);
    %>
    
    1. 异常处理
    <%
    try {// 业务代码
    } catch(Exception e) {// 记录日志pageContext.setAttribute("error", e.getMessage());// 转发到错误页面pageContext.forward("error.jsp");
    }
    %>
    
    1. 属性读写
    <%
    // 推荐使用pageContext统一访问属性
    pageContext.setAttribute("user", user, PageContext.SESSION_SCOPE);
    User sessionUser = (User)pageContext.getAttribute("user", PageContext.SESSION_SCOPE);// 查找属性(按PAGE、REQUEST、SESSION、APPLICATION顺序)
    Object value = pageContext.findAttribute("searchKey");
    %>
    

    二、四大作用域实战应用

    1. page作用域

    适用场景: 当前页面的临时变量

    <%-- 在复杂页面中暂存计算结果 --%>
    <%
    pageContext.setAttribute("total", calculateTotal());
    %>
    ... 页面其他处理 ...
    总价: ${pageContext.getAttribute("total")}
    

    2. request作用域

    适用场景: 请求转发时的数据传递

    java">// 在MVC模式中的应用
    public class ProductServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 查询商品列表List<Product> products = productService.findAll();// 存储到requestrequest.setAttribute("products", products);// 转发到JSP页面request.getRequestDispatcher("/product/list.jsp").forward(request, response);}
    }
    

    3. session作用域

    适用场景: 用户会话相关的数据

    java">// 多步骤表单提交
    public class RegisterServlet extends HttpServlet {// 第一步:基本信息protected void doPost(HttpServletRequest request, HttpServletResponse response) {UserDTO userDTO = new UserDTO();userDTO.setUsername(request.getParameter("username"));userDTO.setEmail(request.getParameter("email"));// 存储到sessionrequest.getSession().setAttribute("userDTO", userDTO);response.sendRedirect("register-step2.jsp");}// 第二步:详细信息protected void doPost(HttpServletRequest request, HttpServletResponse response) {UserDTO userDTO = (UserDTO)request.getSession().getAttribute("userDTO");// 补充详细信息userDTO.setAddress(request.getParameter("address"));// 完成注册userService.register(userDTO);// 清理sessionrequest.getSession().removeAttribute("userDTO");}
    }
    

    4. application作用域

    适用场景: 全站共享的数据

    java">// 系统字典数据缓存
    @WebListener
    public class DictionaryListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {ServletContext application = sce.getServletContext();// 加载系统字典Map<String, List<Dict>> dictMap = dictService.loadAllDict();application.setAttribute("systemDict", dictMap);}
    }// 在JSP中使用
    <select name="status"><c:forEach items="${applicationScope.systemDict.status}" var="dict"><option value="${dict.code}">${dict.name}</option></c:forEach>
    </select>
    

    作用域选择建议

    1. 数据生命周期

      • 临时计算结果 -> page
      • 一次性展示数据 -> request
      • 用户相关状态 -> session
      • 全局共享数据 -> application
    2. 性能考虑

      • session数据不宜过多,会占用服务器内存
      • application数据要考虑并发安全
      • request作用域最常用且最安全
    3. 安全考虑

      • 敏感数据优先存储在session
      • application数据要考虑权限控制

    这些场景和示例展示了不同作用域的实际应用,帮助我们在开发中选择合适的作用域来存储数据。

四、JDBC

  1. 核心步骤

    • 加载驱动
    • 建立连接
    • 创建语句
    • 执行SQL
    • 处理结果
    • 释放资源
  2. 关键技术

    • 连接池
    • 预编译SQL
    • 事务处理
    • 批处理操作

五、会话管理

  1. Cookie

    • 客户端存储
    • 键值对格式
    • 有效期设置
    • 域和路径限制
  2. Session

    • 服务端存储
    • 会话跟踪
    • 超时机制
    • 会话安全

六、核心过滤器和监听器

  1. Filter

    • 请求过滤
    • 响应过滤
    • 编码处理
    • 权限控制
  2. Listener

    • 生命周期监听
    • 属性变更监听
    • 会话监听
    • 应用监听

七、MVC模式

  1. 组成部分

    • Model(JavaBean)
    • View(JSP)
    • Controller(Servlet)
  2. 核心价值

    • 解耦
    • 复用
    • 维护性
    • 可扩展性

http://www.ppmy.cn/ops/130352.html

相关文章

基于SpringBoot+Vue技术的宇宙动漫网站【前后端分离】

基于SpringBootVue技术的宇宙动漫网站设计与实现 摘要 宇宙动漫网站是一个为动漫爱好者提供观看、讨论和分享的平台&#xff0c;致力于打造一个全面且便捷的动漫资源平台。该网站使用SpringBoot和Vue技术栈&#xff0c;通过后端提供数据接口支持和数据存储&#xff0c;前端实现…

Jetson AGX Orin 实现相机雷达联合标定

Jetson AGX Orin 实现相机雷达联合标定. 使用autoware标定工具,联合标定lidar和相机,计算出内外参等参数, 实现点云目标映射到图像上. 点云分隔目标映射图片 环境安装参考: Jetson AGX Orin 安装 Autoware calibration_toolkit 标定工具 标定雷达和相机 新开终端 roscore 新…

工厂方法模式与抽象工厂模式

工厂方法模式 (Factory Method) 定义&#xff1a; 工厂方法模式是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但让子类决定实例化哪个类。工厂方法将类的实例化推迟到子类。 优点&#xff1a; 解耦&#xff1a;客户端代码与具体的产品类解耦…

Uniapp 实现app自动检测更新/自动更新功能

实现步骤 配置 manifest.json 在 manifest.json 中设置应用的基本信息&#xff0c;包括 versionName 和 versionCode。 一般默认0.0.1&#xff0c;1. 服务器端接口开发 提供一个 API 接口&#xff0c;返回应用的最新版本信息&#xff0c;版本号、下载链接。客户端检测更新 使…

C++入门——“C++11-右值引用和移动语义”

C11相比于C98增加以许多新特性&#xff0c;让C语言更加灵活好用&#xff0c;但是貌似也增加了许多学习的难度&#xff0c;现在先看第一部分。 一、右值引用和移动语义 1.右值引用和左值引用 在C中&#xff0c;值可以大致分为右值和左值&#xff0c;左值大概是哪些已经被定义的变…

DirectShow过滤器开发-写MP3音频文件过滤器(再写 写MP3)

下载本过滤器DLL 本过滤器将MP3音频流写到MP3音频文件。 过滤器信息 过滤器名称&#xff1a;写MP3_2 过滤器GUID&#xff1a;{AE46BC15-71E5-471C-8540-3B73094111EC} DLL注册函数名&#xff1a;DllRegisterServer 删除注册函数名&#xff1a;DllUnregisterServer 过滤器有1个…

C语言中函数的实参和形参

本文主要叙述C语言中函数的实参和形参的概念和区别。 实参&#xff08;实际参数&#xff09; 实参是在函数调用时提供的具体值或变量&#xff0c;它们被传递给函数以供函数内部使用。实参可以是常量、变量、表达式或其他函数的返回值。实参在函数调用时被传递给形参&#xff…

嵌入式常用功能之通讯协议1--IIC

嵌入式常用功能之通讯协议1--串口 嵌入式常用功能之通讯协议1--IIC&#xff08;本文&#xff09; 嵌入式常用功能之通讯协议1--SPI 一、IIC总线协议介绍 Inter-Integrated Circuit(集成电路总线&#xff09;&#xff0c;是由 Philips 半导体公司&#xff08;现在的 NXP 半导体…