Java Web
1. 入门基础
1.1 Java Web简介
Java Web开发是指使用Java技术来创建动态网站或Web应用程序。Java Web开发主要使用Servlet、JSP(JavaServer Pages)、JavaBeans等技术来实现动态页面和处理业务逻辑。
1.2 环境搭建
为了开发Java Web应用程序,需要安装以下软件:
- JDK(Java Development Kit):Java开发工具包。提供Java开发所需的编译器和运行时环境。
- Eclipse或IntelliJ IDEA:集成开发环境(IDE)。用于编写、调试和运行Java代码。
- Apache Tomcat:一个常用的Servlet容器。用于部署和运行Java Web应用程序。
- Maven或Gradle:项目构建工具。用于管理项目依赖和构建过程。
2. 核心技术
2.1 Servlet
Servlet是一种用于扩展服务器功能的小程序,主要用于处理HTTP请求。Servlet通过实现javax.servlet.http.HttpServlet
类来处理客户端的请求和生成响应。
以下是一个简单的Servlet例子,并且包含详细注释:
import java.io.IOException; // 导入IOException类,用于处理输入输出异常
import javax.servlet.ServletException; // 导入ServletException类,用于处理Servlet特有的异常
import javax.servlet.annotation.WebServlet; // 导入WebServlet注解,用于定义Servlet的URL映射
import javax.servlet.http.HttpServlet; // 导入HttpServlet类,所有Servlet类都继承自这个类
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest类,用于处理请求数据
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse类,用于处理响应数据
@WebServlet("/hello") // 使用@WebServlet注解定义Servlet的URL映射为/hello
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L; // 定义序列化ID,用于序列化和反序列化对象
// 重写doGet方法,处理GET请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html"); // 设置响应的内容类型为HTML
response.getWriter().println("<h1>Hello, World!</h1>"); // 输出HTML内容
}
}
代码详解:
import java.io.IOException;
:导入IOException类,用于处理输入输出异常。import javax.servlet.ServletException;
:导入ServletException类,用于处理Servlet特有的异常。import javax.servlet.annotation.WebServlet;
:导入WebServlet注解,用于定义Servlet的URL映射。import javax.servlet.http.HttpServlet;
:导入HttpServlet类,所有Servlet类都继承自这个类。import javax.servlet.http.HttpServletRequest;
:导入HttpServletRequest类,用于处理请求数据。import javax.servlet.http.HttpServletResponse;
:导入HttpServletResponse类,用于处理响应数据。@WebServlet("/hello")
:使用@WebServlet注解定义Servlet的URL映射为/hello。public class HelloServlet extends HttpServlet
:定义一个继承HttpServlet的类。private static final long serialVersionUID = 1L;
:定义序列化ID,用于序列化和反序列化对象。protected void doGet(HttpServletRequest request, HttpServletResponse response)
:重写doGet方法,处理GET请求。response.setContentType("text/html");
:设置响应的内容类型为HTML。response.getWriter().println("<h1>Hello, World!</h1>");
:输出HTML内容。
2.2 JSP(JavaServer Pages)
JSP是一种用于创建动态网页的技术,允许将Java代码嵌入到HTML中。JSP页面最终被转换成Servlet,并由Servlet容器执行。
以下是一个简单的JSP例子,并且包含详细注释:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 指定JSP页面使用Java语言,内容类型为HTML,字符编码为UTF-8 -->
<!DOCTYPE html>
<html>
<head>
<title>Hello JSP</title> <!-- 页面标题 -->
</head>
<body>
<h1>Hello, <%= request.getParameter("name") %>!</h1> <!-- 输出请求参数name的值 -->
</body>
</html>
代码详解:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
:页面指令,指定JSP页面使用Java语言,内容类型为HTML,字符编码为UTF-8。<!DOCTYPE html>
:定义文档类型为HTML5。<html>
:HTML文档的根元素。<head>
:HTML文档的头部,包含文档的元数据。<title>Hello JSP</title>
:定义页面标题。<body>
:HTML文档的主体,包含页面的内容。<h1>Hello, <%= request.getParameter("name") %>!</h1>
:输出请求参数name的值,<%= %>
用于在页面中输出Java表达式的结果。
2.3 JavaBeans
JavaBeans是一种可重用的组件模型,通常用于表示应用程序中的数据。JavaBean需要实现Serializable
接口,具有无参构造方法,并提供getter和setter方法。
以下是一个简单的JavaBean例子,并且包含详细注释:
import java.io.Serializable; // 导入Serializable接口,用于实现序列化
public class User implements Serializable {
// 实现Serializable接口以支持序列化
private static final long serialVersionUID = 1L; // 定义序列化ID
private String name; // 定义name属性
private String email; // 定义email属性
// 无参构造方法
public User() {
}
// 有参构造方法
public User(String name, String email) {
this.name = name;
this.email = email;
}
// getter方法
public String getName() {
return name;
}
// setter方法
public void setName(String name) {
this.name = name;
}
// getter方法
public String getEmail() {
return email;
}
// setter方法
public void setEmail(String email) {
this.email = email;
}
}
代码详解:
import java.io.Serializable;
:导入Serializable接口,用于实现序列化。public class User implements Serializable
:定义一个实现Serializable接口的User类。private static final long serialVersionUID = 1L;
:定义序列化ID,用于序列化和反序列化对象。private String name;
:定义name属性。private String email;
:定义email属性。public User()
:无参构造方法。public User(String name, String email)
:有参构造方法,初始化name和email属性。public String getName()
:getter方法,返回name属性。public void setName(String name)
:setter方法,设置name属性。public String getEmail()
:getter方法,返回email属性。public void setEmail(String email)
:setter方法,设置email属性。
3. 数据持久化
3.1 JDBC(Java Database Connectivity)
JDBC是一种用于执行SQL语句的Java API。通过JDBC,可以连接数据库,执行SQL查询和更新操作,并处理结果集。
以下是一个简单的JDBC例子,并且包含详细注释:
import java.sql.Connection; // 导入Connection接口,用于管理数据库连接
import java.sql.DriverManager; // 导入DriverManager类,用于获取数据库连接
import java.sql.ResultSet; // 导入ResultSet接口,用于处理结果集
import java.sql.Statement; // 导入Statement接口,用于执行SQL语句
public class JDBCExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/testdb"; // 定义数据库URL
String user = "root"; // 定义数据库用户名
String password = "password"; // 定义数据库密码
try (Connection conn = DriverManager.getConnection(url, user, password); // 获取数据库连接
Statement stmt = conn.createStatement(); // 创建Statement对象
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
// 执行SQL查询语句,并返回结果集
while (rs.next()) {
// 遍历结果集
System.out.println(rs.getString("username")); // 输出结果集中的用户名
}
} catch (Exception e) {
// 捕获异常
e.printStackTrace(); // 打印异常信息
}
}
}
代码详解:
-
import java.sql.Connection;
:导入Connection接口,用于管理数据库连接。 -
import java.sql.DriverManager;
:导入DriverManager类,用于获取数据库连接。 -
import java.sql.ResultSet;
:导入ResultSet接口,用于处理结果集。 -
import java.sql.Statement;
:导入Statement接口,用于执行SQL语句。 -
String url = "jdbc:mysql://localhost:3306/testdb";
:定义数据库URL。 -
String user = "root";
:定义数据库用户名。 -
String password = "password";
:定义数据库密码。 -
try (Connection conn = DriverManager.getConnection(url, user, password);
:获取数据库连接。 -
Statement stmt = conn.createStatement();
:创建Statement对象。 -
ResultSet rs = stmt.executeQuery("SELECT * FROM users"))
:执行SQL查询语句,并返回结果集。 -
while (rs.next()) {
:遍历结果集。 -
System.out.println(rs.getString("username"));
:输出结果集中的用户名。 -
} catch (Exception e) {
:捕获异常。 -
e.printStackTrace();
:打印异常信息。