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

JavaWeb 开发的核心基础知识

JavaWeb 基础知识

一、JavaWeb 概述

1. 什么是 JavaWeb

  • 使用 Java 技术解决 Web 领域相关问题的技术总和
  • 基于请求/响应模型的应用程序开发

2. 核心组件

  • Servlet:处理请求和响应的 Java 类
  • JSP:Java Server Pages,动态页面技术
  • Filter:过滤器,预处理请求和后处理响应
  • Listener:监听器,监听 Web 应用中的事件

二、Servlet 技术

1. Servlet 基础

  • 生命周期
    • init():初始化,只执行一次
    • service():处理请求(内部调用 doGet/doPost)
    • destroy():销毁,只执行一次
  • 常用类
    • HttpServlet:抽象基类
    • HttpServletRequest:请求对象
    • HttpServletResponse:响应对象

2. Servlet 配置

  • web.xml 配置

    <servlet><servlet-name>DemoServlet</servlet-name><servlet-class>com.example.DemoServlet</servlet-class>
    </servlet>
    <servlet-mapping><servlet-name>DemoServlet</servlet-name><url-pattern>/demo</url-pattern>
    </servlet-mapping>
    
  • 注解配置(Servlet 3.0+):

    @WebServlet("/demo")
    public class DemoServlet extends HttpServlet {...}
    

3. 请求与响应

  • 获取请求参数

    String username = request.getParameter("username");
    String[] hobbies = request.getParameterValues("hobby");
    
  • 设置响应

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.println("<html><body>Hello World</body></html>");
    

三、JSP 技术

1. JSP 基础

  • JSP 本质:最终会被编译为 Servlet
  • JSP 组成
    • HTML 代码
    • Java 代码(脚本、表达式、声明)
    • JSP 指令和动作

2. JSP 脚本元素

  • 脚本片段<% Java代码 %>
  • 表达式<%= 表达式 %>(输出表达式结果)
  • 声明<%! 变量或方法声明 %>

3. JSP 指令

  • page 指令

    <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*" %>
    
  • include 指令(静态包含):

    <%@ include file="header.jsp" %>
    
  • taglib 指令(引入标签库):

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

4. JSP 内置对象

对象名类型说明
requestHttpServletRequest请求对象
responseHttpServletResponse响应对象
sessionHttpSession会话对象
applicationServletContext应用上下文
outJspWriter输出流
pageContextPageContext页面上下文
pageObject当前页面实例
configServletConfigServlet 配置
exceptionThrowable异常对象(仅错误页可用)

四、会话跟踪技术

1. Cookie

  • 创建 Cookie

    Cookie cookie = new Cookie("name", "value");
    cookie.setMaxAge(60*60*24); // 有效期1天
    response.addCookie(cookie);
    
  • 读取 Cookie

    Cookie[] cookies = request.getCookies();
    for (Cookie c : cookies) {if ("name".equals(c.getName())) {String value = c.getValue();}
    }
    

2. Session

  • 获取 Session

    HttpSession session = request.getSession(); // 获取或创建
    HttpSession session = request.getSession(false); // 只获取不创建
    
  • Session 操作

    session.setAttribute("user", userObj); // 设置属性
    User user = (User)session.getAttribute("user"); // 获取属性
    session.removeAttribute("user"); // 移除属性
    session.invalidate(); // 销毁Session
    

五、Filter 过滤器

1. Filter 基础

  • 作用:在请求到达 Servlet 前或响应返回客户端前进行预处理/后处理
  • 生命周期
    • init():初始化
    • doFilter():过滤处理
    • destroy():销毁

2. Filter 配置

  • web.xml 配置

    <filter><filter-name>EncodingFilter</filter-name><filter-class>com.example.EncodingFilter</filter-class>
    </filter>
    <filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • 注解配置

    @WebFilter("/*")
    public class EncodingFilter implements Filter {...}
    

3. 常见应用场景

  • 字符编码过滤
  • 权限验证
  • 日志记录
  • 数据压缩

六、Listener 监听器

1. 监听器类型

  • ServletContext 监听器
    • ServletContextListener:应用启动/销毁
    • ServletContextAttributeListener:属性变化
  • Session 监听器
    • HttpSessionListener:Session创建/销毁
    • HttpSessionAttributeListener:Session属性变化
    • HttpSessionBindingListener:对象绑定到Session
  • Request 监听器
    • ServletRequestListener:请求创建/销毁
    • ServletRequestAttributeListener:请求属性变化

2. 监听器配置

  • web.xml 配置

    <listener><listener-class>com.example.MyListener</listener-class>
    </listener>
    
  • 注解配置

    @WebListener
    public class MyListener implements ServletContextListener {...}
    

七、JSTL 与 EL 表达式

1. EL 表达式(Expression Language)

  • 语法${expression}

  • 作用:简化 JSP 页面中的 Java 代码

  • 示例

    ${user.name} <!-- 相当于 <%= ((User)request.getAttribute("user")).getName() %> -->
    ${param.username} <!-- 获取请求参数 -->
    ${sessionScope.cart} <!-- 获取session中的属性 -->
    

