tanghaorong

1、前言

大家应该都很清楚,JSP也是一种古老的技术了,在实际的项目中现在基本不用了,或许在很老的项目中可以看到。而现在 在前后端分离的时代,后端只需要返回JSON给前端就可以了,页面完全不需要后端管。那我们还需要学习JSP吗?要呀!尤其对于新手来说,JSP肯定要学习的,但是可以不用深入的学习JSP的各种内容,但至少再看到JSP的时候,你能知道什么是JSP,能看懂JSP的代码。而且对于新手来说,刚刚开始学习JavaWeb的时候,前端页面更多使用的是JSP。所以不要求JSP很精通,但起码看到要会使用吧。虽然现在市面上有许多代替JSP的产品了,如常见的模板引擎如:Freemarker、Thymeleaf、Velocity等。它的用法跟JSP差不太多,但JSP出现的最早,它是大哥,所以我们还是跟着大哥一步一步的走吧。

2、JSP技术的简介

JSP是Java Server Pages的简称,即Java服务器页面。它是由Sun公司倡导的一种用于开发动态网页的技术标准。其特点就是在传统的网页HTML文件(*.htm、*.html)中插入Java程序段(Scriptlet)和JSP标记(Tag)。从而形成JSP文件(*.jsp)。其中HTML提供静态的数据,而JSP技术允许在页面中嵌套Java代码,所以它提供动态数据,不过一般不会在JSP页面中编写Java代码,只是在JSP页面中动态获取数据。

其实JSP本身就是一种Servlet。因为JSP在被访问后会被编译为一个Java类,该类继承了HttpJspBase,而HttpJspBase类又继承了HttpServlet。所以我们访问JSP时,其实不是在访问JSP,而是在访问JSP编译过后的那个Servlet。因为Servlet输出HTML非常困难,所以JSP就是替代Servlet输出HTML的。

JSP技术的特点:JSP技术所开发的web应用程序是基于Java的,它拥有Java跨平台的特性,以及业务代码分离,组建重用,基础Java Servlet功能和预编译功能。

  • 跨平台:由于JSP是基于Java语言的,因而它可以使用Java的API,所以也是跨平台的,可以应用在Windows、Linux、Mac和Solaris。
  • 业务代码分离:采用JSP开发的项目,通常使用HTML语言来设计和格式化静态页面内容,而使用JSP标签来实现动态部分,业务代码通常使用Servlet、Struts、Springmvc等业务控制层来处理,从而实现业务层和视图层分离,这样,JSP只负责显示数据即可,这样,修改业务代码不会影响JSP页面代码。
  • 组件重用:JSP中,可以使用JavaBean编写业务组件,也就是使用一个JavaBean封装业务处理代码或者作为一个数据处理模型,这个JavaBean可以重复使用,也可以应用到其他应用程序中。
  • 继承Java Servlet功能:JSP的本质是Servlet,因此说JSP拥有Servlet的所有功能。
  • 预编译:用户首次通过浏览器访问JSP页面时,服务器对JSP页面代码进行编译,并且仅执行一次编译,编译后被保存,下次访问时直接执行编译过的代码,节约了服务器资源,提升了客户端访问速度。

3、JSP的基础语法

3.1、JSP的注释

在jsp中常用的注释有两种:显示注释和隐式注释。

注释类型 描述
显示注释 HTML注释:<!- - 注释内容- ->
隐式注释 Java注释://单行注释 、/*…多行注释…*/
隐式注释 JSP专有注释:<%- - 注释内容- -%>

其中HTML注释在浏览器中查看源文件的时候是可以看得到的。而 Java 注释和 jsp 注释在浏览器中查看源文件时是看不到注释的内容的。

3.2、JSP的指令元素

JSP指令(Directives)主要用来提供整个JSP网页的信息,并用来设定JSP网页的相关属性,例如:设置网页的编码格式,语法,信息等。JSP指令的基本语法格式为:<%@ 指令 属性名="值" %> 。如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写,如下所示:

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date"%>
<!-- 也可以合并来设置,如下所示:-->
<%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>

在 JSP 2.0规范中共定义了三个指令:

  • page指令
  • include指令
  • taglib指令

每个指令都有自己的属性,下面来介绍这三种指令。


①、page指令

我们通过page指令来设置JSP页面的属性,它作用整个JSP页面,所以为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。page指令一共有13个属性,下面介绍一下:

