JSP相关概念

本文详细介绍了JSP(Java Server Pages)的概念,包括JSP的运行机制、技术特点以及编写JSP文件的基础知识。讨论了JSP的基本语法,如注释、指令和脚本元素,并探讨了JSP的三大指令:page、include和taglib。此外,还讲解了JSP脚本元素中的声明语句、表达式和Scriptlet,以及JSP动作元素的使用,如include、forward、param等。最后,文章阐述了JSP的九种内置对象,如request、response、session和application,以及它们在Web开发中的作用。
摘要由CSDN通过智能技术生成

更多内容可以访问我的个人博客

JSP概述

1. JSP简介

JSP指的是Java Server Pages,它是由SUN公司在1996年6月发布的用于开发动态Web应用的一项技术。 JSP是基于Java Servlet的Web开发技术,由于其所具有的简单易学和跨平台等的特性,使其在各种动态Web程序设计语言中脱颖而出,它具有一套完整的语法规范,目前已经成为了Web开发中的主流选择,广泛应用于各个领域中。

2. JSP的技术特点

JSP通过在使用HTML编写的静态网页中添加一些专有标签以及脚本程序来实现网页中动态内容的显示。它具有如下特点:

  • 能够在任何Web或应用程序服务器上运行。(JSP无需重新编译,因为Java字节码是平台无关)

  • 程序逻辑和页面显示相分离

  • 采用标签简化页面开发。

  • 组件可重用。

3. JSP的运行机制

在这里插入图片描述

当一个JSP文件第一次被请求时,JSP容器会先把该JSP文件转换成一个Servlet。

4. 编写JSP文件
<html>
    <head>
        <title>JSP</title>
    </head>
    <body>
        My JSP
    </body>
</html>

如上内容保存为html文件则双击可直接打开;

若保存为JSP文件,则必须通过发布到JSP容器,如Tomcat中的某个Web应用才能查看显示效果。

例如将jsp复制到< TOMCAT_HOME>\webapps\jsptest目录下,打开链接http ?/localhost:8080/jsptest/myjsp.jsp

从这个例子可以看出,HTML语言中的元素都可以被JSP容器所解析。实际上,JSP只是在原有HTML文件中加入了一些具有Java特点的代码,称为JSP的语法元素


JSP基本语法

在传统的HTML页面文件中嵌入脚本语言和JSP标签就构成了一个JSP页面文件。一个JSP页面可由5种元素组合而成:

① HTML页面内容
② JSP注释
③ JSP指令
④ JSP脚本元素
⑤ JSP动作元素


①JSP注释

JSP中的注释有两种,一种是可以在客户端显示的注释,称为HTML注释,一种是发送到服务器端,在客户端不能显示的注释,称为JSP注释

HTML注释以< !–开始,以–>结束,中间包含的内容即为注释部分。其形式为:

< !–注释内容–>

JSP注释以< %–开始,以–%>结束,中间包含的内容即为注释部分。其形式为:

<%–注释内容–%>

由于在JSP标签<% %>中包含的是符合Java语法规则的Java代码,所以其中可以出现Java形式的注释。同样不会在浏览器端HTML源代码中显示。

<% // 注释 %>

②JSP指令

JSP指令用来向JSP引擎提供编译信息。可以设置全局变量,如声明类、要实现的方法和输出内容的类型等。一般的,JSP指令在整个页面范围内有效,且并不向客户端产生任何输出。所有的JSP指令都只在当前的整个页面中有效。

JSP指令语法格式为:

<%@指令标记 [ 属性=“值” 属性=“值” ]%>

JSP指令有3类,分别为:

  • page指令

  • include指令

  • taglib指令

1. page指令

page指令称为页面指令,用来定义JSP页面的全局属性,该配置会作用于整个JSP页面。page指令用来指定所使用的脚本语言、导入指定的类及软件包等。