2. JSTL(JSP Standard Tag Library)

  • 核心标签库(prefix=“c”):

    <c:set var="name" value="value" scope="session"/> <!-- 设置变量 -->
    <c:out value="${name}"/> <!-- 输出 -->
    <c:if test="${age > 18}">成年</c:if> <!-- 条件判断 -->
    <c:forEach items="${list}" var="item" varStatus="status"> <!-- 循环 -->${status.index}: ${item}
    </c:forEach>
    

八、MVC 设计模式

1. MVC 组成

  • Model:数据模型(JavaBean、DAO、Service)
  • View:视图(JSP、HTML)
  • Controller:控制器(Servlet)

2. MVC 工作流程

  1. 用户发送请求到控制器(Servlet)
  2. 控制器调用模型(Service/DAO)处理业务逻辑
  3. 模型返回处理结果给控制器
  4. 控制器选择视图(JSP)并传递数据
  5. 视图渲染响应返回给用户

九、数据库访问(JDBC)

1. JDBC 基本步骤

// 1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");// 2. 获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");// 3. 创建Statement
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id=?");// 4. 设置参数并执行
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();// 5. 处理结果集
while (rs.next()) {String name = rs.getString("name");// ...
}// 6. 关闭资源
rs.close();
ps.close();
conn.close();

2. 数据库连接池

  • 常见连接池

    • DBCP
    • C3P0
    • Druid(阿里开源)
  • 使用示例(以Druid为例):

    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/dbname");
    dataSource.setUsername("username");
    dataSource.setPassword("password");Connection conn = dataSource.getConnection();
    // 使用连接...
    conn.close(); // 实际是返回到连接池
    

十、AJAX 与 JSON

1. AJAX 基础

  • XMLHttpRequest 对象

    var xhr = new XMLHttpRequest();
    xhr.open("GET", "url", true);
    xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {var data = JSON.parse(xhr.responseText);// 处理响应数据}
    };
    xhr.send();
    
  • jQuery AJAX

    $.ajax({url: "url",type: "GET/POST",data: {key: value},dataType: "json",success: function(data) {...},error: function() {...}
    });
    

2. JSON 处理

  • Java 对象转 JSON(使用 Jackson):

    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(user); // 对象转JSON字符串
    User user = mapper.readValue(json, User.class); // JSON字符串转对象
    
  • JSP 中输出 JSON

    response.setContentType("application/json;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.print(json);
    out.flush();
    

十一、文件上传与下载

1. 文件上传

  • 表单设置

    <form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传">
    </form>
    
  • Servlet 处理(使用 Apache Commons FileUpload):

    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = upload.parseRequest(request);for (FileItem item : items) {if (!item.isFormField()) { // 文件字段String fileName = item.getName();File file = new File("上传路径", fileName);item.write(file);}
    }
    

2. 文件下载

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);
}in.close();
out.flush();

十二、Web 安全基础

1. 常见安全问题

  • SQL 注入:使用 PreparedStatement 预防
  • XSS 跨站脚本攻击:对用户输入进行 HTML 转义
  • CSRF 跨站请求伪造:使用 token 验证
  • 会话固定攻击:登录后重置 sessionId

2. 安全措施

  • 密码加密

    // 使用MD5加密(需加盐)
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] hash = md.digest((password + salt).getBytes());
    
  • 权限控制:使用 Filter 进行访问控制

  • HTTPS:配置 SSL 证书

以上是 JavaWeb 开发的核心基础知识,掌握这些内容可以胜任基本的 JavaWeb 开发工作。

相关文章:

  • 2025-05-13 学习记录--Python-条件判断:if语句 + if-else语句 + if-elif-else语句 + match语句
  • 码蹄集——分解、数组最大公约数、孪生质数、卡罗尔数、阶乘数
  • The Deep Learning Compiler: A Comprehensive Survey (深度学习编译器:全面调查)
  • py7zr解压文件时报错CrcError(crc32, f.crc32, f.filename)
  • Kubernetes 入门笔记
  • 磁盘存储链式的 B 树与 B+ 树
  • 数据库原理实验:视图与索引
  • Python训练打卡Day23
  • Biba安全模型详解:守护信息系统完整性的基石
  • 网络安全-等级保护(等保) 2-3 GB/T 22240—2020《信息安全技术 网络安全等级保护定级指南》-2020-04-28发布【现行】
  • JAVA:synchronized总结
  • 大模型核心运行机制
  • C语言中的宏
  • Prometheus参数配置最佳实践
  • P1032 [NOIP 2002 提高组] 字串变换
  • shell脚本变量详解
  • 【WebApi】YiFeiWebApi接口安装说明
  • python: union()函数用法
  • uniapp+vue3开发项目之引入vuex状态管理工具
  • 内存泄漏系列专题分析之十三:高通相机CamX内存泄漏内存占用分析--Camx pipeline的ION内存拆解方法
  • 泽连斯基:将带领乌代表团前往土耳其,已准备好与普京会谈
  • 学者的“好运气”:读本尼迪克特·安德森《椰壳碗外的人生》
  • 2025年上海科技节5月17日启动,56家重点实验室和大科学设施将向公众开放
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号
  • 海北州委常委、常务副州长桑本履新青海省供销社理事会主任
  • 张笑宇:物质极大丰富之后,我们该怎么办?