JavaEE入门:新手必读指南
本文全面介绍了JavaEE入门的相关知识,涵盖了JavaEE的基本概念、核心组件、开发环境搭建和框架使用等内容。通过学习,读者可以了解如何搭建开发环境并使用Spring、Hibernate和Struts等框架进行JavaEE项目开发。文章还提供了实战项目开发流程和常见问题解决方法,帮助读者更好地掌握JavaEE开发技巧。JavaEE入门不仅介绍了理论知识,还包含了实际操作的详细步骤。
JavaEE简介JavaEE(Java Enterprise Edition)是Java平台的一部分,专门用于构建大规模的企业级应用程序。它提供了一系列的API和服务,帮助开发者高效地开发、部署和管理基于Java的应用程序。JavaEE不仅支持传统的Web应用开发,还可以用于开发移动应用、云应用等。
什么是JavaEE
JavaEE是一个定义了企业级应用程序开发标准的平台。它提供了一个开发和部署应用程序的框架,允许应用程序在不同的环境中运行。JavaEE应用程序不仅可以在Web服务器中运行,还可以在应用服务器中运行。这使得JavaEE应用程序可以更高效地进行资源利用,提高应用程序的可扩展性和可靠性。
JavaEE的核心组件
JavaEE包括多种核心组件,这些组件共同构成了JavaEE的框架。以下是JavaEE的核心组件:
-
Servlet API: Servlet是运行在服务器端的Java程序,用于处理客户端的请求和响应。Servlet API定义了处理请求和响应的基本接口。
-
JSP (JavaServer Pages): JSP是一种动态网页技术,允许将Java代码嵌入到HTML中。JSP页面被转换为Servlet,当有请求时,Servlet被调用来生成HTML页面。
-
EJB (Enterprise JavaBeans): EJB是为了构建企业级Java应用程序而设计的组件模型。它提供了业务逻辑的封装,帮助开发者实现事务处理和安全控制。
-
JavaMail API: JavaMail API提供了发送和接收电子邮件的功能。
-
Java API for XML (JAX): JAX是关于XML处理的API,包括JAX-RS(基于REST的Web服务)、JAX-WS(Web服务)等。
-
Java Persistence API (JPA): JPA提供了一种标准的ORM(对象关系映射)框架,帮助开发者更方便地与数据库进行交互。
- JavaServer Faces (JSF): JSF是一种用于构建Web应用程序的框架,它简化了Web应用程序的开发。
JavaEE的优势和应用场景
JavaEE的优势包括:
- 跨平台性: JavaEE应用程序可以在多种操作系统上运行,这使得JavaEE应用程序具有很好的可移植性。
- 可靠性: JavaEE提供了多种机制来保证应用程序的稳定运行,如事务管理、安全性控制等。
- 可扩展性: JavaEE应用程序可以很容易地扩展,以适应业务需求的变化。
JavaEE的应用场景包括:
- 电子商务: JavaEE可以用于构建复杂的电子商务平台,支持大量的用户访问和交易处理。
- 金融服务: JavaEE在金融领域有广泛的应用,如证券交易系统、银行系统等。
- 医疗健康: JavaEE可以用于构建复杂的医疗管理系统,如电子病历系统、预约挂号系统等。
为了开始JavaEE开发,首先需要搭建一个适合的开发环境。这包括安装Java开发工具(JDK)、配置开发环境(选择并配置IDE)、以及安装并配置应用服务器(如Tomcat)。
安装Java开发工具(JDK)
JDK(Java Development Kit)是Java开发工具包,包含了Java开发所需的所有工具和库。以下是安装JDK的步骤:
- 访问Oracle官方网站或使用第三方提供者如OpenJDK下载页面下载JDK安装包。
- 运行安装包,按照安装向导的提示完成安装。
- 设置环境变量。在安装完成后,需要设置环境变量
JAVA_HOME
和PATH
,以便操作系统能够找到Java工具的位置。
例如,在Windows环境下设置环境变量可以按照以下步骤进行:
- 找到安装JDK的路径,假设为
C:\Program Files\Java\jdk-17
- 右键点击“此电脑”,选择“属性”
- 点击“高级系统设置”,在“系统属性”的“高级”标签下点击“环境变量”
- 在“系统变量”列表中,点击“新建”,输入变量名
JAVA_HOME
,变量值为C:\Program Files\Java\jdk-17
- 在“系统变量”列表中,找到
Path
,点击“编辑”,在末尾添加;%JAVA_HOME%\bin
配置开发环境(IDE选择与配置)
IDE(Integrated Development Environment)是一个支持全面的软件开发的环境,它包括源代码编辑器、构建工具、调试器等多种功能。以下步骤说明如何选择和配置IDE。
选择IDE
目前常用的Java开发IDE包括Eclipse、IntelliJ IDEA、和NetBeans等。Eclipse是一个开放源代码的Java开发环境,适合初学者使用;而IntelliJ IDEA则提供了更强大的功能,适合高级开发人员使用。这里以Eclipse为例进行说明。
安装Eclipse
- 访问Eclipse官方网站,从下载页面选择合适的版本进行下载。
- 运行下载好的安装包,按照向导完成安装。
- 打开Eclipse,选择菜单
File
->New
->Java Project
(新建Java项目)。 - 输入项目名称,点击完成。
配置Eclipse
为了更好地支持JavaEE开发,需要在Eclipse中安装一些插件。
- 打开Eclipse,点击菜单
Help
->Eclipse Marketplace
。 - 在搜索框中输入
JavaEE
,找到相关的插件并安装。 - 安装完成后,重启Eclipse,即可使用JavaEE相关功能。
安装并配置应用服务器(如Tomcat)
Tomcat是一个开源的Web服务器,专门用于运行Java应用程序。以下是安装并配置Tomcat的步骤:
- 访问Tomcat官方网站,下载最新版本的Tomcat安装包。
- 解压下载的安装包到指定目录,假设为
C:\Tomcat
。 - 设置环境变量。在系统环境变量中,添加
CATALINA_HOME
,值为C:\Tomcat
。 -
配置Tomcat。打开
C:\Tomcat\conf
目录下的server.xml
文件,修改<Connector>
标签中的port
属性,确保与端口号不冲突。例如:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 运行Tomcat。在命令行窗口输入命令
C:\Tomcat\bin\startup.bat
启动Tomcat。
JavaEE提供了丰富的API和框架,帮助开发者高效地开发企业级应用。理解和掌握这些基本概念对于后续的开发非常重要。本节将介绍JavaWeb基础、Servlet与JSP、以及JavaBean与标签库。
JavaWeb基础
JavaWeb是基于Java开发的Web应用。JavaWeb应用运行在Web服务器上,通过HTTP协议与浏览器通信。JavaWeb应用通常由HTML、CSS、JavaScript等客户端技术与JavaServer Pages (JSP)、Servlet等服务器端技术组成。
Servlet
Servlet是一个运行在服务器端的Java程序,用于处理客户端的请求和响应。Servlet API定义了处理请求和响应的基本接口。以下是一个简单的Servlet示例代码:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, World!</h1>");
}
}
在上面的代码中,doGet
方法处理GET请求。当有请求到达时,doGet
方法会被调用,响应的内容被写入到response
对象中。
JSP
JSP(JavaServer Pages)是一种动态网页技术,允许将Java代码嵌入到HTML中。JSP页面被转换为Servlet,当有请求时,Servlet被调用来生成HTML页面。以下是一个简单的JSP示例代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello, World!</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
在上面的代码中,<%@ page ... %>
指令声明了该页面使用的脚本语言、内容类型等信息。<%@ page ... %>
指令是JSP页面中常见的指令之一,用于设置页面属性。
Servlet与JSP的交互
Servlet和JSP可以相互协作,共同完成Web应用的功能。例如,Servlet可以处理请求,获取数据,然后将数据传递给JSP页面进行显示。
示例代码
以下是一个Servlet将数据传递给JSP页面的示例代码:
Servlet部分
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DataServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String message = "Hello, World!";
request.setAttribute("message", message);
request.getRequestDispatcher("/display.jsp").forward(request, response);
}
}
在上面的代码中,doGet
方法将数据message
设置为请求属性,并通过requestDispatcher
将请求转发给JSP页面display.jsp
。
JSP部分
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Data Display</title>
</head>
<body>
<h1>${requestScope.message}</h1>
</body>
</html>
在上面的JSP代码中,${requestScope.message}
表示从请求属性中获取名为message
的值。
JavaBean与标签库
JavaBean是一种符合特定规范的Java类,通常用于封装数据。JavaBean的属性通常是私有的,并通过公共方法(getter和setter方法)进行访问。以下是一个简单的JavaBean示例代码:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在上面的代码中,Person
类有两个私有属性name
和age
,并通过公共方法getName
、setName
、getAge
和setAge
进行访问。
标签库
标签库是JSP的一个扩展功能,允许开发者定义自定义标签,以更简洁的方式编写JSP页面。通过使用标签库,可以减少代码冗余,提高开发效率。以下是一个简单的标签库的使用示例代码:
标签库定义
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
在上面的代码中,<%@ taglib ... %>
指令声明了标签库URI和前缀。c
是标签库的前缀,可以用于引用标签库中的标签。
标签库使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Tag Library Example</title>
</head>
<body>
<c:forEach var="item" items="${items}">
<p>${item}</p>
</c:forEach>
</body>
</html>
在上面的代码中,<c:forEach>
标签用于循环遍历集合中的元素。
JavaEE框架提供了丰富的功能,帮助开发者更高效地开发企业级应用。本节将介绍Spring框架、Hibernate框架、以及Struts框架的基本使用方法。
Spring框架简介与简单使用
Spring是一个开源的Java框架,主要用于构建企业级Java应用。Spring框架提供了IoC(控制反转)和AOP(面向切面编程)等核心功能,简化了开发过程。
IoC与AOP
- IoC(控制反转): IoC是一种设计模式,将对象的创建和依赖管理从应用程序代码中分离出来,由框架来管理。IoC的核心思想是将创建对象的责任交给框架,使得对象之间的依赖关系更加清晰和松散。
- AOP(面向切面编程): AOP是一种编程技术,通过将横切关注点(如日志、事务管理等)以切面的形式与业务逻辑代码分离,使得业务逻辑代码更加清晰、简洁。
Spring核心容器
Spring的核心容器是Spring框架的基础,提供了IoC容器和依赖注入的功能。以下是一个简单的Spring配置文件示例:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.example.Person">
<property name="name" value="John"/>
<property name="age" value="30"/>
</bean>
</beans>
在上面的代码中,<bean>
标签定义了一个名为person
的JavaBean,id
属性是Bean的唯一标识,class
属性是Bean的类名。<property>
标签用于设置Bean的属性值。
Spring MVC
Spring MVC是Spring框架的一部分,是一个基于MVC架构的Web应用框架。以下是一个简单的Spring MVC控制器示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloWorldController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello, World!";
}
}
在上面的代码中,@Controller
注解用于标记该类为控制器类,@GetMapping
注解用于标记该方法为处理GET请求的方法,@ResponseBody
注解用于将响应内容直接写入响应体中。
Hibernate与数据库交互
Hibernate是一个持久化层框架,用于实现对象关系映射(ORM)。Hibernate通过将数据库中的表映射为Java类,简化了数据库操作。
Hibernate的基本使用
以下是一个简单的Hibernate配置文件示例:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration Document//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.example.Person"/>
</session-factory>
</hibernate-configuration>
在上面的代码中,<session-factory>
标签定义了Hibernate会话工厂,<property>
标签用于配置数据库连接信息。<mapping>
标签用于指定映射文件或类。
Hibernate映射文件
以下是一个简单的Hibernate映射文件示例:
<hibernate-mapping>
<class name="com.example.Person" table="person">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="integer"/>
</class>
</hibernate-mapping>
在上面的代码中,<class>
标签定义了一个Java类,<id>
标签用于定义主键,<property>
标签用于定义属性。
Hibernate持久化示例
以下是一个简单的Hibernate持久化示例,用于演示如何保存、查询和更新数据:
import com.example.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person();
person.setName("John");
person.setAge(30);
session.save(person);
session.getTransaction().commit();
session.close();
// 查询数据
session = sessionFactory.openSession();
session.beginTransaction();
Person result = session.get(Person.class, 1L);
System.out.println("Name: " + result.getName() + ", Age: " + result.getAge());
session.getTransaction().commit();
session.close();
// 更新数据
session = sessionFactory.openSession();
session.beginTransaction();
result.setName("Jane");
session.update(result);
session.getTransaction().commit();
session.close();
// 删除数据
session = sessionFactory.openSession();
session.beginTransaction();
session.delete(person);
session.getTransaction().commit();
session.close();
}
}
在上面的代码中,save
方法用于保存新对象,get
方法用于查询已存在的对象,update
方法用于更新对象,delete
方法用于删除对象。
Struts框架简介与简单应用
Struts是一个基于MVC架构的Web应用框架,它简化了Web应用的开发过程。Struts提供了丰富的标签库和插件,使得开发更加高效。
Struts配置文件
以下是一个简单的Struts配置文件示例:
<struts>
<constant name="struts.enable.SSL" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.example.HelloWorldAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
在上面的代码中,<package>
标签定义了一个包,<action>
标签定义了一个动作,<result>
标签定义了一个结果。
Struts动作类
以下是一个简单的Struts动作类示例:
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String message;
public String execute() throws Exception {
message = "Hello, World!";
return SUCCESS;
}
public String getMessage() {
return message;
}
}
在上面的代码中,execute
方法用于处理动作逻辑,getMessage
方法用于获取动作结果。
本节将介绍JavaEE项目开发的具体流程,包括静态资源与动态资源的处理、数据持久化与事务管理。
JavaEE项目开发流程概述
JavaEE项目开发通常包括以下几个步骤:
- 需求分析: 确定项目的功能需求和非功能需求。
- 系统设计: 设计系统的架构、数据库结构、业务流程等。
- 编码实现: 使用JavaEE相关技术实现项目的各个模块。
- 单元测试: 对实现的模块进行单元测试,确保代码的正确性。
- 集成测试: 将各个模块集成在一起进行测试,确保系统的整体功能。
- 部署测试: 在实际环境中部署系统,进行全面的部署测试。
- 上线运行: 将系统部署到生产环境,提供服务。
静态资源与动态资源的处理
在JavaEE项目中,资源可以分为静态资源(如HTML、CSS、JavaScript等)和动态资源(如Servlet、JSP等)。
静态资源处理
静态资源通常由Web服务器直接处理,不需要经过Java代码。以下是一个简单的静态资源处理示例:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/css/*")
public class StaticResourceServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getPathInfo();
String filePath = "/WEB-INF/resources" + path;
response.setContentType("text/css");
response.getWriter().println(getServletContext().getResourceAsStream(filePath));
}
}
在上面的代码中,@WebServlet("/css/*")
注解表示该Servlet处理以/css
开头的所有请求。pathInfo
属性表示请求路径,getServletContext().getResourceAsStream
方法从/WEB-INF/resources
目录下读取静态资源文件。
动态资源处理
动态资源由Java代码处理,通常由Servlet或JSP页面完成。以下是一个简单的动态资源处理示例:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, World!</h1>");
}
}
在上面的代码中,@WebServlet("/hello")
注解表示该Servlet处理以/hello
开头的所有请求。doGet
方法处理GET请求,将响应内容写入response
对象中。
数据持久化与事务管理
数据持久化是将数据存储到数据库中的过程,事务管理是确保数据的一致性、完整性的机制。
数据持久化
以下是一个简单的数据持久化示例:
import com.example.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person();
person.setName("John");
person.setAge(30);
session.save(person);
session.getTransaction().commit();
session.close();
}
}
在上面的代码中,SessionFactory
用于创建Session
对象,Session
对象用于执行数据库操作。beginTransaction
方法开始一个新的事务,save
方法将对象持久化到数据库,commit
方法提交事务。
事务管理
以下是一个简单的事务管理示例,展示了如何处理数据库的回滚和提交:
import com.example.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
try {
session.beginTransaction();
Person person = new Person();
person.setName("John");
person.setAge(30);
session.save(person);
// 模拟数据库错误
int x = 1 / 0;
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
在上面的代码中,如果发生异常,事务将被回滚,确保数据的一致性。
常见问题与调试技巧在JavaEE开发过程中,可能会遇到各种各样的问题。本节将介绍一些常见的错误及其解决方法,调试技巧与实践,以及性能优化入门。
常见错误及其解决方法
404错误
现象: 试图访问一个不存在的资源,服务器返回404错误。
原因: Servlet映射错误或资源路径错误。
解决方法: 检查web.xml
文件中的<servlet-mapping>
配置,确保路径和Servlet类名匹配。
500错误
现象: 服务器返回500错误,通常是由于服务器端代码错误。
原因: 代码中存在未捕获的异常。
解决方法: 检查异常堆栈信息,定位并修复问题。
ClassNotFound错误
现象: 服务器启动失败,抛出ClassNotFoundException
。
原因: 类路径配置错误。
解决方法: 检查web.xml
文件中的<class>
标签配置,确保类路径正确。
调试技巧与实践
打印日志
使用日志框架(如Log4j、SLF4J等)打印日志,可以帮助定位问题。以下是一个简单的日志打印示例:
import org.apache.log4j.Logger;
public class Main {
private static final Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) {
logger.info("Application started");
// 业务代码
logger.info("Application finished");
}
}
在上面的代码中,Logger
类用于获取日志记录器,info
方法用于记录信息级别的日志。
调试工具
使用调试工具(如Eclipse的调试器)可以帮助开发者逐行执行代码,查看变量的值。以下是一个简单的调试工具使用示例:
public class Main {
public static void main(String[] args) {
int x = 10;
int y = 20;
int result = x + y;
System.out.println("Result: " + result);
}
}
在上面的代码中,可以在变量声明行设置断点,然后使用调试工具逐步执行代码,查看变量的值。
性能优化入门
性能优化是提高应用程序性能的一种重要手段。以下是一些常见的性能优化方法:
减少数据库查询
通过减少数据库查询次数,可以提高应用程序的性能。以下是一个简单的减少数据库查询次数的示例:
import com.example.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person();
person.setName("John");
person.setAge(30);
session.save(person);
// 获取所有Person对象
List<Person> persons = session.createQuery("from Person").list();
for (Person p : persons) {
System.out.println(p.getName());
}
session.getTransaction().commit();
session.close();
}
}
在上面的代码中,createQuery
方法用于执行SQL查询,list
方法用于获取查询结果。
使用缓存
通过使用缓存,可以减少数据库查询次数,提高应用程序的性能。以下是一个简单的缓存使用示例:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cache.Cache;
public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person();
person.setName("John");
person.setAge(30);
session.save(person);
// 获取缓存
Cache cache = session.getSessionFactory().getCache();
// 从缓存中获取Person对象
Person cachedPerson = (Person) cache.get(Person.class, person.getId());
session.getTransaction().commit();
session.close();
}
}
在上面的代码中,getCache
方法用于获取缓存,get
方法用于从缓存中获取对象。
通过以上介绍,希望读者能够对JavaEE开发有一个全面的了解,并能够顺利地进行JavaEE项目的开发。
共同学习,写下你的评论
评论加载中...
作者其他优质文章