Java Web高级编程 前言

代码示例

作为一本软件开发书籍,该书广泛地应用了代码示例,通过它们证明我们正在讨论的主题。大多数情况下,这些示例都是完整的IDE项目,你可以在DE中打开、编译和执行。所有的示例都可以从wrox.com代码下载网站和这个网址获得。请访问网址并单击Download code选项卡。你可以将所有代码示例下载为单个ZP文件或者将每章的示例单独下载为一个ZP文件。在每章的示例中,可以找到每个示例的两个版本:一个IntelliJ IDEA项目和一个Eclipse项目。使用自己选择的IDE对应的版本即可。如果你使用的不是这两种IDE中的某一个,那么你的IDE应该能够将IntelliJ IDEA项目作为简单的Maven项目导入。

Maven依赖

本书中的样例代码将广泛运用第三方依赖,例如Spring FrameworkHibernate ORMSpring Security。在下载网站的代码中包含这些依赖JAR,将使下载文件变大,你可能需要下载几百兆的文件。为了解决这个问题,样例代码将使用Apache Maven及其依赖管理功能。所有的示例项目都是Maven项目。在IDE中打开每个项目时,IDE将自动在本地Maven库中查找这些依赖,或者如果需要的话,IDE将下载它们到本地Maven库中。
在每章的首页,你将会看到一个标题为”本章新增的Maven依赖”的区域。该部分列出了本章中新增的Maven依赖。你也可以查看pom. xml文件来检查每个示例项目的依赖。某些章节未引入新的Maven依赖,但大多数章节都引入了。
每个Maven依赖都会有作用域,用于定义依赖在哪个类路径上可用。

  • 最常见的作用域——"compile"作用域——表示该依赖在项目的编译类路径上、单元测试编译和执行类路径上以及运行应用程序时的最终运行时类路径上可用。在Java EE Web应用程序中,这意味着依赖将被复制到所部署的应用程序中。
  • " runtime"作用域表示依赖将在单元测试执行和运行时执行类路径上可用,但不像" compile"作用域一样在编译应用程序或者执行单元测试时也可用。一个运行时依赖将被复制到所部署的应用程序中。
  • 最后," provided"作用域表示运行应用程序的容器将会提供该依赖。

Java EE应用程序中,这意味着依赖已经在Servlet容器或应用服务器的类路径上了,因此不需要再复制到部署的应用程序中。 MavenIDE将保证在编译应用程序和执行单元测试时," provided"作用域的依赖是可用的。 Maven还有其他类型的作用域,但在本书中将只会用到这些。
在文本和示例项目中,有一些Maven依赖将会包含排除( (exclusions)),用于忽略某些特定的依赖——它们被称为临时依赖。很多时候这些排除都是多余的,列出它们只是为了使代码更清晰。当某个依赖依赖于另一个旧版本的依赖,而不是现在正在使用的依赖时,通过排除可以更清楚地表示这里出现了矛盾,并且避免了由Maven的最近算法所引起的问题。不过,某些排除的存在是由于Java SeJava ee的新版本已经提供了依赖,或者因为依赖ID发生了变化。当出现这种情况时,文本中会进行提示。

将安全相关的内容安排在最后的原因

坦白地说,应用程序安全会影响其他内容的学习。在产品中添加认证和授权所使用的技术将会干扰你的代码,并使学习过程变得困难。安全是第一位的,而且一直记得安全问题永远也不是错误。不过,只要使用了正确的工具,在项目完成(或基本上完成之后为它添加验证和授权也是相当简单的一件事。本书首先将关注于如何使用工业标准工具创建出高质量、特性丰富的web应用程序。在学会了创建强大应用程序所需的技能之后,本书的第Ⅳ部分将向你展示如何为现有的应用程序添加认证和授权,保护它不受未授权的和恶意访问的攻击