前言 JSP是一种广泛使用的动态网页技术标准。JSP能够响应客户端的请求,并动态生成HTML、XML或其他格式文档的Web页面。JSP以Java语言作为脚本语言,可以使用Java语言的大部分类库。 JSP页面中既可以有静态的HTML标签,也可以有动态的Java脚本。当一个JSP页面第一次被请求时,应用服务器首先将JSP页面编译成Servlet(.java),然后调用Java编译器将Servlet编译成字节码文件(.class),最后将字节码文件实例化成Java对象,并调用这个对象的service()方法为客户端请求提供服务。编译JSP页面仅仅发生在该页面第一次被请求时。对于后续的请求,应用服务器将直接使用内存中的Java对象提供服务。当然,如果JSP页面在服务器运行期间被修改,应用服务器也会重新编译这个JSP页面。 Servlet是一种运行在服务器端的Java应用程序。Servlet由应用服务器加载,并由应用服务器维护其生命周期。服务器根据客户端请求的方法调用Servlet中对应的方法。Servlet读取浏览器或其他HTTP客户端发来的请求参数,动态生成响应返回给客户端。 Servlet监听器可以监听Web应用中发生的各种事件。利用监听器,当事件发生时可以在后台自动执行某些代码。Servlet过滤器可以截获HTTP的请求和响应。多个过滤器形成一个过滤器链。利用过滤器可以将一些公共代码从Servlet和JSP中分离出来。 JSP表达式语言(Expression Language,EL)使得访问存储在JavaBean中的数据变得非常简单,EL提供了在JSP页面中以更简洁的语法输出数据的机制。JSP标准标签库(Java Server Pages Standard Tag Library,JSTL)为Java Web开发者提供了一个标准的通用标签库。通过JSTL,可以部分取代传统JSP程序中嵌入Java代码的做法,使得JSP页面的风格趋于统一,且容易维护。 MVC设计模式是Web开发常用的设计模式,核心思想是有效地组合模型(Model)、视图(View)和控制器(Controller),每个部分各有所长,分工明确。模型负责业务逻辑处理和封装数据,视图只负责显示的界面,控制器控制着模型和视图之间的交互过程。JSP作为视图,Servlet作为控制器,JavaBean作为模型,JSP+Servlet+JavaBean可以实现符合MVC设计模式的Java Web程序。 Maven是一个软件项目管理的综合工具。基于项目对象模型(Project Object Model,POM),Maven可以通过一小段XML描述信息来管理项目的构建、报告和文档。Maven还是一个依赖管理工具,它提供了中央仓库,能够自动下载构件(Artifact)。组ID、构件ID、版本三个元素唯一定位一个构件。 JDBC是Java Database Connectivity的缩写,职责是为Java应用程序访问数据库提供一种通用手段。JDBC API为Java开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成。 对象关系映射(Object Relational Mapping,ORM)是一种为了解决面向对象与关系数据库存在的互不匹配现象的技术。ORM可以在对象和关系数据库之间建立映射,使得程序可以通过操作对象的方式来访问关系数据库。MyBatis是一个优秀的Java持久化框架,可以实现ORM映射、查询缓存等常用功能。 Spring为Java开发提供了各种基础设施,Spring框架是Spring提供的支持企业级应用开发的项目,其核心是一个控制反转(Inversion of Control,IoC)和面向切面(Aspect Oriented Programming,AOP)的容器。控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就从应用转移到了外部容器,控制权的转移就是所谓反转。依赖注入是指在运行时,由外部容器动态地将依赖对象注入到组件中。Spring框架就是一个大容器,可以将所有对象的创建和依赖关系的维护交给Spring框架管理。 JSP程序设计(第2版)前言Spring MVC是Spring框架的一个模块,是一个MVC设计模式的Web框架。Spring MVC中的控制器可以被注入Spring容器中的服务层组件,而服务层组件可以被注入持久层组件。Spring MVC的Web应用由三层架构组成: Web层、业务层、持久层。注解@Controller和@RestController用于定义Web层的控制器,注解@Service用于定义服务层组件,注解@Repository用于定义持久层的数据访问组件,而注解@Autowired使得Spring可以自动组装组件。 Spring为主流的应用框架提供了集成支持。在Spring中集成持久层框架MyBatis,开发者可在XML映射文件中编写SQL语句,给出Mapper的实现,这个XML映射文件就相当于数据访问对象的实现类。Spring扫描XML映射文件创建持久层组件,并将持久层组件注入到服务层组件中。 从头开始配置一个Spring MVC+Spring IoC+MyBatis的项目对于开发者理解控制反转、依赖注入、MVC设计模式、Web分层架构、面向切面等基础知识是必要的。Spring还提供了更简单的Spring Boot项目来创建和配置Spring应用,它可以创建独立运行的、产品等级的、只需最少配置的、基于Spring的应用。 本书从实践出发,通过大量的小例子深入浅出地介绍Java Web应用程序的设计开发。第1章介绍JSP的工作原理、Java Web应用程序的目录结构、常见的应用服务器、集成开发环境Eclipse。第2章介绍HTML标签,以及如何读取表单数据。第3章介绍JSP的基本语法,包括指令元素、脚本元素、动作元素。第4章介绍HTTP协议和全部9个JSP内置对象。第5章介绍使用JavaBean封装业务逻辑和在JSP页面中使用JavaBean。第6章介绍项目管理工具Maven,它还是一个依赖管理工具,提供了中央仓库,能够自动下载构件。第7章介绍JSP的基础Servlet技术,并用Servlet实现生成JPEG图片、发送电子邮件、上传文件。第8章介绍监听器和过滤器。监听器(Listener)用于监听并处理Web应用中发生的各种事件。过滤器(Filter)可以截获HTTP的请求和响应。第9章介绍MVC设计模式,使用JSP + Servlet + JavaBean可实现MVC模式。第10章介绍JDBC连接MySQL数据库,除了介绍基本数据库操作之外,还介绍事务处理、存储过程、连接池和数据源等高级数据库技术。第11章介绍表达式语言EL,它可以用更简洁的语法读取属性值。第12章介绍JSP标准标签库JSTL,使用JSTL标签可以让页面更简洁并易于维护。第13章介绍一种持久层框架MyBatis,它是一个SQL映射框架(半自动ORM框架),而不是一个完整的ORM框架。MyBatis使用简单的XML映射器就可以免除了几乎所有的JDBC代码。第14章介绍Spring MVC,首先介绍控制反转和依赖注入的概念,接着介绍Spring MVC的概念和如何配置、接收多个请求参数、注入服务层组件、响应JSON、Spring和MyBatis的集成,以及使用AOP配置声明式数据库事务。 本书第6章使用Maven管理项目,之后的各章项目均使用Maven来管理JAR文件,学会用Maven管理项目至关重要。第10章JDBC访问数据库的内容从第4章就开始使用,需提前学习如何连接MySQL数据库和执行SELECT语句。第11章表达式语言EL和第12章标准标签库JSTL的内容可以只掌握类似${student.name}的EL和迭代标签。Spring MVC + Spring IoC + MyBatis的方案是当前Java Web后端开发主流的企业级解决方案,第13章持久层框架MyBatis和第14章Spring MVC需要重点掌握。 Java Web开发是一门实践性很强的课程。本书在讲解每个知识点的时候都给出了对应的代码。希望这些代码对读者的实际开发有帮助,也希望读者能够亲自动手编写和调试这些代码。交流可以促进学习,欢迎您写信给本书作者并加入课程交流群。 佟强2022年4月