开启你的编程学习之旅

云课堂提供高质量的编程课程,从入门到精通,助你成为技术大牛

立即开始学习

Java Web 开发实战

作者: 钱老师 更新: 2024-03-20 阅读: 42367 难度: 中级
学习工具

1. Java Web Tomcat JSP 基础

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 项目结构:

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 应用的部署描述符:

web.xml 配置示例
<?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:

HelloServlet.java
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 页面:

index.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

处理用户表单提交:

userForm.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 命令
# 启动 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); }

完整开发流程

  1. 安装 JDK 和配置环境变量
  2. 下载并配置 Tomcat 服务器
  3. 创建 Web 项目目录结构
  4. 编写 web.xml 配置文件
  5. 开发 Servlet 处理业务逻辑
  6. 创建 JSP 页面显示数据
  7. 配置数据库连接(如需要)
  8. 打包项目为 WAR 文件
  9. 部署到 Tomcat 服务器
  10. 测试和调试应用程序

注意:现代 Java Web 开发更倾向于使用 Spring Boot 等框架,但理解基础的 Servlet 和 JSP 技术对于深入理解 Web 开发原理非常重要。

提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。