J2EE技术(六)——JSP

 一、   JSP基本思想

JSP(Java Server Pages)JSP技术规范是JavaServlet技术的发展和自然扩展,将转化成Servlet。根据客户端请求创建动态Web页面的文本文件,是J2EE中的“视图”组件。

JSP与Servlet相比的优势:JSP可以分离动态和静态内容。

在Servlet中,静态内容与动态内容是一起产生的,所以关于页面的任意一点修改都需要重新编译Servlet。而JSP不同,JSP可以通过使用标签或是JavaBean技术把展现与内容相分离。JSP使用JavaBean产生动态内容,在JSP页面使用标签或脚本利用这些JavaBean。当页面设计人员修改静态内容后,JSP引擎会自动编译JSP页面。此外,JSP页面可以不经修改运行在不同的平台和Web服务器上。

二、   JSP语法基础

1、       指令

指令(Directive):该元素的作用是在将JSP源文件解析成Java文件时指示JSP引擎做出相应的操作,从而达到预期的目的 。JSP指令在整个页面范围内有效,且不在客户端产生任何输出。

基本格式为<%@directive attribute1=“”... attribute2=“”%>

常见的指令有:page、include、taglib

(1)、page指令

用来设定JSP页面的全局属性和相关功能。

作用于整个JSP文件,可以放到JSP页面的任何位置,但为了便于阅读和格式规范,通常放到JSP页面开始的位置。

一个JSP文件可以包含多个page指令,指令之间是独立的。

除了import和pageEncoding属性以外,每个属性只能定义一次。

Page指令的属性:

1)     language属性:

指定JSP使用的脚本语言,默认值是java语言,目前JSP中只能使用java。可以不写,如果写必须写在声明、脚本片段和表达式的前面,例如:<%@ page language=“java” %>

2)     info属性

通常用于定义JSP页面的描述信息。属性值使用getServletInfo()方法得到,此方法通常用于获得描述JSP文件的信息。

<%@ page info="你好jsp" contentType="text/html;charset=gb2312"%>

<% out.println(getServletInfo()); %>

3)     import属性

import=”import_list”,import属性用来说明在后面代码中会用到的类和接口,这些类和接口可能是Sun JDK中的类,也可能是自己定义的类。在Java中,如要载入多个包,需用import分别指明,在JSP里,可用import指明多个包,之间用逗号隔开。<%@ page import=" java.text.*,java.util.*" %>,或者分多行写:

<%@ page import="java.text.*"%>

<%@ page import=" java.util.*"%>

有些类默认被载入JSP当前页面,不需要进行声明,这些类是:

java.lang.*

javax.servlet.* 

javax.servlet.jsp.*  

javax.servlet.http.*

4)     session属性

session=”true|false”

session属性用来指定在当前页中是否允许session操作。默认值为true。

举例:session1.jsp

<%@ page session="false" %>

<%session.setAttribute("aa","bb"); //错误,不认识session对象,将false换成true即可 %>

5)     contentType属性

用于设置返回浏览器网页的内容类型和字符编码格式。默认值是“text/html; charset=ISO-8859-1”。

如果需要在返回浏览器的HTML页面中显示中文,我们经常会用到字符集GBK,gbk,gb2312 。

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

通常将该语句写到文件的最上面。

GB2312/GBK是汉字的国标码,专门用来表示汉字,是双字节编码,其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。

6)     pageEncoding属性

指定JSP页面的字符编码,默认为ISO-8859-1。

在JSP标准的语法中,如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。

例如: <%@ page pageEncoding=“GBK”%>

7)     errorPage属性

errorPage属性用来指定页面的URL。在JSP执行过程中有异常发生时,异常一般并不由此JSP页面处理,而由errorPage属性指定的页面处理。

例如,指定当前页面出错时,调用handleError.jsp页面处理错误的格式如下: <%@ page errorPage=“handleError.jsp”%>

8)     isErrorPage属性

isErrorPage属性说明当前页面是否为异常处理页面。

isErrorPage属性指明该页面是否为另一页面的异常处理页面,默认值是“false”。若设定为“true”,则JSP容器会在当前的页面生成一个对象exception。

<%@ page isErrorPage=“true” %>

9)     buffer属性

指定处理页面输出内容时的缓冲区大小,默认值是8kb。

如果buffer的取值为“none”,输出将不使用缓冲,所有输出都直接写到客户端。

置缓冲区的大小只能是kb的整数倍,页面的输出首先被写入指定大小的缓冲区内。当缓冲区变满时如何处理取决于autoFlush属性的值。

buffer指定的值只是缓冲区的最小值,JSP容器选择的缓冲区可能比指定的大。

例如:<%@ page buffer=“16kb”%>

10) autoFlush属性

autoFlush属性控制的是当页面输出进入缓冲区并且缓冲区变满的情况。

如果autoFlush属性取值“true”,那么缓冲区变满之后需要强制输出。

如果autoFlush属性取值“false”,那么缓冲区变满之后将引发一个异常。

autoFlush属性的默认值是“true”。

11) isELIgnored属性

