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

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 开发工作。

http://www.xdnf.cn/news/5835.html

相关文章:

  • Stapi知识框架
  • ubuntu---100条常用命令
  • C++GO语言微服务之数据卷实践
  • 分式注记种表达方式arcgis
  • 大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比
  • 华为海思系列----昇腾张量编译器(ATC)模型转换工具----入门级使用指南(LINUX版)
  • AD PCB布局时常用的操作命令
  • Python作业练习2
  • Go语言——docker-compose部署etcd以及go使用其服务注册
  • Spark处理过程—转换算子
  • 0.66kV0.69kV接地电阻柜常规配置单
  • 仓颉Magic亮相GOSIM AI Paris 2025:掀起开源AI框架新热潮
  • 裸金属服务器 VS 传统物理机
  • 鸿蒙next播放B站视频横屏后的问题
  • Linux之进程控制
  • 【Linux网络】HTTPS
  • k8s v1.26 实战csi-nfs 部署
  • 深度剖析:Vue2 项目兼容第三方库模块格式的终极解决方案
  • 无人机俯视风光摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!
  • MATLAB语音情感识别神经网络方法
  • 中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
  • yolo11n-obb训练rknn模型
  • 贪心算法:最小生成树
  • 【Qt】之音视频编程1:QtAV的背景和安装篇
  • 蓝桥杯12届国B 纯质数
  • git Authentication failed for 的解决办法
  • 重构门店网络:从“打补丁“到“造地基“的跨越
  • IDEA查看类结构视图窗口,接口的所有的实现类图
  • Python爬虫常用项
  • Spring @Transactional事务传播机制与MySQL事务原理解析