Java SE与Java EE使用方法及组件封装指南
一、Java SE核心功能使用方法
1. 集合框架使用
Java SE的集合框架提供了丰富的数据结构和算法,是日常开发中最常用的功能之一。
使用示例:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class CollectionUsage {public static void main(String[] args) {// List使用List<String> names = new ArrayList<>();names.add("Alice");names.add("Bob");names.add("Charlie");// 遍历Listfor (String name : names) {System.out.println("Name: " + name);}// Map使用Map<Integer, String> idMap = new HashMap<>();idMap.put(1, "北京");idMap.put(2, "上海");idMap.put(3, "广州");// 遍历Mapfor (Map.Entry<Integer, String> entry : idMap.entrySet()) {System.out.println("ID: " + entry.getKey() + ", City: " + entry.getValue());}}
}
组件封装建议:
- 创建通用的集合工具类,封装常用操作
- 示例:ListUtil类实现列表判空和分页
public class ListUtil {public static <T> boolean isEmpty(List<T> list) {return list == null || list.size() == 0;}public static <T> List<T> paginate(List<T> list, int pageNum, int pageSize) {if (isEmpty(list)) {return new ArrayList<>();}int start = (pageNum - 1) * pageSize;int end = Math.min(start + pageSize, list.size());if (start >= list.size()) {return new ArrayList<>();}return list.subList(start, end);}
}
2. 文件操作使用
Java SE提供了强大的文件操作API,支持文件读写、目录遍历等功能。
使用示例:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FileOperation {public static void main(String[] args) {String sourceFile = "input.txt";String targetFile = "output.txt";try (BufferedReader reader = new BufferedReader(new FileReader(sourceFile));BufferedWriter writer = new BufferedWriter(new FileWriter(targetFile))) {String line;while ((line = reader.readLine()) != null) {writer.write(line);writer.newLine();}System.out.println("文件复制成功");} catch (IOException e) {e.printStackTrace();}}
}
组件封装建议:
- 创建文件工具类,封装常用文件操作
- 示例:FileUtil类实现文件复制和内容读取
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;public class FileUtil {public static void copyFile(String source, String target) throws IOException {Path sourcePath = Paths.get(source);Path targetPath = Paths.get(target);Files.copy(sourcePath, targetPath);}public static List<String> readAllLines(String filePath) throws IOException {Path path = Paths.get(filePath);return Files.readAllLines(path);}
}
二、Java EE核心组件使用方法
1. Servlet使用方法
Servlet是Java EE中处理Web请求的核心组件。
使用示例:
import java.io.IOException;
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 HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");response.getWriter().println("<html><body>");response.getWriter().println("<h1>Hello, World!</h1>");response.getWriter().println("</body></html>");}
}
组件封装建议:
- 创建基础Servlet类,封装通用操作
- 示例:BaseServlet封装请求参数获取和错误处理
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public abstract class BaseServlet extends HttpServlet {protected String getParameter(HttpServletRequest request, String name) {return request.getParameter(name);}protected void handleError(HttpServletResponse response, String message) throws IOException {response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);response.getWriter().println("<html><body>");response.getWriter().println("<h1>Error: " + message + "</h1>");response.getWriter().println("</body></html>");}
}
2. JPA实体类封装
JPA提供了对象关系映射功能,简化数据库操作。
使用示例:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "products")
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private double price;private String description;// 构造方法、Getter和Setterpublic Product() {}public Product(String name, double price, String description) {this.name = name;this.price = price;this.description = description;}// Getter和Setter方法public Long getId() { return id; }public void setId(Long id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public double getPrice() { return price; }public void setPrice(double price) { this.price = price; }public String getDescription() { return description; }public void setDescription(String description) { this.description = description; }
}
组件封装建议:
- 创建基础实体类,封装通用字段
- 示例:BaseEntity封装创建时间和更新时间
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;@MappedSuperclass
public abstract class BaseEntity implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "create_time")private LocalDateTime createTime;@Column(name = "update_time")private LocalDateTime updateTime;// Getter和Setterpublic Long getId() { return id; }public void setId(Long id) { this.id = id; }public LocalDateTime getCreateTime() { return createTime; }public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }public LocalDateTime getUpdateTime() { return updateTime; }public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
}
三、Java EE服务层组件封装
1. EJB组件封装
EJB是Java EE中实现业务逻辑的核心组件。
使用示例:
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;@Stateless
public class ProductService {@PersistenceContextprivate EntityManager em;public void createProduct(Product product) {product.setCreateTime(LocalDateTime.now());product.setUpdateTime(LocalDateTime.now());em.persist(product);}public Product findProduct(Long id) {return em.find(Product.class, id);}
}
组件封装建议:
- 创建基础服务类,封装通用CRUD操作
- 示例:BaseService封装基本增删改查方法
import java.util.List;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;public abstract class BaseService<T, ID> {@PersistenceContextprivate EntityManager em;private final Class<T> entityClass;public BaseService(Class<T> entityClass) {this.entityClass = entityClass;}@TransactionAttribute(TransactionAttributeType.REQUIRED)public void create(T entity) {if (entity instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) entity;baseEntity.setCreateTime(LocalDateTime.now());baseEntity.setUpdateTime(LocalDateTime.now());}em.persist(entity);}public T findById(ID id) {return em.find(entityClass, id);}public List<T> findAll() {String jpql = "SELECT e FROM " + entityClass.getSimpleName() + " e";TypedQuery<T> query = em.createQuery(jpql, entityClass);return query.getResultList();}@TransactionAttribute(TransactionAttributeType.REQUIRED)public T update(T entity) {if (entity instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) entity;baseEntity.setUpdateTime(LocalDateTime.now());}return em.merge(entity);}@TransactionAttribute(TransactionAttributeType.REQUIRED)public void delete(ID id) {T entity = em.find(entityClass, id);if (entity != null) {em.remove(entity);}}
}
2. RESTful API封装
Java EE通过JAX-RS规范支持RESTful API开发。
使用示例:
import javax.ejb.EJB;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;@Path("/products")
public class ProductResource {@EJBprivate ProductService productService;@GET@Produces(MediaType.APPLICATION_JSON)public Response getAllProducts() {List<Product> products = productService.findAll();return Response.ok(products).build();}@GET@Path("/{id}")@Produces(MediaType.APPLICATION_JSON)public Response getProduct(@PathParam("id") Long id) {Product product = productService.findProduct(id);if (product == null) {return Response.status(Response.Status.NOT_FOUND).build();}return Response.ok(product).build();}
}
组件封装建议:
- 创建基础资源类,封装通用API响应格式
- 示例:BaseResource封装成功和错误响应
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.Map;public abstract class BaseResource {protected Response successResponse(Object data) {Map<String, Object> response = new HashMap<>();response.put("code", 200);response.put("message", "成功");response.put("data", data);return Response.ok(response).build();}protected Response errorResponse(int code, String message) {Map<String, Object> response = new HashMap<>();response.put("code", code);response.put("message", message);return Response.status(code).entity(response).build();}
}
四、组件集成与最佳实践
1. 分层架构集成示例
下面是一个完整的分层架构示例,展示如何集成Servlet、EJB和JPA组件:
Web层(Servlet):
import java.io.IOException;
import javax.ejb.EJB;
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("/product/add")
public class ProductAddServlet extends HttpServlet {@EJBprivate ProductService productService;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");double price = Double.parseDouble(request.getParameter("price"));String description = request.getParameter("description");Product product = new Product(name, price, description);productService.createProduct(product);response.sendRedirect(request.getContextPath() + "/products.jsp");}
}
业务层(EJB):
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;@Stateless
public class ProductService extends BaseService<Product, Long> {@PersistenceContextprivate EntityManager em;public ProductService() {super(Product.class);}// 可以添加特定于Product的业务方法public List<Product> findByPriceRange(double minPrice, double maxPrice) {String jpql = "SELECT p FROM Product p WHERE p.price BETWEEN :minPrice AND :maxPrice";return em.createQuery(jpql, Product.class).setParameter("minPrice", minPrice).setParameter("maxPrice", maxPrice).getResultList();}
}
数据层(JPA实体):
import javax.persistence.Entity;
import javax.persistence.Table;@Entity
@Table(name = "products")
public class Product extends BaseEntity {private String name;private double price;private String description;// Getter和Setterpublic String getName() { return name; }public void setName(String name) { this.name = name; }public double getPrice() { return price; }public void setPrice(double price) { this.price = price; }public String getDescription() { return description; }public void setDescription(String description) { this.description = description; }
}
2. 组件封装最佳实践
- 单一职责原则:每个组件只负责一个明确的功能
- 接口抽象:通过接口定义组件行为,提高可替换性
- 依赖注入:使用CDI或EJB的依赖注入机制,降低组件耦合
- 事务管理:在服务层使用声明式事务管理
- 异常处理:统一的异常处理机制,避免重复代码
- 日志记录:集成日志框架,记录关键操作和异常信息
通过以上方法,你可以更高效地使用Java SE和Java EE的各类组件,并通过合理的封装策略提高代码的可维护性和可扩展性。在实际项目中,建议根据具体需求选择合适的技术组合,并遵循已有的设计模式和最佳实践。
以上指南详细介绍了Java SE和Java EE核心组件的使用方法与封装策略。如果需要针对特定组件进一步优化或扩展功能,或者希望了解更多实际项目中的应用技巧,欢迎继续探讨。
准备了一些面试资料,请在以下链接中获取
https://pan.quark.cn/s/4459235fee85
关注我获取更多内容