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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值