javaserver_什么是JSP? JavaServer页面简介

javaserver

JavaServer Pages(JSP)是一种Java标准技术,使您能够为Java Web应用程序编写动态的,数据驱动的页面。 JSP建立在Java Servlet规范之上。 两种技术通常可以协同工作,尤其是在较旧的Java Web应用程序中。 从编码的角度看,它们之间最明显的区别是,使用servlet编写Java代码,然后将客户端标记(如HTML)嵌入到该代码中,而使用JSP时,您首先使用客户端脚本或标记,然后嵌入使用JSP标记将页面连接到Java后端。

JSP还与JSF(JavaServer Faces)紧密相关, JSF是用于构建MVC(模型-视图-控制器)Web应用程序的Java规范。 与JSF相比,JSP是一种相对简单且较旧的技术,而JSF是Eclipse Mojarra ,MyFaces和PrimeFaces等Java Web框架的标准。 虽然将JSP用作旧JSF应用程序的前端并不少见,但是Facelets是现代JSF实现的首选视图技术。

虽然JSP可能不是构建动态Web页面的首选,但它是Java Java Web技术的核心。 JSP页面相对较快且易于构建,并且它们与Tomcat之类的servlet容器中的 Java servlet无缝交互。 您将在较旧的Java Web应用程序中遇到JSP,有时您可能会发现它对于构建简单的动态Java Web页面很有用。 作为Java开发人员,您至少应该熟悉JSP。

本文将简要介绍JavaServer Pages,包括JSP标准标记库(JSTL) 。 示例向您展示了如何编写一个简单HTML页面,如何嵌入JSP标记以连接到Java servlet以及如何在servlet容器中运行该页面。

请参阅本系列以前的文章,以了解有关Java servletJavaServer Faces的更多信息。

雅加达EE中的JSP

在Java EE 8发布之后,Oracle将Java Enterprise Edition(Java EE)的管理权移交给了Eclipse Foundation。 展望未来,Java企业平台已更名为Jakarta EE 。 与Java Servlet和JSF规范一起,JSP是包含在Jakarta EE中的持续支持和升级的Java Web技术之一。

编写JSP页面

一个简单的JSP页面(.jsp)由嵌入JSP标签HTML标记组成。 在服务器上处理文件时,HTML呈现为应用程序视图,网页。 嵌入式JSP标记将用于调用服务器端代码和数据。 图1中的图显示了HTML,JSP和Web应用程序服务器之间的交互。

jsp概述 马修·泰森(Matthew Tyson)

图1. JSP概述

清单1显示了一个简单的JSP页面。

清单1.一个简单的JSP页面

<html>
  <body>
    <p>${2 * 2} should equal 4</p>
  </body>
</html>

在清单1中,您将看到一个包含JSP表达式HTML块,该JSP表达式是使用Expression Language(EL)编写的Java服务器指令。 在表达式“ ${2 * 2} ”中,“ ${} ”是用于将代码插入到HTML中的JSP语法。 执行时,JSP将输出执行表达式内部内容的结果。 在这种情况下,输出将为数字4。

Servlet容器中的JSP

JSP页面必须部署在Java servlet容器内。 为了部署基于JSP和servlet的Java Web应用程序,您将.jsp文件,Java代码和应用程​​序元数据打包在.war文件中,该文件是一个简单的.zip文件,具有用于Web应用程序的常规结构。

将JSP加载到servlet容器后,它将被编译为servlet。 JSP和Java Servlet具有相似的特性,包括访问和响应请求对象的能力。 Apache Tomcat 9x是Servlet 4.0和JSP 2.3规范的参考实现。 (请注意,JSP 2.2和2.3之间的更新相对较小。)

Servlet容器与应用程序服务器

在Java世界中, Servlet容器 (也称为Web服务器)就像应用程序服务器的精简(啤酒)版本。 Servlet容器处理请求和响应交互,并允许这些交互与Web应用程序的Java企业功能的子集对接。 Java应用程序服务器将servlet容器作为完整Java企业堆栈的一部分 ,其中包括EJB,JPA,JMS等。

JSP的示例应用

我们将在Tomcat中使用一个示例应用程序来使您开始使用JavaServer Pages。 如果尚未安装Tomcat,请浏览至Tomcat下载页面,然后为您的操作系统选择Tomcat安装。 撰写本文时,Tomcat 9是当前发行版 ,与Servlet 4.0和JSP 2.3兼容。

您可以将Tomcat作为Windows服务安装,或者使用/bin/catalina.sh start/bin/catalina.bat从命令行运行它。 无论哪种方式,都启动Tomcat,然后转到localhost:8080以查看图2所示的Tomcat欢迎页面。

Tomcat欢迎1 马修·泰森(Matthew Tyson)

图2. Tomcat欢迎页面

Tomcat中的隐式对象

在Tomcat欢迎页面上,单击“ 示例”链接,然后单击“ JSP示例”

接下来,打开“ 隐式对象执行” Web应用程序。 图3显示了此应用程序的输出。 花一点时间研究此输出。

隐式jsp 马修·泰森(Matthew Tyson)

图3.示例JSP输出

请求参数

隐式对象是可通过JSP页面访问的内置对象。 作为网页开发人员,您将使用这些对象创建对诸如请求参数之类的东西的访问,这些请求参数是发出HTTP请求时从浏览器发送过来的数据。 考虑隐式对象的浏览器URL:


http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar

该参数是?foo=bar ,您可以在网页的输出中看到它,表显示“ EL Expression”,值是“ bar”。 要对此进行测试,请将URL更改为http:// localhost:8080 / examples / jsp / jsp2 / el / implicit-objects.jsp?foo = zork按Enter ,您将看到更改反映在输出中。

此示例是使用JSP标记访问服务器端请求参数的非常简单的介绍。 在这种情况下,JSP页面使用称为param的内置(隐式)对象访问Web应用程序的请求参数。 在清单1中看到的JSP表达式语法中,可以使用param对象。

在该示例中,我们使用表达式进行一些数学运算: ${2 * 2} ,其输出为4

在此示例中,该表达式用于访问一个对象和该对象上的字段: ${param.foo}

Web应用程序中的JSP

在“隐式对象”页面上,单击后退箭头,然后单击“ 源”链接。 这将带您进入Implicit Objects Web应用程序的JSP代码,如清单2所示。

清单2. Implicit Objects Web应用程序的JSP代码

<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])}&nbsp;</td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>

JSP功能

如果您熟悉HTML,那么清单2应该看起来很熟悉。 您具有预期HTML <td>元素,然后是清单1中引入的${ } JSP表达式语法。但是请注意param.foo<td>${fn:escapeXml(param["foo"])}&nbsp;</td> 。 “ fn:escapeXML() ”是一个JSP函数。

JSP函数封装了许多可重用的功能。 在这种情况下,功能是转义XML。 JSP提供了多种功能,您也可以自己创建功能。 要使用功能,请将其库导入JSP页面,然后调用该功能。

在清单2中,该行包括了escapeXML函数:


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

语法非常清楚:它导入所需的函数并为它们分配一个前缀(在本例中为“ fn”),该前缀可在所有以下表达式中使用。

JSP标准标记库(JSTL)

清单2中的import行调用taglib ,它是标记库 (或本例中的JSP标准标记库(JSTL))的缩写。 标记库定义了JSP功能的可重用位。 JSTL是标准标记库,包含每个Servlet和JSP实现(包括Tomcat)附带的标记库的集合。

“功能”库只是JSTL附带的taglib之一。 另一个常见的taglib是core库,您可以通过调用以下代码导入:


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

像“ fn”一样,“ c”是常规名称,您会在大多数JSP页面中看到它。

保护JSP页面

核心库中的示例标签是


<c:out value = "${'<div>'}"/> 

它将输出<div>标记,其中XML已经转义。 此功能很重要,因为通过${variable}将内容直接输出到网页为脚本注入攻击打开了大门。 此简单功能用于保护网页免受此类攻击。

核心库还包括用于迭代和流控制(如IF / ELSE处理)的各种标签。

JSTL标签分类

JSTL中包含五组标签,每组标签都是针对Web应用程序功能的特定领域而设计的:

  • JSTL核心:处理逻辑和执行流程; 常规标签:“ c
  • JSTL格式:处理格式(如日期)和国际化; 常规标签:“ fmt ”。
  • JSTL SQL:处理查询SQL数据库(通常在视图层中不建议这样做); 常规标记:“ sql ”。
  • JSTL XML:处理XML文档; 常规标签:“ x ”。
  • JSTL函数:主要处理String操作; 常规标签:“ fn ”。

在JSP页面中调用taglib

现在您已经掌握了JSP基础知识,现在让我们对示例应用程序进行更改。 首先,在Tomcat安装中找到“隐式对象”应用程序。 路径是: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el

打开此文件并找到以下functions


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

在此行下方,添加新行:


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

点击Return并添加另一行:


<c:out value = "${'This is a test of the JSTL Core Library'}"/>

现在,通过http:// localhost:8080 / examples / jsp / jsp2 / el / implicit-objects.jsp?foo = bar重新加载页面。

您应该看到更新反映在输出中。

翻译自: https://www.infoworld.com/article/3336161/what-is-jsp-introduction-to-javaserver-pages.html

javaserver

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值