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

在之前的教程中,我向您展示了如何使用 Servlet 处理请求,响应,请求参数和上传文件。 但是,您可能已经注意到,使用 servlet 呈现 Web 应用程序的 HTML 内容是多么不便。 重复调用ServletOutputStream或PrintWriter类上的方法以输出内容,并且必须将 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 存储库中找到此示例的源文件。