JavaWeb开发
一、概述
JavaWeb开发是指使用Java语言进行Web应用程序的开发。Java具有强大的企业级开发能力,广泛应用于构建各种规模和类型的Web应用,从简单的小型网站到大型企业级应用系统。
二、核心技术
(一)Servlet技术
- Servlet基础
- Servlet是JavaWeb开发中的核心组件,它是运行在Web服务器或应用服务器上的Java程序。
- 例如,一个简单的Hello World Servlet示例:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloWorldServlet extends HttpServlet { @Override 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, World!</h1>"); out.println("</body></html>"); } }
- 在这个示例中,
HelloWorldServlet
继承自HttpServlet
,并重写了doGet
方法。当接收到HTTP GET请求时,它会向客户端发送一个包含“Hello, World!”标题的HTML页面。
- Servlet生命周期
- 加载与实例化:当Web容器(如Tomcat)启动或首次接收到针对该Servlet的请求时,会加载Servlet类并创建其实例。
- 初始化:实例化后,会调用
init
方法进行初始化操作,如加载配置信息、初始化数据库连接等。 - 服务请求:当有请求到达时,会根据请求类型(如GET、POST等)调用相应的
doGet
、doPost
等方法来处理请求并返回响应。 - 销毁:当Web容器关闭或重新部署应用时,会调用
destroy
方法,在这个方法中可以释放资源,如关闭数据库连接。
(二)JSP(JavaServer Pages)技术
- JSP基础
- JSP是一种动态网页技术标准,它允许在HTML页面中嵌入Java代码片段。
- 例如,一个简单的JSP页面示例:
<%@ page contentType = "text/html; charset = UTF - 8" %> <html> <body> <% String message = "Hello, JSP!"; %> <h1><%=message%></h1> </body> </html>
- 在这个JSP页面中,通过
<% %>
标签嵌入了Java代码来定义变量message
,然后通过<%= %>
表达式将变量的值输出到HTML页面中。
- JSP的优势与劣势
- 优势
- 对于熟悉HTML的前端开发人员来说,学习成本相对较低,因为可以在HTML页面中直接编写Java代码,将动态内容和静态页面布局结合在一起。
- 可以方便地与JavaBean和Servlet进行交互,实现数据的传递和共享。
- 劣势
- 大量的Java代码嵌入在JSP页面中会导致页面的可读性和维护性变差,尤其是在复杂的应用中。
- 与现代的前端开发框架(如React、Vue.js等)相比,在前端交互性方面存在不足。
- 优势
(三)JavaBean组件
- JavaBean定义
- JavaBean是一种符合特定设计模式的Java类,它具有以下特点:
- 是一个公共的(public)类。
- 具有无参的构造函数。
- 提供可访问的(通过get和set方法)私有属性。
- 例如,一个简单的表示用户信息的JavaBean:
public class User { private String name; private int age; public User() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
- JavaBean是一种符合特定设计模式的Java类,它具有以下特点:
- JavaBean的作用
- 实现数据的封装和模块化。可以将业务逻辑中的数据对象抽象成JavaBean,方便在不同的组件(如Servlet、JSP等)之间传递和共享数据。
- 提高代码的可维护性和复用性。例如,在多个JSP页面中可能都需要使用用户信息,通过JavaBean可以统一管理用户数据的结构和操作。
三、Web框架
- Spring框架
- Spring框架概述
- Spring是一个开源的轻量级Java开发框架,它提供了一系列的功能,如依赖注入(DI)、面向切面编程(AOP)、事务管理等,广泛应用于JavaWeb开发。
- Spring MVC
- Spring MVC是Spring框架中的一个模块,用于构建Web应用程序的MVC(Model - View - Controller)架构。
- 在Spring MVC中,
Controller
负责处理请求并返回数据或视图,Model
用于存储数据,View
用于展示数据。 - 例如,一个简单的Spring MVC控制器类:
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/") public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "hello"; } }
- 这个控制器类中的
hello
方法处理/hello
路径的GET请求,向Model
中添加一个名为message
的属性,然后返回视图名称hello
。
- Spring框架概述
- Struts框架
- Struts框架概述
- Struts是一个基于MVC设计模式的Web应用框架,在早期的JavaWeb开发中被广泛使用。
- Struts的工作流程
- 当用户发送请求时,Struts的
Filter
(如ActionFilter
)会拦截请求,根据请求的URL找到对应的Action
类。 Action
类处理请求,可能会调用业务逻辑层的方法,然后根据处理结果返回一个结果字符串。- 根据结果字符串,Struts会找到对应的视图(如JSP页面)来展示结果。
- 当用户发送请求时,Struts的
- Struts框架概述
四、数据库访问
- JDBC(Java Database Connectivity)
- JDBC基础
- JDBC是Java用于访问数据库的标准API。通过JDBC,Java程序可以连接到各种数据库(如MySQL、Oracle、SQLite等)。
- 例如,一个简单的JDBC连接MySQL数据库并查询数据的示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCExample { public static void main(String[] args) { try { // 加载驱动(对于较新版本的JDBC,这一步可能不需要) Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); // 创建语句 Statement statement = connection.createStatement(); // 执行查询 ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); while (resultSet.next()) { System.out.println("User: " + resultSet.getString("name")); } // 关闭资源 resultSet.close(); statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
- JDBC基础
- 数据库连接池
- 连接池概念
- 数据库连接池是一种用于管理数据库连接的技术。它预先创建一定数量的数据库连接,并将这些连接保存在一个池中。
- 当应用程序需要访问数据库时,从池中获取一个连接,使用完毕后再将连接归还给池,而不是每次都创建和销毁连接,从而提高数据库访问效率。
- 常用的连接池技术
- C3P0、DBCP(Apache Commons DBCP)等都是常用的数据库连接池技术。以C3P0为例,使用它需要添加相应的依赖库,并在代码中进行配置,如下:
import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Example { public static void main(String[] args) { ComboPooledDataSource dataSource = new ComboPooledDataSource(); try { dataSource.setDriverClass("com.mysql.cj.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUser("root"); dataSource.setPassword("password"); Connection connection = dataSource.getConnection(); // 执行数据库操作 connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
- 连接池概念
五、Web服务器
- Tomcat
- Tomcat概述
- Tomcat是一个开源的、轻量级的Web应用服务器,它是JavaWeb开发中最常用的服务器之一。
- 它支持Servlet和JSP规范,可以运行JavaWeb应用程序。
- 安装与配置
- 可以从Tomcat官方网站下载适合的版本(如Tomcat 9.x),解压后即可使用。
- 在开发环境中,可以通过修改
conf/server.xml
文件来配置Tomcat的端口(默认端口为8080)、虚拟主机等参数。
- Tomcat概述
- Jetty
- Jetty概述
- Jetty也是一个开源的Web服务器和Java EE容器,它具有轻量、高效的特点。
- 与Tomcat的比较
- Jetty的启动速度可能比Tomcat更快,并且在一些嵌入式应用场景中更具优势。而Tomcat在企业级应用中使用更为广泛,具有更完善的管理和监控功能。
- Jetty概述