page指令的语法格式为:
<%@ page 属性1=“属性值1” 属性2=“属性值2”……%>

例如:

<%@ page contentType=“text/html;charset=GB2312” import=“java.util.*” %>

也可以是以下这样多条page指令page指令中只能给import属性指定多个值,而其他属性只能指定一个值

<%@ page contentType=“text/html;charset=GB2312” %>

<%@ page import=“java.util.* ” , “java.awt.*” %>

在这里插入图片描述

2. include指令

include指令是文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP文件合并成一个新的JSP页面。需要注意的是,如果被插入的文件发生了变化,则包含这个文件的JSP文件需要被重新编译。
include指令的语法格式为:
<%@ include file=”被包含文件的地址”%>
include指令只有一个file属性,该属性用来指定插入到JSP页面目前位置的文件资源。
被插入的文件可以是一个文本文件、一个HTML文件或一个JSP文件,但要保证被插入的文件必须是可访问的

例如:

<%@ include file=”a.txt”%>

<%@ include file=”a.html”%>

<%@ include file=”a.jsp”%>

3. taglib指令

taglib指令用来引用标签库并设置标签库的前缀。这个指令允许JSP页面使用用户自定义的标签,它也可以为标签库命名,标签在这个库中定义。

taglib指令的语法格式为:
<%@ taglib uri=”tagLibraryURI” prefix=”tagPrefix”%>
taglib指令包含了两个属性,一个是uri,一个是prefix。其中,uri属性用来指定标签文件或标签库的存放位置,prefix属性则用来指定该标签库所使用的前缀

比如:

<%@ page contentType="text/html;charset=GB2312"%>
<%-- 声明要引用的标签库 --%>
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core  %>
<html>
     <head>
         <title>JSP</title>
     </head>
     <body>
     <%-- 使用JSTL标签输出 --%>
     <c:out value="taglib example! ">
      </body>
</html>
③JSP脚本元素

脚本元素是JSP中使用最频繁的元素,通过JSP脚本可以将Java代码嵌入到HTML页面中。所有可执行的Java代码,都可以通过JSP脚本来执行。

JSP脚本元素主要包含如下3种类型:

  • JSP声明语句

  • JSP表达式

  • JSP Scriptlet

1. JSP声明语句

JSP声明语句用于声明变量和方法。JSP声明语句的语法格式为:
<%! 变量或方法定义 %>
注意:变量的类型可以是Java语言中所提供的任意数据类型。使用JSP声明语句声明的变量将来会转换成Servlet类中的成员变量,这些变量在整个JSP页面内都有效,因此也被称为JSP页面的成员变量。
下面代码中使用声明语句声明了不同类型的变量:

<%! int a=1, b;
String str1=null, str2=”JSP”;
Date date;
%>

声明方法时只需将方法定义放置在”<%! “和" %>"之间即可。使用JSP声明语言声明的方法将来会转换成Servlet类中的成员方法。当方法被调用时,方法内定义的变量被分配内存,调用完毕即释放。

<%@ page contentType="text/html;charset=GB2312"%>

<html>
     <head>
     <title>JSP</title>
     </head>
     <%!
         /* 声明整型变量a */
         public int a;
         /* 声明方法printStr */
         public String printStr()
         {
             return "JSP Method";
         }
      %>
 <body>
 <%
     out.println("a=" + a); /* 输出a值 */
     a++ /* a自增 */
 %>
 <br>
 <%
     out.println(printString());  /* 调用printStr()方法,输出其返回值
 %>
 </body>
</html>

JSP页面会被编译成Servlet类,而在容器中只会存在一个Servlet类的实例。在JSP中声明的变量是成员变量,它只在创建Servlet实例时被初始化一次,此后,该变量的值将一直被保存,直到该Servlet实例被销毁。

2. JSP表达式

在JSP中可以在“<%=”和“%>”标记之间插入一个表达式,这个表达式必须能够求值,并且计算结果会以字符串形式发送到客户端显示出来。JSP表达式的值会作为HTML页面的内容。("<%="是一个符号。=前面不能有空格)
如果表达式的值是一个字符串,则该表达式的值会直接在页面上显示处理,否则会先将表达式的值转换为字符串,再在页面上显示。
JSP表达式的语法格式为:
<%= 表达式 %>

例子:

<body>
    <%! 
        String str = "JSP expression";  /*声明变量*/
     %>
     <!-- JSP表达式 -->
     <%=str%>