属性 参数 描述
language java 主要用来指定用何种语言来解释JSP网页,目前只能有Java来解释
import {package.class | package.*}, ... 指定此JSP网页引入哪些Java API
extends package.class 指定此JSP网页产生的Servlet所继承的类
pageEncoding characterSet | ISO-8859-1 指定此JSP网页的编码属性
session true | false 指定此JSP网页是否使用session(默认true)
buffer none | 8kb | sizekb 指定此JSP输出流是否有缓冲区(默认有,大小8KB的缓冲区)
autoFlush true | false 指定此JSP输出流的缓冲区是否自动清除(默认true)
isThreadSafe true | false 已经不使用了(默认true)
info text 表示此JSP的网页信息
erroPage relative_url 如果网页发生异常错误,则会重定向到指定的URL地址,前提是isErrorPage为true
isErrorPage true | false 指定此JSP能否在发生错误是转向另一个URL(默认true)
contentType mimeType;charset=characterSet | text/html;charset=ISO-8859-1 指定此JSP网页的编码方式
isElIgnored true | false 表示此JSP在执行时是否忽略EL表示(默认true)

简单举例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" pageEncoding="utf-8" %>

注意:这些指令必须包含在<%@page key=value …… %>中,而且只有import实现可以重复设置,其余属性只能设置一次或者不设置。

还有一点就是page指令中的errorPage属性。我们是可以在web.xml文件中使用<error-page>元素为整个Web应用程序设置错误处理页面。 <error-page>元素有3个子元素,<error-code><exception-type><location>

  • <error-code>子元素指定错误的状态码,例如:<error-code>404</error-code>
  • <exception-type>子元素指定异常类的完全限定名,例如:<exception-type>java.lang.ArithmeticException</exception-type>
  • <location>子元素指定以“/”开头的错误处理页面的路径,例如:<location>/404Error.jsp</location>
<!--处理404错误-->
<error-page>
    <error-code>404</error-code>
    <location>/404Error.jsp</location>
</error-page>
<!--处理500错误-->
<error-page>
    <error-code>500</error-code>
    <location>/500Error.jsp</location>
</error-page>

而如果你在某个JSP的页面设置了errorPage属性如:<%@ page errorPage="/error.jsp" %>,那么在web.xml文件中设置的错误处理将不对该页面起作用。


②、include指令

这个指令听名字是包含的意思。没错,include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:<%@ include file="relativeURL"%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。被引入的文件可以使用任意的扩展名,即使其扩展名是html。

include指令使用举例:创建main.jsp、head.jsp和foot.jsp页面,分别作为jsp页面主体、头部和尾部,存放于Web根目录下,代码如下:

<%-- main.jsp:--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主网页</title>
</head>
<body>
    <%@ include file="head.jsp"%>
    <hr>
    <%@ include file="foot.jsp"%>
</body>
</html>
<%-- head.jsp: --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>这是网页head</title>
</head>
<body>
    这是网页head
</body>
</html>
<%-- foot.jsp: --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>网页foot</title>
</head>
<body>
    这是网页foot
</body>
</html>

运行结果如下:

image

补充:还有一种方式引入页面:jsp:include指令,功能与@include类似,后面会介绍。@include指令和jsp:include指令的在于:

  • @include只是把别的页面内容包含进来,属于静态包含。
  • jsp:include为动态包含,如果被包含的页面是JSP,则先处理之后再将结果包含,而如果包含的是非*.jsp文件,则只是把文件内容静态包含进来。

③、taglib指令

在JSP中,可以直接使用JSP提供的元素来完成特定的功能,而通过使用taglib指令,我们就可以在页面中使用自定义的标签,将标签库描述符文件导入到JSP页面即可。taglib指令的使用格式如下:

<%@ taglib uri="tigLibURL" 或 tagDir="tagDir" prefix="tagPrefix" %>

参数说明:

  • uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。
  • tagDir属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。
  • prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。

例如后面需要使用JSTL的代码:

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

上面就是通过<c:set />标签将"hellojsp”值赋给变量name。

3.3、JSP的表达式

JSP表达式、小脚本、声明这三者统称为JSP脚本表达式(expression),它用于将程序数据输出到客户端。下面对JSP表达式先进行讲解。

JSP表达式的语法:<%= Java表达式 %>。例如输出当前系统时间:

<%= new java.util.Date() %>

JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。JSP脚本表达式中的变量或表达式后面不能有分号(

分类:

技术点:

相关文章: