Java Web开发核心内容全解析(上)

 一、Java Web概述

Java Web是指使用Java技术来解决相关web互联网领域的技术总和。在当今数字化时代,Java Web在构建企业级应用、电子商务平台、社交网络等方面发挥着至关重要的作用。

(一)Java Web的体系结构

Java Web应用的体系结构主要分为客户端层、表示层、业务逻辑层和数据访问层。

1. 客户端层

   - 这是用户与Web应用交互的最前端。主要包括用户浏览器,它可以接收并显示从服务器端发送过来的HTML、CSS、JavaScript等内容。客户端层负责向服务器发送请求,如HTTP GET、POST请求等。例如,当用户在浏览器地址栏输入一个网址并回车,浏览器就会向对应的Web服务器发送一个HTTP请求,请求获取该页面的资源。

2. 表示层

   - 表示层在Java Web中通常由Servlet和JSP(JavaServer Pages)组成。Servlet是Java编写的服务器端小程序,它可以接收客户端请求,进行一些预处理,如解析请求参数、验证用户身份等,然后将处理结果转发给JSP或者直接返回给客户端。JSP则是一种动态网页技术,它在HTML文件中嵌入Java代码片段,方便生成动态内容。JSP页面最终会被编译成Servlet来执行,这使得它在开发动态网页方面比传统的纯HTML页面更加灵活高效。

3. 业务逻辑层

   - 业务逻辑层是Java Web应用的核心部分。它包含了应用程序的业务规则和逻辑。这一层通常由一系列的Java类组成,这些类负责处理与业务相关的事务,如用户注册登录逻辑、订单处理逻辑等。业务逻辑层与数据访问层和表示层都有交互,它接收来自表示层的请求,进行业务逻辑处理,然后将处理结果返回给表示层。例如,在一个电商系统中,当用户提交订单时,业务逻辑层会检查库存是否充足、计算订单总价等业务规则相关的操作。

4. 数据访问层

   - 数据访问层主要负责与数据库或其他持久化存储进行交互。在Java Web开发中,常用的数据库有MySQL、Oracle等。Java开发人员可以使用JDBC(Java Database Connectivity)或者一些持久化框架如Hibernate、MyBatis等来实现数据访问层。数据访问层将业务逻辑层传来的数据存储到数据库中,或者从数据库中查询出业务逻辑层所需要的数据。例如,查询用户的订单信息,数据访问层会根据用户ID从数据库的订单表中检索相关记录并提供给业务逻辑层。

 

二、Servlet概述

(一)Servlet的概念与生命周期

1. 概念

   - Servlet是Java Web开发中最早用于处理客户端请求的组件。它运行在服务器端,能够接收和响应客户端的HTTP请求。Servlet是一个Java类,它必须实现javax.servlet.Servlet接口或者继承javax.servlet.http.HttpServlet抽象类。通过实现Servlet接口中的方法(如init()、service()、destroy()),可以对Servlet的初始化、请求处理和销毁过程进行定制。

2. 生命周期

   - Servlet的生命周期由Servlet容器(如Tomcat)管理。

   - **初始化阶段**:当Servlet第一次被加载到内存中时,容器会调用其init()方法进行初始化。在这个方法中,可以进行一些资源的初始化工作,如创建数据库连接池、读取配置文件等。init()方法只会执行一次。

   - **服务阶段**:每次客户端发送请求到Servlet时,容器都会调用service()方法。service()方法会根据请求的类型(GET、POST等)调用相应的doGet()或doPost()等方法来处理请求。在这个阶段,Servlet会读取请求参数、进行业务逻辑处理,并将处理结果返回给客户端。

   - **销毁阶段**:当Servlet容器决定将Servlet从内存中卸载时(如在服务器关闭或者长时间未被使用时),会调用其destroy()方法。在destroy()方法中,可以进行资源的释放工作,如关闭数据库连接、释放文件句柄等。

 

(二)Servlet的配置与部署

1. 配置

   - Servlet需要在web.xml文件中进行配置。在web.xml文件中,定义Servlet的名称、类名、映射的URL等信息。例如:

   ```xml

   

       MyServlet

       com.example.MyServlet

   

   

       MyServlet

       /myservlet

   

   ```

   - 这里定义了一个名为MyServlet的Servlet,它对应的Java类是com.example.MyServlet,并且它映射的URL是/myservlet。这意味着当客户端发送请求到服务器的/myservlet路径时,将会由MyServlet来处理该请求。

2. 部署

   - 将开发好的Java Web应用(包含Servlet等组件)部署到Servlet容器中。以Tomcat为例,可以将开发好的Web应用项目文件夹复制到Tomcat的webapps目录下,然后启动Tomcat服务器,Tomcat会自动解压项目文件并根据web.xml中的配置加载相应的Servlet等组件。

 

#三、JSP(JavaServer Pages)技术

(一)JSP的原理与语法

1. 原理

   - JSP页面在第一次被请求时,会被Web容器(如Tomcat)编译成一个Servlet类。这个编译过程是自动进行的,用户通常不需要干预。编译后的Servlet类会像普通的Servlet一样处理HTTP请求并生成响应。JSP之所以方便开发动态网页,是因为它允许在HTML代码中直接嵌入Java代码片段,这样就能够在网页生成过程中动态地插入数据或者执行逻辑操作。

2. 语法

   脚本元素:JSP脚本元素包括脚本片段(<%...%>)、表达式(<%=...%>)和声明(<%!...%>)。

     - 脚本片段用于在JSP页面中插入一段Java代码,这段代码可以包含变量声明、方法调用、控制语句等。例如:

     ```jsp

     <%int a = 10; out.println(a);%>

     ```

     - 表达式用于在JSP页面中输出一个Java表达式的值。例如:

     ```jsp

     <%= "Hello, " + request.getParameter("name") %>

     ```

     - 声明用于在JSP页面中声明变量或者方法,这些声明的变量和方法可以在JSP页面的脚本片段或者其他地方使用。例如:

     ```jsp

     <%!int count = 0;%>

     ```

   指令元素:JSP指令元素包括page指令、include指令和taglib指令。

     - page指令用于设置JSP页面的一些全局属性,如页面编码、导入的Java类库等。例如:

     ```jsp

     <%@ page contentType = "text/html;charset=UTF - 8" %>

     ```

     - include指令用于在JSP页面中包含另一个文件(HTML、JSP或Servlet)的内容。例如:

     ```jsp

     <%@ include file = "header.jsp" %>

     ```

     - taglib指令用于导入自定义标签库或者JSTL(JavaServer Pages Standard Tag Library)等标准标签库。例如:

     ```jsp

     <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>

   - **动作元素**:JSP动作元素是一些预定义的JavaBean操作或者其他资源操作的标签,如等。用于在运行时包含另一个资源(JSP、Servlet或HTML)的内容,与include指令不同的是,它是动态包含。例如:

     ```jsp

     

     ```

 

(二)JSP与Servlet的关系

JSP和Servlet是紧密相关的。JSP本质上是一种特殊的Servlet,它在编写方式上更加适合开发动态网页。在开发过程中,通常会将复杂的业务逻辑放在Servlet中处理,而将页面的显示部分放在JSP中。例如,Servlet可以接收用户请求,查询数据库获取数据,然后将数据存储在请求属性或者会话属性中,再将请求转发给JSP页面。JSP页面则负责从这些属性中获取数据并以HTML的形式展示给用户。这种分工合作的方式提高了代码的可维护性和可扩展性。

 

四、数据库连接与持久化

(一)JDBC(Java Database Connectivity)

1. JDBC的概念与作用

   - JDBC是Java语言用于连接和操作数据库的一套标准API。它提供了一组接口和类,使得Java程序能够与各种不同的数据库(如MySQL、Oracle、SQL Server等)进行交互。通过JDBC,开发人员可以在Java Web应用中执行SQL语句(如查询、插入、更新和删除等操作),实现数据的持久化和读取。

2. JDBC的工作流程

   - 使用JDBC连接数据库一般需要以下几个步骤:

     - 加载数据库驱动:首先要加载对应的数据库驱动程序类。例如,对于MySQL数据库,需要加载com.mysql.jdbc.Driver类(在不同的JDBC驱动版本中,类名可能会有所不同)。

     - 建立数据库连接:使用DriverManager类的getConnection()方法,传入数据库的URL、用户名和密码等信息来建立与数据库的连接。例如:

     ```java

     String url = "jdbc:mysql://localhost:3306/mydb";

     String user = "root";

     String password = "123456";

     Connection connection = DriverManager.getConnection(url, user, password);

     ```

     - 创建SQL执行对象:通过连接对象创建Statement(用于执行普通的SQL语句)或者PreparedStatement(用于执行预编译的SQL语句,能够防止SQL注入攻击)对象。例如:

     ```java

     Statement statement = connection.createStatement();

     ```

     - 执行SQL语句:使用Statement或者PreparedStatement对象的exe执行SQL语句:使用Statement或者PreparedStatement对象的executeQuery()(用于执行查询语句,返回结果集)、executeUpdate()(用于执行插入、更新、删除语句,返回受影响的行数)等方法来执行SQL语句。
 
处理结果集:如果是查询语句,执行后会返回一个ResultSet结果集对象,通过遍历结果集可以获取查询结果。
 
关闭资源:在使用完数据库连接、SQL执行对象和结果集等资源后,要及时关闭它们以释放资源。按照关闭顺序,应该先关闭ResultSet(如果有),再关闭Statement,最后关闭Connection。

(二)持久化框架 - Hibernate与MyBatis

1.Hibernate

概念与特点

Hibernate是一个开源的Java持久化框架,它对JDBC进行了封装,提供了更加方便的对象 - 关系映射(ORM)功能。在Hibernate中,开发人员可以将Java对象与数据库表进行映射,通过操作Java对象来实现对数据库的操作。Hibernate具有以下特点:

跨数据库支持:可以在不同的数据库之间切换而不需要对业务逻辑代码进行大量修改,只需要修改配置文件中的数据库连接信息即可。

 

自动化的ORM映射:减少了开发人员编写SQL语句的工作量。例如,定义一个Java实体类,如User类,然后通过Hibernate的映射文件或者注解的方式将类中的属性与数据库表中的字段进行映射,这样就可以直接对User对象进行增删改查操作,Hibernate会在底层自动生成相应的SQL语句。

缓存机制:Hibernate具有一级缓存(Session缓存)和二级缓存(可以在多个Session之间共享),缓存可以提高数据访问的效率,减少数据库的查询次数。

 

Hibernate的工作流程

首先要配置Hibernate,包括数据库连接信息、映射文件等。然后创建SessionFactory对象,它是Hibernate的核心对象,用于创建Session。Session是Hibernate与数据库交互的主要接口,通过它可以进行数据库操作,如开启事务(Transaction)、保存对象(save())、查询对象(get()、load())、更新对象(update())和删除对象(delete())等操作。

 2.MyBatis

概念与特点

MyBatis也是一个流行的Java持久化框架,它与Hibernate不同,它更加灵活。MyBatis采用了一种半自动化的ORM方式。它的特点是:

简单灵活:开发人员可以编写原生的SQL语句,这样能够更好地控制数据库操作的细节。对于复杂的查询场景,能够更高效地编写针对性的SQL语句。

 

易于集成:MyBatis易于与现有的Java项目集成,它可以作为独立的持久层框架使用,也可以与其他框架(如Spring)集成。

 

良好的性能:由于可以手动优化SQL语句,所以在性能上往往能够取得较好的表现。MyBatis的工作流程

要配置MyBatis,需要定义全局配置文件(包含数据源、事务管理等信息)和映射文件(将Java接口方法与SQL语句进行映射)。然后通过SqlSessionFactoryBuilder构建SqlSessionFactory,再从SqlSessionFactory获取SqlSession对象。SqlSession对象提供了执行SQL语句、管理事务等功能的方法,如selectOne()、selectList()、insert()、update()、delete()等,这些方法与映射文件中的SQL语句相对应。

 

你可能感兴趣的:(java,servlet,mybatis)