5月15日java web学习笔记
会话管理技术
Cookie 技术
Cookie 原理 :Cookie 是存储在客户端的小段文本信息,由服务器端生成并发送给客户端,客户端在后续请求中会自动携带 Cookie 信息发送给服务器,实现会话跟踪。
Cookie 操作
创建 Cookie :Cookie cookie = new Cookie(name, value); ,指定 Cookie 名称和值。
设置 Cookie 属性 :cookie.setMaxAge(seconds); 设置 Cookie 的有效期(以秒为单位),cookie.setPath(path); 设置 Cookie 的作用路径等。
发送 Cookie :通过 response.addCookie(cookie); 将 Cookie 添加到响应中,发送给客户端。
获取 Cookie :在请求中通过 request.getCookies(); 获取客户端携带的所有 Cookie,以数组形式返回,然后遍历数组查找指定名称的 Cookie 获取其值。
删除 Cookie :设置 Cookie 的最大生存时间为负值或 0,再次将该 Cookie 发送给客户端即可实现删除。
Cookie 的局限性 :Cookie 的数据存储在客户端,容易被客户端篡改,且浏览器对 Cookie 的数量和大小有限制,不适合存储大量敏感信息。
Session 技术
Session 原理 :服务器为每个客户端会话分配一个唯一的 Session 对象,用于存储会话相关的数据。客户端通过 Cookie(默认情况下)或 URL 重写等方式携带 Session ID 与服务器进行交互,服务器根据 Session ID 找到对应的 Session 对象,实现会话跟踪。
Session 操作
获取 Session :HttpSession session = request.getSession(); ,如果客户端没有对应的 Session,则服务器会创建一个新的 Session 对象。
存储数据到 Session :session.setAttribute(name, value); ,将数据以键值对形式存储到 Session 中。
从 Session 获取数据 :session.getAttribute(name); 根据键获取对应的值。
删除 Session 数据 :session.removeAttribute(name); 删除指定键对应的数据。
销毁 Session :session.invalidate(); 销毁整个 Session 对象。
Session 的应用场景与注意事项 :适合存储用户登录状态、购物车等会话信息。需要注意合理设置 Session 的超时时间(通过 setMaxInactiveInterval 方法),避免服务器内存资源被过多占用,同时在分布式环境下需考虑 Session 的共享问题。
数据库操作技术
JDBC 基础
JDBC 概述 :Java Database Connectivity,用于在 Java 程序中连接和操作数据库的 API,提供了一套标准的接口和类。
JDBC 数据库连接步骤
加载数据库驱动 :Class.forName("数据库驱动类名"); ,如 MySQL 数据库驱动为 com.mysql.cj.jdbc.Driver 。
建立数据库连接 :Connection conn = DriverManager.getConnection(url, username, password); ,其中 url 为数据库连接地址,username 和 password 为数据库登录用户名和密码。
创建 SQL 语句对象 :使用 conn.createStatement(); 创建 Statement 对象,用于执行 SQL 语句;或使用 conn.prepareStatement(sql); 创建 PreparedStatement 对象,用于执行预编译的 SQL 语句,防止 SQL 注入。
执行 SQL 语句 :Statement.executeQuery(sql); 用于执行查询操作,返回 ResultSet 结果集;Statement.executeUpdate(sql); 用于执行插入、更新、删除操作,返回影响的行数。
处理结果集 :对于查询操作,通过遍历 ResultSet 对象获取查询结果数据。
关闭连接 :按顺序关闭 ResultSet、Statement 和 Connection 对象,释放数据库资源。
JDBC 的问题与改进方向 :JDBC 编程中存在代码繁琐、资源管理容易出错、SQL 与 Java 代码混杂等问题,后续可学习使用 MyBatis 等 ORM 框架进行简化和优化。
数据库连接池技术
连接池原理 :连接池预先创建并维护一定数量的数据库连接,当应用需要进行数据库操作时,从连接池获取一个空闲连接,使用完毕后将连接归还给连接池,而不是每次操作都创建和关闭连接,从而提高数据库访问效率,减少系统资源开销。
常见的连接池 :如 DBCP(Data Base Connection Pool)、C3P0、HikariCP 等,这些连接池提供了不同的配置参数和性能特点。
使用连接池配置数据库连接示例 :以 DBCP 为例,先在项目中引入 DBCP 的依赖包,然后通过配置文件或代码设置连接池参数(如驱动类名、数据库 URL、用户名、密码、最大连接数、最小空闲连接数等),最后从连接池获取 Connection 对象进行数据库操作,在操作完成后将连接归还给连接池。
常用开发工具与框架介绍
Maven 项目管理工具
Maven 的优势 :简化 Java 项目的构建、依赖管理和项目信息管理,通过统一的项目对象模型(POM)进行项目配置,实现项目的一键构建、自动化测试、部署等。
Maven 的基本概念
POM.xml 文件 :项目的配置文件,包含项目的坐标(groupId、artifactId、version)、依赖信息、插件配置等。
项目坐标 :唯一标识一个项目或项目中的某个模块,格式为 groupId:artifactId:version,如 com.example:myproject:1.0.0 。
依赖管理 :在 POM.xml 文件的
Maven 坐标与仓库 :Maven 仓库是存储项目依赖的仓库,分为本地仓库、远程仓库(中央仓库、私有仓库等)。Maven 根据项目坐标从仓库中查找和下载依赖。
Maven 常用命令
mvn clean :清理项目的编译输出目录,删除之前编译生成的文件。
mvn compile :编译项目的源代码,但不执行测试和打包。
mvn test :执行项目的测试代码,默认使用 JUnit 进行测试。
mvn package :编译项目并打包成可部署的 JAR、WAR 等格式,同时运行测试。
mvn install :将打包好的项目安装到本地 Maven 仓库,供其他项目引用。
mvn deploy :将项目部署到远程仓库,供团队共享和使用。
Maven 仓库的配置与管理 :可通过配置文件(如 settings.xml)设置本地仓库位置、远程仓库的访问地址和认证信息,以便 Maven 正确下载和上传依赖。同时,也可以使用 Nexus、Artifactory 等私有仓库工具搭建企业内部的 Maven 仓库,方便团队管理和分发项目依赖。
Spring Framework 框架基础
Spring 框架概述 :Spring 是一个轻量级的 Java 开发框架,提供了全面的编程和配置模型,用于开发企业级 Java 应用。Spring 框架的核心功能包括依赖注入(DI)、面向切面编程(AOP)、数据访问抽象、Web 层集成等,旨在简化 Java 企业级应用开发,提高代码的可测试性和可维护性。
Spring 的依赖注入(DI)
DI 的概念 :依赖注入是一种设计模式,通过将对象的依赖关系在创建时由外部注入,而不是对象自己创建依赖对象,从而实现对象之间的松耦合。常见的注入方式有通过构造函数注入、通过 Setter 方法注入等。
Spring DI 的实现方式
基于 XML 配置文件的 DI :在 Spring 的配置文件(如 applicationContext.xml)中,使用
xml
@Service
public class UserService {
@Autowired
private UserDAO userDAO;
// ...
}
Spring 的面向切面编程(AOP)
AOP 的概念 :AOP 是一种编程范式,用于将横切关注点(如日志记录、事务管理、安全检查等)从业务逻辑代码中分离出来,通过统一的切面进行模块化处理,提高代码的可复用性和可维护性。
Spring AOP 的实现方式 :Spring AOP 通过代理模式实现,可以基于 XML 配置或注解来定义切面、切入点和通知(如前置通知、后置通知、环绕通知等)。例如,使用注解定义一个日志切面:
java
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service..(..))")
public void beforeLogging(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
@After("execution(* com.example.service.*.*(..))")
public void afterLogging(JoinPoint joinPoint) {
System.out.println("After method: " + joinPoint.getSignature().getName());
}
}
Spring 的数据访问支持 :Spring 提供了对 JDBC 的封装(如 JdbcTemplate),简化了数据库操作代码,提供了统一的异常层次结构,方便异常处理。同时,Spring 还与 Hibernate、MyBatis 等 ORM 框架无缝集成,支持事务管理等功能。
Spring MVC 框架基础
Spring MVC 概述 :Spring MVC 是 Spring 框架中用于构建 Web 应用的模块,采用 MVC(Model-View-Controller)架构模式,将 Web 应用分为模型(Model)、视图(View)和控制器(Controller)三层,实现代码的分离和复用,便于开发和维护。
Spring MVC 的工作流程
前端控制器(DispatcherServlet) :作为整个 Web 应用的入口,接收所有的 HTTP 请求,并根据请求的 URL 和配置信息将请求分发给相应的处理器(Controller)。
处理器映射(HandlerMapping) :负责根据请求的 URL 查找对应的处理器(Controller)和拦截器(Interceptor)。
处理器适配器(HandlerAdapter) :执行处理器(Controller)的方法,处理业务逻辑,并返回一个 ModelAndView 对象,其中包含模型数据和视图名称。
视图解析器(ViewResolver) :根据视图名称解析为具体的视图实现(如 JSP 页面),将模型数据填充到视图中,并返回最终的响应结果给客户端。
Spring MVC 的配置与开发
基于 XML 配置文件的配置 :在 web.xml 中配置 DispatcherServlet,Spring MVC 的配置文件(如 spring-mvc.xml)中定义 HandlerMapping、HandlerAdapter、ViewResolver 等组件。例如:
xml
<context:component-scan base-package="com.example.controller"/>
基于注解的配置 :使用 @Controller 注解标识控制器类,@RequestMapping 注解映射请求 URL 到控制器方法,@ModelAttribute、@RequestParam 等注解用于处理请求参数,@ResponseBody 注解返回 JSON 或 XML 数据。例如:
java
@Controller
public class UserController {
@RequestMapping("/user/list")
public String listUsers(Model model) {
List
model.addAttribute("users", users);
return "userList"; // 视图名称
}
@RequestMapping("/user/get/{id}")
@ResponseBody
public User getUser(@PathVariable("id") Long id) {
User user = // 根据 id 获取用户对象
return user; // 直接返回 JSON 数据
}
}
Spring MVC 的优点 :与 Spring 框架无缝集成,支持依赖注入和面向切面编程,方便进行单元测试;提供了强大的数据绑定、类型转换、表单标签库等功能,简化 Web 开发;支持多种视图技术(如 JSP、Freemarker、Thymeleaf 等)和多种数据格式(如 JSON、XML 等)的返回,具有良好的灵活性和扩展性。
浙公网安备 33010602011771号