</body>
  1. JSP Scriptlet

JSP Scriptlet是一段Java代码段。当需要使用Java实现一些复杂操作或控制时,JSP表达式往往不能满足要求,此时需要用到JSP Scriptlet。在JSP Scriptlet中声明的变量是JSP页面的局部变量,调用JSP Scriptlet时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。
JSP Scriptlet的语法格式为:
<% Java代码%>
JSP Scriptlet中可以包含变量、方法、表达式等内容

例子:

<body>
 <%
 String str = "JSP scriptlet"; /*声明字符串*/
 out.println(str);             /*输出字符串的值*/
 %>
</body>
④JSP 动作元素

JSP动作元素用来控制JSP的行为,执行一些常用的JSP页面动作。通过动作元素可以使用实现多行Java代码能够实现的效果,如动态插入文件、重用JavaBean组件、自定义标签等。
JSP中的动作元素主要包含下面7个:

< jsp:include>
< jsp:forward>
< jsp:param>
< jsp:plugin>
< jsp:useBean>
< jsp:setProperty>
< jsp:getProperty>

4.1 < jsp:include>

< jsp:include>动作元素提供了一种在JSP中包含页面的方式,既可以包含静态文件,也可以包含动态文件。

所谓的JSP页面动态包含某个文件,指的是当JSP页面运行时才会载入该文件,并不是简单的将被包含文件与JSP页面合并成一个新的JSP页面,JSP与它包含的文件在逻辑上和语法上都是独立的,当被包含的文件变化时,JSP页面运行时可以看到所包含文件变化后的显示结果,无需刷新。(与前文的JSP指令Include的区别,include指令包含的是静态文件)

< jsp:include page=“URL” flush=“true|false” />

page:被包含文件的URL,是相对路径

flush:当缓冲区满时,是否将其清空。默认为false

/* 例一:包含静态文件 */
<jsp:include page="hello.txt"> </jsp:include>

/* 例二:包含动态jsp文件 */
< jsp:include page="hello.jsp"> </jsp:include>
/* hello.jsp 文件如下 */
<%@ page contentType="text/html;charset=GB2312"%>
    <%@ page import="java.util.*" %>
    <%= (new Date()).toString() %>   /*jsp表达式 */

4.2 < jsp:forward>

< jsp:forward>是一种用于页面重定向的动作元素,它的作用是停止当前JSP页面的执行,而将客户端请求转交给另一个JSP页面。要注意转发与重定向的区别,转发是在服务器端进行的,不会引起客户端的二次请求,因此浏览器的地址栏不会发生任何变化,效率也比重定向要高。

< jsp:forward>的语法格式为:
< jsp:forward page=”转向页面的URL地址”/>

在包含< jsp:forward>动作元素的JSP文件中,在< jsp:forward>之前的代码能够被执行,当执行到< jsp:forward>时转向新页面,浏览器中显示的是新页面的执行效果,原jsp文件中位于< jsp:forward>之后的代码不再执行。

4.3 < jsp:param>

< jsp:param>是一种提供参数的附属动作元素,它以 “名-值”对的形式为其它动作元素提供附加信息,一般与

< jsp:include >、< jsp:forward>以及< jsp:plugin>联合使用。

< jsp:param>的语法格式为:
< jsp:param name= “参数名字” value= “指定给param的参数值”>

/* 与<jsp:include>动作元素一起使用 */
<body>
     <jsp:include page="sum.jsp">
         <jsp:param name="number" value="200" />
     </jsp:include>
</body>

/* sum.jsp */
<body>
     <%
         String str = request.getParameter("number");
         int n = Integer.parseInt(str);
         int sum = 0;
         for(int i=1;i<=n;i++){
             sum +=i;
         }
     %>
<br>
<%=sum%>
</body>

与< jsp:forward>和< jsp:plugin>一起合用也是这样,可以将< jsp:param>包含在< jsp:forward>和< /jsp:forward> 之间,将参数传递给重定向之后的页面,在重定向页面可以通过**request.getParameter(“paramName”);**获取参数。

4.4 < jsp:plugin>

< jsp:plugin>动作元素可以将服务器端的JavaBean或Applet下载到客户端执行。
其常用属性的说明如下:
type:指定插件类型,是Bean还是Applet。
code:指定执行的Java类名,必须以扩展名.class结尾。
codebase:指定被执行的Java类所在的目录。
name:指定Bean或Applet的名称。
archive:指定在Bean或Applet执行前要预先加载的类的 表。
align:指定Bean或Applet在显示时的对齐方式。
height:指定Bean或Applet显示时的高度。

4.5 < jsp:useBean>、< jsp:setProperty>、< jsp:getProperty>动作元素

这三个动作元素都是与JavaBean相关的。

1. < jsp:useBean>动作元素

用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,它充分发挥了Java组件重用的优势,同时也提高了JSP使用的方便性。

< jsp:useBean id=“beanInstanceName” class=“classname” scope=“page | request | session | application” />

  • page:表示该JavaBean实例在当前页面有效

  • request:表示该JavaBean实例在本次请求有效

  • session:在本次session有效

  • application:在本应用内一直有效

< jsp:useBean>动作元素中常常包含有< jsp:setProperty>,通过< jsp:setProperty>动作元素来设置Bean的属性值。

2. < jsp:setProperty>动作元素

获取到Bean实例之后,便可以利用< jsp:setProperty>动作元素来设置或修改Bean中的属性值。

< jsp:setProperty name=“beanInstanceName” property=“propertyName” value=“value” />

在使用< jsp:setProperty>之前,必须要使用< jsp:useBean>先声明Bean。

3. < jsp:getProperty>动作元素

用来提取指定Bean属性的值,并将其转换成字符串,然后输出。

< jsp:getProperty name=“beanInstanceName” property=“propertyName” />

在使用< jsp:getProperty>之前,必须要使用< jsp:useBean>创建它。

< jsp:useBean>、< jsp:setProperty>、< jsp:getProperty>一起使用实例:

<body>
<p>输出用户信息:
    <br>
    <!-- 创建jsp.User的实例,实例名为user -->
    <jsp:useBean id="user" class="jsp.User" scope="page" />
    <!-- 设置user的username属性 -->
    <jsp:setProperty name="user" property="username" value="jack" />
    <!-- 设置user的age属性 -->
     <jsp:setProperty name="user" property="age" value="27" />

    <!-- 输出 -->
    用户名:<jsp:getProperty name="user" property="username" />
    <br>
    年龄:<jsp:getProperty name="user" property="age" />
</body>

JSP内置对象

为了简化Web应用程序的开发,在JSP中定义了一些由JSP容器实现和管理的内置对象,这些对象可以直接在JSP页面中使用,而不需要JSP页面编写者对它们进行实例化。
JSP 2.0规范中定义了9种内置对象,这9个内置对象都是Servlet API接口的实例,由JSP规范对它们进行了默认初始化,因此,在JSP中它们已经是对象了,可以直接拿来使用。

内置对象名称相对应的类作用域
requestjavax.servelet.ServletRequestrequest
responsejavax.servelet.ServletResponsepage
pageContextjavax.servelet.jsp.pageContextsession
sessionjavax.servelet.http.HttpSessionpage
applicationjavax.servelet.ServletContextapplication
outjavax.servelet.jsp.JspWriterpage
configjavax.servlet.ServletConfigpage
pagejava.lang.Objectpage
exceptionjava.langThrowablepage

① request对象

用于获取客户端信息,例如我们在表单中填写的信息等。实际上,JSP容器会将客户端的请求信息封装在request对象中。在客户端发出请求时会创建request对象,在请求结束后,则会销毁request对象。
通常在应用中用的最多的就是客户端请求的参数名称和参数值。在request对象中提供了一系列的方法用来获取客户端的请求参数,这些方法包括getParameter、getParameterNames、getParameterValues和getParameterMap。

② response对象

包含了从JSP页面返回客户端的所有信息,其作用域是它所在的页面page。

response对象是javax.servlet.ServletResponse类的一个实例,它封装由JSP产生的响应,并返回客户端以响应请求。

③ out对象

out内置对象是一个缓冲的输出流,用来向客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例。由于向客户端输出时要先进行连接,所以总是采用缓冲输出的方式,因此out是缓冲输出流

④ session对象

session对象是会话对象,用来记录每个客户端的访问状态。
所谓会话指的是从一个客户打开浏览器与服务器建立连接,到这个客户关闭浏览器与服务器断开连接的过程。
当一个客户访问服务器时,可能会在这个服务器的多个页面之间反复连接、不断刷新一个页面或向一个页面提交信息等,有了session对象,服务器就可以知道这是同一个客户完成的动作。session对象有session.isNew()、session.getAttribute()、session.getId()等方法。

⑤ application对象

application对象用于获取和设置Servlet的相关信息,它的生命周期是从服务器启动直到服务器关闭为止,即一旦创建一个application对象,该对象将会一直存在,直到服务器关闭。application中封装了JSP所在的Web应用中的信息。application.getAttribute()、application.setAttribute()

⑥ pageContext对象

pageContext对象是一个比较特殊的对象,使用它不仅可以设置page范围内的属性,还可以设置其它范围内的属性。通过pageContext还可以访问本页面中的所有其他对象,如前面介绍的request、response、out等对象。由于request、response等对象本身已经提供给我们一些方法,可以直接调用这些方法来完成特定的操作,因此在实际JSP开发过程中pageContext对象使用的并不多

/* 设置page范围内的属性 */
pageContext.setAttribute("attributeName","page_scope");
/* 获得page范围内的属性 */
String str = (String)pageContext.getAttribute("attributeName",pageContext.PAGE_SCOPE);

⑦ page对象

page对象指的是当前的JSP页面本身,它是java.lang.Object类的对象,通过page对象可以方便的调用Servlet类中定义的方法。page对象在实际开发过程中并不经常使用。

⑧ config对象

config对象是ServletConfig类的一个实例,在Servlet初始化时,可以通过config向Servlet传递信息。所传递的信息可以是属性名和属性值构成的名值对,也可以是通过ServletContext对象传递的服务器的相关信息。
在JSP开发中config对象用的不多,只有在编写Servlet时当需要重载Servlet的init()方法时才会用到config对象

⑨ exception对象

exception对象是java.lang.Throwable类的对象,用来处理页面的错误和异常。在使用JSP进行开发时,习惯的做法是在一个页面中使用page指令的errorPage属性,让该属性指向一个专门用于异常处理的页面。如果在JSP页面中有未捕获的异常,则会生成exception对象,然后将该exception对象传送到page指令中设置的异常处理页面中,在异常处理页面中对exception对象进行处理。在异常处理页面中需要将其page指令的isErrorPage属性设置为true才可以使用exception对象。

/* 设置页面的errorPage属性 ,指向一个异常处理页面 */
<%@ page contentType="text/html;charset=GB2312" errorPage="exceptionObject.jsp"%>


/* 异常处理页面应在page指令中将isErrorPage属性设置为true */
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true"%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值