编程自学指南:java程序设计开发,JavaEE 标准架构基础
一、课程信息
学习目标
- 理解 JavaEE 标准架构的基本概念和核心组件。
- 掌握 JavaEE 架构中各层的职责和作用。
- 学会搭建简单的 JavaEE 开发环境。
- 了解 JavaEE 架构的优势和适用场景。
二、课程导入
生活实例引入
- 想象一家大型商场,有不同的区域负责不同的功能,如购物区、餐饮区、娱乐区等。商场的运营需要有统一的管理和协调,各个区域相互配合,才能为顾客提供良好的服务。在 Java 开发中,当我们构建大型的企业级应用时,也需要一个类似的架构来组织代码,协调各个模块的工作,这就是 JavaEE 标准架构。
- 提问学生生活中还有哪些类似分工协作的大型系统,引导他们思考在编程中如何实现这种高效的架构。
三、JavaEE 概述
定义
JavaEE(Java Platform, Enterprise Edition),即 Java 企业版,是一套用于开发企业级应用的 Java 平台和规范。它提供了一系列的 API 和服务,帮助开发者构建可扩展、安全、可靠的企业级应用。
发展历程
- 回顾 JavaEE 的发展历程,从最初的 J2EE 到现在的 Jakarta EE(JavaEE 更名为 Jakarta EE),了解其不断演进和完善的过程。
应用场景
- 企业资源规划(ERP)系统:用于管理企业的各种资源,如财务、人力资源、生产等。
- 客户关系管理(CRM)系统:帮助企业管理客户信息,提高客户满意度。
- 电子商务系统:实现网上购物、支付等功能。
四、JavaEE 标准架构核心组件
表示层(Presentation Layer)
作用
负责与用户进行交互,接收用户的请求并展示处理结果。
技术
- JSP(JavaServer Pages):允许在 HTML 页面中嵌入 Java 代码,动态生成 HTML 页面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>简单的 JSP 页面</title>
</head>
<body>
<h1>欢迎来到 JavaEE 世界!当前时间:<%= new java.util.Date() %></h1>
</body>
</html>
Servlet: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;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello, JavaEE!</h1>");
out.println("</body></html>");
}
}
业务逻辑层(Business Logic Layer)
作用
处理业务逻辑,如用户认证、订单处理、数据计算等。
技术
- EJB(Enterprise JavaBeans):提供了一种分布式组件模型,用于实现企业级业务逻辑。
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean {
public int add(int a, int b) {
return a + b;
}
}
Spring 框架:轻量级的 Java 开发框架,提供了依赖注入、面向切面编程等功能,简化了业务逻辑的开发。
数据访问层(Data Access Layer)
作用
负责与数据库进行交互,执行数据的增删改查操作。
技术
- JDBC(Java Database Connectivity):Java 提供的标准数据库访问接口,用于连接和操作各种数据库。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Hibernate:开源的对象关系映射(ORM)框架,将 Java 对象与数据库表进行映射,简化了数据库操作。
企业信息系统层(Enterprise Information System Layer)
作用
与企业的其他信息系统进行集成,如 ERP 系统、CRM 系统等。
技术
- JMS(Java Message Service):用于在不同的应用程序之间进行消息传递,实现异步通信。
- Web 服务:使用 SOAP、REST 等协议,实现不同系统之间的互操作性。
五、JavaEE 架构分层示例
案例:简单的用户管理系统
表示层(JSP 页面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
</tr>
<% java.util.List<User> users = (java.util.List<User>) request.getAttribute("users");
if (users != null) {
for (User user : users) { %>
<tr>
<td><%= user.getId() %></td>
<td><%= user.getName() %></td>
</tr>
<% }
} %>
</table>
</body>
</html>
业务逻辑层(UserService.java)
import java.util.List;
public class UserService {
private UserDao userDao = new UserDao();
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
}
数据访问层(UserDao.java)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
users.add(user);
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return users;
}
}
实体类(User.java)
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
控制器(UserServlet.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;
import java.io.IOException;
import java.util.List;
@WebServlet("/users")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserService userService = new UserService();
List<User> users = userService.getAllUsers();
request.setAttribute("users", users);
request.getRequestDispatcher("userList.jsp").forward(request, response);
}
}
代码解释
- 表示层:通过 JSP 页面展示用户列表信息。
- 业务逻辑层:
UserService
类负责处理与用户相关的业务逻辑,调用数据访问层的方法获取用户信息。 - 数据访问层:
UserDao
类使用 JDBC 与数据库进行交互,执行查询用户信息的操作。 - 控制器:
UserServlet
接收客户端的请求,调用业务逻辑层的方法获取用户信息,并将信息传递给 JSP 页面进行展示。
六、JavaEE 架构的优势和适用场景
优势
- 可扩展性:各层之间相对独立,便于对系统进行扩展和维护。
- 安全性:提供了一系列的安全机制,如身份验证、授权等,保障系统的安全。
- 可移植性:基于 Java 平台,具有良好的跨平台性。
- 标准化:遵循 JavaEE 规范,便于不同厂商的产品之间进行集成。
适用场景
- 大型企业级应用:如银行系统、电信系统等,需要处理大量的数据和复杂的业务逻辑。
- 分布式系统:可以将不同的组件部署在不同的服务器上,实现分布式计算。
七、课堂练习
练习一
在上述用户管理系统的基础上,添加一个添加用户的功能。在 JSP 页面中添加一个表单,用于输入用户信息,提交表单后调用控制器的方法将用户信息保存到数据库中。
练习二
修改数据访问层的代码,使用 Hibernate 框架代替 JDBC 进行数据库操作。
八、课程总结
知识回顾
- 回顾 JavaEE 标准架构的基本概念、核心组件和分层结构。
- 总结 JavaEE 架构的优势和适用场景。
口诀总结
- “JavaEE 架构妙,分层协作效率高。表示业务数据层,各司其职很重要。开发环境搭建好,应用开发没烦恼。大型系统它来搞,安全扩展有保障。”
九、课后作业
作业一
完善课堂上的用户管理系统,添加一个删除用户的功能。在 JSP 页面中为每个用户添加一个删除按钮,点击按钮后调用控制器的方法将该用户信息从数据库中删除。
作业二
研究并尝试使用 Spring Boot 框架来简化 JavaEE 应用的开发,将用户管理系统迁移到 Spring Boot 环境中。