JSP2.0中引入了表达式语言(Expression Language,EL),利用EL可以在不使用脚本的情况下构造动态网页。

isELIgnored属性值为”true”时,会禁止EL表达式的计算。

(2)taglib指令

标记库:开发人员可以使用标记库来定义自己的JSP标记,页面设计人员可以直接使用标记库中的自定义标记,而同时隐藏底层的实现细节。

taglib指令用于引入JSP页面中需要使用的标记库的定义。

语法:<%@ taglib  prefix=“前缀名“   uri=“标记库的uri地址“ %>

举例:<%@ taglib uri=”http://myjsp.com.cn/exampleTags” prefix=”myTags” %>

<myTags:doSomething></myTags:doSomething>

(3) include指令

作用:用来向当前页面插入一个静态文件,这个静态文件可以是html文件、jsp文件或其他文本文件或者只是一段java代码。JSP编译器在碰到include指令时,就会读入包含的文件。

常见功能:通常当应用程序中所有的页面的某些部分(例如标题、页脚、导航栏或信息栏)都相同的时候,我们就可以考虑用include。

被包含文件中使用<html>、</html>和<body>、</body>等标签时,要防止与包含文件中的相应标签冲突而造成错误。

语法格式如下:<%@ include file=”URL” %> URL是要插入文件的URL

2、       脚本元素

脚本元素,用Java写的脚本代码,以<%开始,以%>结束,可以分为如下三类: 声明、脚本段、表达式 。

1)     声明

用来定义程序中使用的实体,可以声明变量、方法和类,以<%!开始,以%>结束。

语法:<%! 变量声明;方法声明; %>

变量声明<%!  int a,b,c; String d;%>

方法声明<%!  public int add(int a,int b){return a+b;} %>

在声明中定义的变量是页面内的全局变量;

注意:每个声明仅在一个JSP页面中有效,若想在多个JSP页面中有效,可以将声明写在一个JSP页面中,然后使用Include指令将其包含在每个JSP页面中。

2)     脚本段

以<%开始,以%>结束,中间包括一段合法的java代码(多个语句、方法、变量、表达式)。

格式: <% 合法的java代码; %>

一个jsp页面可以用任意数量的脚本片段,这些片段在请求处理时在服务器端按顺序执行

脚本段能够完成的功能:

声明将要用到的变量

显示输出信息

使用任何隐含对象和使用<jsp:useBean>声明过的对象。

当JSP页面受到客户端请求时,脚本段就会自动执行。

3)     表达式

以<%=开始,以%>结束,中间为一个合法的Java表达式,用来将中间表达式的内容输出到页面。

语法:<%=expression%>

表达式的执行结果会被自动转换为字符串,显示在JSP页面中;

表达式左边有“<%=”,右边有“%>”;

由于表达是不是完整的java语句,所以在表达式的后面不能放置“;”;

例如:输出计算结果

<%=1+2+3%>

<%=getDate()%>

3、       标准动作(JSP标记)

动作:主要在请求处理阶段起作用,能够影响输出流和对象的创建、使用修改等,它按照XML语法进行书写。

格式:

<prefix:tagName [attribute1=value1]…[attributen=valuen]/ >

或 <prefix:tagName [attribute1=value1]…[attributen=valuen] >

         tagbody </prefix:tagName>

JSP使用“<jsp:     >”表示动作,用来控制JSP引擎的动作。

注意:JSP行为元素遵循XML元素的语法格式。

语法三种形式:

<tag attr1=””……” ……>body</tag>

<tag attr1=””……” ……> </tag>

<tag attr1=””……” ……/>

1)     include动作

作用:在当前的JSP页面中加入(包含)静态和动态的资源。

a)     静态网页:直接将内容加入到JSP网页中。

b)     动态网页:编译运行该文件加入到JSP网页中。

语法格式:

<jsp:include page=”URL或<%=expression%>” flush=”true”/>

或者

<jsp:include page=”URL或<%=expression%>”  flush=”true”>

{<jsp:param name=”parameterName” alue=”parameterValue”/>}*

</jsp:include>

2)     forward动作

作用:把当前的JSP页面重新定向到另一个页面上。

语法格式:

<jsp:forward page=”重定向的页面”>

{<jsp:param name=”name” value=”value”/>}*

</jsp:forward>

注意:<jsp:forward>标记后面的代码不会被执行。用户看到的地址是当前页面的地址,而内容则是另一个页面的。

3)     plugin动作

必选属性:

a)     type:bean,applet 

b)     code:待执行对象的类名,必须放到codebase指定的目录下 

c)     codebase:指定被包含对象的java类所在目录

4)     param动作

jsp:param:用来提供key/value的信息,可以与<jsp:include><jsp:forward><jsp:plugin>一起搭配使用。

例如:

<jsp:forward page=”URL">

<jsp:param name=”parameterName1”  alue=”parameterValue1”/>

<jsp:param name=”parameterName2” value=”parameterValue2”/>

</jsp:forward>

 

原文地址:https://www.cnblogs.com/CharmingDang/p/9663965.html