JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
总体而言,jsp就是html+java程序段。
1,Jsp语法
1.1,Jsp数据定义
声明 <%! 声明 %> :<%! int i=0; %>
表达式 <%= 表达式 %>: <%= a*b*c %>(变量已经在页面当中声明)
程序代码段 <% 程序代码片段 %>
<% double r=5.0,s;
s=3.14*r*r;
out.print(s);<!--out对象可以将数据打印到页面-->
%>
1.2,Jsp指令
JSP指令不是JSP代码中逻辑的一部分。相反,JSP指令只是为容器提供指导和指示,JSP指令会被JSP引擎转换为相应的Java代码,但这些Java代码并不直接产生任何可见输出,而是告诉JSP引擎如何处理JSP页面,或是如何生成Servlet类。
JSP指令包括:page指令;taglib指令;include指令。
指令的形式一般为:<%@ 指令名 [...一个或多个属性...]%>。指令类似于动作,也可以有一些属性。@符号和指令名之间的空格以及最后一个属性与结束%>之间的空格都是可选的。
处理一个JSP页面:容器的角度。
容器完成的处理划分为不同阶段。
1.第一阶段,JSP页面实际上首先转换为Java源代码。这称为翻译阶段,在这个阶段,称JSP页面被翻译为JAVA源代码。java源代码按纯文本格式生成,而且是人可读的。
2.第二阶段,Java源代码编译为可执行的字节码。这称为编译阶段。所得到的可执行字节码是二进制格式,可以由任何JVM执行。
3.第三阶段,执行已编译的JSP二进制码时,它会处理到来的请求。这个阶段称为请求阶段。这个阶段发生的所有事情都称为在请求时出现。
一旦被翻译和编译,就能重用JSP二进制码来处理每一个到来的请求。这就不必为每个请求都完成翻译和编译阶段。不过,如果JSP有修改,容器必须发现这个修改,并重新翻译和重新编译页面。
page指令
page 指令是最复杂的JSP指令,它的主要功能为设定整个JSP 网页的属性和相关功能。具体是设置哪种功能,是由其属性指定的。
基本语法
page 指令是以<%@ page 起始,以%>结束:
<%@ page attribute1=“value1” attribute2= “value2” attribute3=…%>
然而像所有JSP 标签元素一样,page 指令也支持另一种以XML为基础的语法,如下所示:
<jsp:directive.page attribute1="value1" attribute2= "value2" />
通常page指令位于JSP页面的顶端,在同一个JSP页面中可以有多个page指令,但不能重复指定同样的page指令。
page 指令中包含的属性:
1) import
语法:<%@page import="package.class|package.*,..."%>
说明:类似于在java中导入包一样,如果JSP页面中用到一些类,需要使用page指令的import属性导入使用的类。import设置当前JSP页面中要用到的Java类,这些java类可能是JDK的类,也可能是自定义的类。在JSP页面中也默认加入"java.lang.*;"、"java.servlet.*"、"java.servlet.jsp.*;"、"java.servlet.http.*;"。
2) session
语法:<%page session = "true|false" %>
说明:定义当前页面是否参与HTTP会话。当设置为true时,可以获得隐含的名session的对象,为false时,则不可以获得该对象。默认为true。
3) contentType
语法:<%page contentType = "mimeType[;charset=characterSet]"%>
说明:使用contentType属性可以设置JSP页面应答的MIME类型,默认值为"text/html"。另外可以定义JSP页面的字符编码方式,默认值为ISO-8859-1,即英文文本。如果在JSP中使用中文,则可以定义字符编码方式为GBK。
4) isThreadSafe(慎用)
语法:<%page isThreadSafe = "true|false" %>
说明:定义当前页面是否支持线程安全。若为true,则该页面可能同时收到JSP引擎发送的多个请求;反之,JSP引擎会对收到的请求进行排除,当前页面在同一时刻只处理一个请求。默认为true。
5) info
语法:<%page info = "some text" %>
说明:info属性允许开发人员包含有关页面的文本信息,可以通过Servlet.getServletInfo()方法得到该字符串。
6) language
语法:<%page language = "java" %>
说明:language属性定义JSP使用的脚本语言,JSP容器允许使用其他语言进行JSP开发,但这些语言需要满足JSP规范中定义的规则。默认为java。
7)extends
语法:<%page extends = "jsp base class" %>
说明:extends属性用来指定生成的JSP Servlet的基类。默认为扩展JspBase类。
8) buffer
语法:<%page buffer = "8k" %>
说明:buffer属性用来指定响应的缓冲模型。默认值为8k。若设置为none,则表示该JSP页面不使用缓冲,所有响应输出孝将被PrintWriter直接写到ServletResponse中。
9) autoFlush
语法:<%page autoFlush = "true|flase" %>
说明:
10) errorPage
语法:<%page errorPage = "true|flase" %>
说明:errorPage用来设定当JSP页面出现异常时,所要转身的页面。如果没有设定,则JSP容器会用默认的当前页面来显示出错信息。例如,<%@page errorPage="/error/error_page.jsp"%>
11) isErrorPage
语法:<%page isErrorPage = "true|flase" %>
说明:isErrorPage指定当前页面是否是错误处理页面。默认值为false。若设定为true,则JSP容器会在当前页面中生成一个exception对象。
Include指令
在页面转换期间将文件包含到jsp页面,include指令用于在jsp页面中静态包含一个文件,该文件可以是jsp页面,html页面,文本文件或一段Java代码等。
1)include语法:
<%@ include file="url"%>
file的属性值被解释为相对于当前jsp文件的URL.
2)在被包含的文件中不要使用和主页重复的HTML标签。这样会影响原jsp文件中同样的标签导致错误。
因为原文件和被包含文件可以互相访问彼此定义的变量和方法,所以要避免变量和方法在命名上的问题。
注意事项
包含文件中要避免使用<html>、</html>、<body>、</body>,因为这将会影响在原来JSP 网页中同样的标签,这样做有时会导致错误;
<%@ include %>指令是一种静态的SSI(服务器端包含)。
1、所谓的静态是指file不能为一变量,例如:
<% String URL=“JSP.html” ; %>
而以下指令是错误的:
<%@ include file = “<%= URL %>” %>
2、SSI意味着不可以在file 所指定的文件后接任何参数,如下:
<%@ include file = "javaworld.jsp?name=browser" %>
同时,file 所指的路径必须是相对于此JSP 网页的路径。
Taglib 指令
定义一个标签库以及其自定义标签的前缀.
JSP 语法
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
例子
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %>
<public:loop>
</public:loop>
<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form></s:form>
描述
<% @ taglib %>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
这里自定义的标签含有标签和元素之分。因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。元素也可以包含其它的文本,标记,元素。比如,一个jsp:plugin元素有<jsp:plugin>开始标记和</jsp:plugin>结束标记,同样也可以有<jsp:params>和<jsp:fallback>元素.
你必须在使用自定义标签之前使用<% @ taglib %>指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次
属性
uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:
Uniform Resource Locator (URL), 由 RFC 2396 定义, 查看 http://www.hut.fi/u/jkorpela/rfc/2396/full.html
Uniform Resource Name (URN), 由 RFC 2396定义
一个相对或绝对的路径
prefix="tagPrefix"
在自定义标签之前的前缀,比如,在<public:loop>中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀
最后加上jsp注释
1,输出注释:
这些是显示注释,不在页面中显示,但可以在客户端HTML源文件中看到,会被JSP引擎解释。
2,隐藏注释:
<%-- 注释内容 --%>
隐藏注释和输出注释不同的是,这个注释虽然写在jsp程序当中,但是不会发送给用户,因为jsp引擎会忽略这些内容。
例如<!-- This page is loaded on <%= (new java.util.Date()).toLocaleString() %> -->
在客户端的HTML源代码中显示为:
<!-- This page was loaded on May 5, 2010 -->