Java Web 开发是基于 Java 技术的 Web 应用程序开发,使用 Tomcat 作为服务器容器,JSP(JavaServer Pages)作为动态网页技术。
Java Web 开发环境搭建
搭建 Java Web 开发环境:
# 安装 JDK
下载并安装 JDK 8 或更高版本
设置 JAVA_HOME 环境变量
# 下载 Tomcat
Apache Tomcat 9.x 或更高版本
下载地址: https://tomcat.apache.org/
# 配置 Tomcat
设置 CATALINA_HOME 环境变量
将 Tomcat 添加到 IDE 中(Eclipse/IntelliJ IDEA)
创建第一个 Web 项目
创建标准的 Java Web 项目结构:
MyWebApp/
├── src/ # Java 源代码
│ └── com/example/
│ └── servlets/
├── web/ # Web 资源
│ ├── WEB-INF/
│ │ ├── web.xml # 部署描述符
│ │ └── classes/ # 编译后的类文件
│ ├── index.jsp # 首页
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript 文件
│ └── images/ # 图片资源
└── build/ # 构建输出
└── MyWebApp.war # 部署包
web.xml 配置
Web 应用的部署描述符:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>My Java Web Application</display-name>
<!-- 欢迎文件 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- Servlet 配置 -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- 会话超时设置 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- 错误页面配置 -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
</web-app>
Servlet 开发
创建基本的 Servlet:
package com.example.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// Servlet 初始化代码
System.out.println("HelloServlet 初始化");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
// 获取请求参数
String name = request.getParameter("name");
if (name == null || name.trim().isEmpty()) {
name = "访客";
}
// 获取输出流
PrintWriter out = response.getWriter();
// 生成 HTML 响应
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello, " + name + "!</h1>");
out.println("<p>当前时间: " + new java.util.Date() + "</p>");
out.println("<a href=\"index.jsp\">返回首页</a>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public void destroy() {
// Servlet 销毁代码
System.out.println("HelloServlet 销毁");
}
}
JSP 页面开发
创建动态 JSP 页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date, java.text.SimpleDateFormat" %>
<!DOCTYPE html>
<html>
<head>
<title>Java Web 应用首页</title>
<meta charset="UTF-8">
<style>
body {
font-family: Arial, sans-serif;
margin: 40px;
background-color: #f5f5f5;
}
.container {
max-width: 800px;
margin: 0 auto;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.btn {
display: inline-block;
padding: 10px 20px;
background: #007bff;
color: white;
text-decoration: none;
border-radius: 4px;
margin: 5px;
}
.btn:hover {
background: #0056b3;
}
</style>
</head>
<body>
<div class="container">
<h1>欢迎来到 Java Web 世界</h1>
<!-- JSP 声明 -->
<%!
private int visitCount = 0;
public String getGreeting() {
int hour = java.util.Calendar.getInstance().get(java.util.Calendar.HOUR_OF_DAY);
if (hour < 12) return "上午好";
else if (hour < 18) return "下午好";
else return "晚上好";
}
%>
<!-- JSP 脚本 -->
<%
visitCount++;
String userName = request.getParameter("user");
if (userName == null) userName = "朋友";
%>
<p><strong><%= getGreeting() %>,<%= userName %>!</strong></p>
<!-- JSP 表达式 -->
<p>当前时间:<%= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) %></p>
<p>页面访问次数:<%= visitCount %></p>
<h3>功能演示</h3>
<div>
<a href="hello?name=张三" class="btn">Servlet 演示</a>
<a href="userForm.jsp" class="btn">用户表单</a>
<a href="productList.jsp" class="btn">商品列表</a>
</div>
<h3>JSP 内置对象</h3>
<ul>
<li>请求方法:<%= request.getMethod() %></li>
<li>服务器名称:<%= request.getServerName() %></li>
<li>会话ID:<%= session.getId() %></li>
<li>应用上下文:<%= application.getServerInfo() %></li>
</ul>
</div>
</body>
</html>
表单处理 JSP
处理用户表单提交:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<title>用户注册</title>
<style>
.form-group { margin: 15px 0; }
label { display: block; margin-bottom: 5px; font-weight: bold; }
input, select, textarea {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
}
.btn {
background: #28a745;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
</style>
</head>
<body>
<div style="max-width: 600px; margin: 0 auto; padding: 20px;">
<h2>用户注册表单</h2>
<%-- 处理表单提交 --%>
<%
if ("POST".equalsIgnoreCase(request.getMethod())) {
String username = request.getParameter("username");
String email = request.getParameter("email");
String gender = request.getParameter("gender");
String[] hobbies = request.getParameterValues("hobbies");
// 保存到 session
session.setAttribute("username", username);
session.setAttribute("email", email);
// 重定向到欢迎页面
response.sendRedirect("welcome.jsp");
return;
}
%>
<form method="post" action="userForm.jsp">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
</div>
<div class="form-group">
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" id="male" name="gender" value="male">
<label for="male" style="display: inline;">男</label>
<input type="radio" id="female" name="gender" value="female">
<label for="female" style="display: inline;">女</label>
</div>
<div class="form-group">
<label>兴趣爱好:</label>
<input type="checkbox" id="sports" name="hobbies" value="sports">
<label for="sports" style="display: inline;">运动</label>
<input type="checkbox" id="music" name="hobbies" value="music">
<label for="music" style="display: inline;">音乐</label>
<input type="checkbox" id="reading" name="hobbies" value="reading">
<label for="reading" style="display: inline;">阅读</label>
</div>
<div class="form-group">
<label for="city">城市:</label>
<select id="city" name="city">
<option value="">请选择</option>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</select>
</div>
<div class="form-group">
<label for="intro">个人简介:</label>
<textarea id="intro" name="intro" rows="4"></textarea>
</div>
<button type="submit" class="btn">注册</button>
<button type="reset">重置</button>
</form>
</div>
</body>
</html>
Tomcat 部署和管理
Tomcat 服务器的基本操作:
# 启动 Tomcat
# Windows
%CATALINA_HOME%\bin\startup.bat
# Linux/Mac
$CATALINA_HOME/bin/startup.sh
# 停止 Tomcat
# Windows
%CATALINA_HOME%\bin\shutdown.bat
# Linux/Mac
$CATALINA_HOME/bin/shutdown.sh
# 部署 WAR 文件
将 MyWebApp.war 复制到 $CATALINA_HOME/webapps/
Tomcat 会自动解压并部署应用
# 访问应用
http://localhost:8080/MyWebApp
# Tomcat 管理界面
http://localhost:8080/manager/html
需要配置 manager-gui 用户权限
数据库连接示例
使用 JDBC 连接数据库:
package com.example.util;
import java.sql.*;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USER = "root";
private static final String PASSWORD = "password";
static {
try {
// 加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 在 Servlet 中使用数据库
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "SELECT * FROM users WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, userId);
rs = pstmt.executeQuery();
if (rs.next()) {
String username = rs.getString("username");
// 处理结果...
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, pstmt, rs);
}
完整开发流程
- 安装 JDK 和配置环境变量
- 下载并配置 Tomcat 服务器
- 创建 Web 项目目录结构
- 编写 web.xml 配置文件
- 开发 Servlet 处理业务逻辑
- 创建 JSP 页面显示数据
- 配置数据库连接(如需要)
- 打包项目为 WAR 文件
- 部署到 Tomcat 服务器
- 测试和调试应用程序
注意:现代 Java Web 开发更倾向于使用 Spring Boot 等框架,但理解基础的 Servlet 和 JSP 技术对于深入理解 Web 开发原理非常重要。
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。