本示例演示如何创建一个简单的 JSP 页面

在之前的教程中,我向您展示了如何使用 Servlet 处理请求响应请求参数上传文件。 但是,您可能已经注意到,使用 servlet 呈现 Web 应用程序的 HTML 内容是多么不便。 重复调用ServletOutputStreamPrintWriter类上的方法以输出内容,并且必须将 HTML 内容放入 Java 字符串中,这需要转义引号,这确实是一个难题。 在此示例中,您将了解 Java Server Pages 以及它们如何使您的生活更加轻松。

什么是 JSP?

Java EE 规范的创建者意识到,使用 servlet 生成纯 HTML 内容需要付出的精力比需要的多。 纯 HTML 页面的问题在于它们是静态的。 使用 servlet 时,我们可以生成动态内容并将其呈现为 HTML。 JavaServer Pages(也称为 JSP)是解决此问题的方法。 JSP 本质上是一种混合解决方案,结合了 Java 代码和 HTML 标签。 JSP 除了 Java 代码外,还可以包含任何 HTML 标记。

JSP 示例

在下面的示例中,我们将显示一个简单的 JSP 页面,其中显示了当前时间。

首先让我们看一下项目结构:

Java JSP 示例 - 图1

JSP 项目结构

如您所见,结构非常简单。 一个 Maven POM 文件,用于处理依赖关系和构建属性:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>net.javatutorial.tutorials</groupId>
  5. <artifactId>JSPExample</artifactId>
  6. <version>1</version>
  7. <packaging>war</packaging>
  8. <name>JSPExample</name>
  9. <url>https://javatutorial.net</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>javax.servlet</groupId>
  16. <artifactId>javax.servlet-api</artifactId>
  17. <version>3.1.0</version>
  18. <scope>provided</scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>javax.servlet.jsp</groupId>
  22. <artifactId>javax.servlet.jsp-api</artifactId>
  23. <version>2.3.1</version>
  24. <scope>provided</scope>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <finalName>jspexample</finalName>
  29. <plugins>
  30. <plugin>
  31. <groupId>org.apache.maven.plugins</groupId>
  32. <artifactId>maven-war-plugin</artifactId>
  33. <version>2.3</version>
  34. <configuration>
  35. <warSourceDirectory>src/main/webapp</warSourceDirectory>
  36. </configuration>
  37. </plugin>
  38. <plugin>
  39. <groupId>org.apache.maven.plugins</groupId>
  40. <artifactId>maven-compiler-plugin</artifactId>
  41. <version>3.1</version>
  42. <configuration>
  43. <source>1.8</source>
  44. <target>1.8</target>
  45. </configuration>
  46. </plugin>
  47. </plugins>
  48. </build>
  49. </project>

一个仅包含应用程序显示名称的简单web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6. version="3.1">
  7. <display-name>JSP Example</display-name>
  8. </web-app>

和实际的 JSP 文件:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.time.LocalDateTime" %>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>Simple JSP Application</title>
  7. </head>
  8. <body>
  9. <h1>Hello world!</h1>
  10. <h2>Current time is <%= LocalDateTime.now() %></h2>
  11. </body>
  12. </html>

现在让我们仔细看看index.jsp

JSP 中可以使用几种不同类型的标签。 在上面的示例中,我们使用指令类型<% @page… %>将页面编码设置为 UTF-8

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

默认情况下(如果我们的 JSP 文件中不包括此行),字符编码将设置为 ISO-8859-1,如果我们要使用非拉丁字母的特殊字符和字母,这将很不方便。

我们使用另一个指令导入LocalDateTime

  1. <%@ page import="java.time.LocalDateTime" %>

最后,为了显示当前时间,我们使用了一个名为表达式的特殊标签<%= … %>。 表达式包含简单的 Java 代码,这些代码返回可以写到客户端输出的内容,并且表达式将该代码的返回变量输出到客户端:

  1. <h2>Current time is <%= LocalDateTime.now() %></h2>

部署应用程序后,转到http://localhost:8080/jspexample/index.jsp

您应该会看到与此页面相似的页面

Java JSP 示例 - 图2

JSP 页面输出

您可以在我们的 GitHub 存储库中找到此示例的源文件。