ASP : Active Server Pages --
Asp 对xml不支持
PHP Hypertext Preprocessor 超文本预处理器
在早期开发网络数据库应用程序主要采用CGI技术—公共网关接口技术
有不少支持JSP的Web引擎,例如JSWDK、TOMCAT、Resin等
JSP的运行原理:
¡ 当JSP页面第一次被请求执行时,Tomcat将启动一个线程:该线程将.jsp文件转换成.java文件,再将.java文件转换成.class文件,然后执行.class文件响应客户请求。
¡ 当该JSP页面再次被执行时,将直接执行字节码文件。
¡ JSP程序由JSP Engine
¡ 只有当客户端第一次请求JSP时,才需要将其转换、编译
³ 优点:
² 优良的性能
优于CGI,PHP,ASP
² 平台无关性
操作系统无关,Web服务器无关
² 可扩展性
tag的扩展机制,简化页面开发
字节码文件的功能:
¡ 将HTML标记交给客户的浏览器显示。
¡ 将JSP标记、变量和方法声明、Java程序片由Tomcat服务器执行。
¡ Java表达式由Tomcat计算,然后将结果转化为字符串,交给客户浏览器显示。
页面局部变量与成员变量的比较:
¡ 变量的共享性:
成员变量:各个用户共享变量;
页面局部变量:用户间没有联系。
¡ 变量的初始化:
页面被激活后,成员变量只被初始化一次;
页面被激活后,每次有用户调用,页面局部变量都被初始化。
JSP页面的基本结构
1. HTML标记
2. JSP标记(分为指令标记、动作标记)
3. 成员变量与成员方法<%! %>
4. Java程序片<% %>
5. Java表达式<%= %>
6. 注释
JSP原始代码中包含了JSP元素和Template(模板) data两类
Template data指的是JSP容器不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等,这些数据会直接传送到客户端的浏览器
jsp页面元素
1.静态内容:HTML静态文本
2.指令:以“<%@ ” 开始,以“%> ” 结束。比如:<%@ include file = " Filename" %>
3.表达式:<%=Java表达式 %>
4.小脚本:<% Java 代码 %>
5.声明:<%! 方法 %>
6:标准动作:以“
比如:
7.注释: <%-- 这也是注释,但客户端不能查看到 --%><% //单行注释 %> <% /*多行注释 */ %>
------------------------------------------------------------------------------------------------
jspInit()
在JSP页面初始化时被调用。可以覆盖该方法,以提供任何的初始化工作
jspDestroy ()
在JSP页面被销毁时调用。可以覆盖该方法,以提供任何的JSP清楚工作
jspService()
由容器自动定义,不应当提供该方法的实现
------------------------------------------------------------------------------------------------
JSP数据作用域有四种范围:Page,Request,Session,Application
Page范围
所谓Page,指的是单单一页JSP Page的范围.
若要将数据存入Page范围时,可以用pageContext隐式对象的setAttribute(),得到数据用getAttribute()
Request范围
指在一JSP网页发出请求到另一个JSP网页之间,这个属性就失效了.
要将数据存入Request这个范围,使用request这个隐式对象的,setParameter(),得到这个范围的数据使用getParameter()
Session 范围
Session的作用范围为一段用户持续和服务器所连接的时间,与服务器断线后,这个属性就无效了,只要将数据存入session对象,数据范围就为Session
Application范围
Application的作用范围在服务器一开始执行服务,到服务器关闭为止.Applicateion的范围最大,停留时间也最长,所以使用要特别的注意,不然可能会造成服务器的负载越来越重,只要将数据存入application对象,数据的Scope就为Application
------------------------------------------------------------------------------------------------
Jsp 编译指令 Directive
² Page 通过设置内部的多个属性来定义整个页面的属性
Page 指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域为它所在的JSP文件页面和其包含的文件,但是<% @ page %>指令不能作用于动态的包含文件,例如
无论把<% @ page %>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。
1. language:语言属性
<%@ page language=“java”%> 默认是java语言
2. import:定义当前页面要使用的类
<%@ page imoprt="java.io.*"%>
<%@ page import="java.unti.*"%>
3. contentType:定义JSP页面响应MIME类型和字符编码(MIME-文件类型,可在工具--文件夹选项内查看)
<%@ page contentType="text/html;charset=gb2312"%>
4.session:在此JSP页面是否支持session(此页面是否可以使用session内置对象,值取true或false)
<%@ page session="true/false"%>
5.buffer:设置内置对象输出流out的缓冲区大小
<%@ page buffer="24kb"%> --默认为8KB
6.autoFlush:设置缓冲区满时是否自动刷新,可取值为true或false,默认为true <%@ page autoFlush="true/false"%>如取false,当缓冲区满时会发生异常
7.isThreadSafe:设置JSP页面是否支持多线程访问
<%@ page isThreadSafe="true/false"%> 默认为true,为false时,同一时刻只处理一个请求,其他请求排队
8. info:设置JSP页面描述信息
<%@ page info=" "%>
9.errorpage:设置当前页面发生异常时由哪个页面来处理这个异常
<%@ page errorpage="jsp页面的URL"%>
10. isErrorpage:表示当前页面是否是处理其他页面错误的页面
<%@ page isErrorpage="true/false"%>
² Include
在JSP中用include指令包含一个静态的文件,同时解析这个文件中的JSP语句,使用jsp的include指令有助于实现jsp页面的模块化。其语法格式为:<%@ include file=“filename” %>,其中filename指被包含的文件的名称。
<%@ include %>指令将会在JSP编译时插入一个包含文本或代码的文件,当使用<%@ include %>指令时,这个包含的过程是静态的。静态的包含是指这个被包含的文件将会被插入到JSP文件中去,这个包含的文件可以是JSP文件、HTML文件、文本文件。如果包含的是JSP文件,这个包含的JSP文件中的代码将会被执行
注意:
1.它是一种静态包含,将JSP文件和插入的文件内容合并,在编译为.java->.class文件
2.主要用来包含共用性文件,比如设页眉,页脚,实现安全性检查功能的文件
动态包含是合并结果,不是合并文件后再翻译,编译
² Taglib
taglib指令用来定义一个标签库以及其自定义标签的前缀.
其语法格式为:
<%@ taglib uri=" tagLibraryURI" prefix=" tagPrefix" %>
其中,属性uri(Uniform Resource Identifier,统一资源标识符)用来唯一的确定标签库的路径,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,属性prefix定义了一个指示使用此标签库的前缀。
------------------------------------------------------------------------------------------------
JSP动作(Action)语法:
³ 常见的:
² jsp:useBean
± jsp:setProperty
± jsp:getProperty
² jsp:include
² jsp:forward
± jsp:param 用于指定参数和其对应的值
² jsp:plugin
± 嵌入applet
用来把指定文件插入正在生成的页面。其语法如下:
w <jsp:include page=“relative URL” flush=“true” />
用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它既可以发挥Java组件重用的优势,同时也避免了损失JSP区别于Servlet的方便性。其语法格式为:
{class="package.class" |
type="package.class" |
class="package.class" type="package.class" |
beanName="{package.class | <%= expression %>}" type="package.class“
}
{/> |
> other elements
}
获得Bean实例之后,可以利用
name="beanInstanceName"
{property= "*" |
property="propertyName" [ param="parameterName" ] |
property="propertyName" value="{string | <%= expression %>}"
}
/>
用来提取指定Bean属性的值,转换成字符串,然后输出。其语法格式为:
用于引导客户端的请求到另一个页面或者是另一个Servlet去。其语法格式为:
在JSP处理这个动作的时候,将根据客户端浏览器的不同,JSP在执行以后将分别输出为OBJECT或EMBED这两个不同的HTML元素。其语法格式为:
w
w type="bean | applet"
w code="classFileName"
w codebase="classFileDirectoryName"
w [ name="instanceName" ]
w [ archive="URIToArchive, ..." ]
w [ align="bottom | top | middle | left | right" ]
w [ height="displayPixels" ]
w [ width="displayPixels" ]
w [ hspace="leftRightPixels" ]
w [ vspace="topBottomPixels" ]
w [ jreversion="JREVersionNumber | 1.1" ]
w [ nspluginurl="URLToPlugin" ]
w [ iepluginurl="URLToPlugin" ] >
w [
w [
w [
w
jsp:param
格式:
作用: 与include和forward指令一起使用,以名称--值的形式为这些指令提供参数信息,与它们合作时可以多次使用
例:
A.jsp
<%
String param1=request.getParameter("flag1");
Srting param2=request.getParameter("flag2");
if(param1.equals("0"))
{ out.print("Hello!"); }
else
{ out.print("Hello world!"); }
%>
---------------------------------------------------------------------------------------------------
JSP脚本
JSP脚本即Scriptlet,也就是JSP中的代码部分,是java程序的一段代码,几乎可以使用任何java语法,它是在请求时期执行的,它可以使用jsp页面所定义的变量、方法、表达式或JavaBeans。脚本的语法格式为:
<% scriptlet %>
如果要在Scriptlet内部使用字符“%>”,必须写成“%\>”
³
² 使用同一个request
² forward后的语句不会继续发送给客户端
² 速度快
² 服务器内部转换,
² 可以传参数
³ response.sendRedirect
² 是不同的request
² send后的语句会继续执行,除非return
² 速度慢
² 需要到客户端的往返,可以转到任何页面
² 可以传参数,直接写在url后面
JSP 的内置对象:
------------------------------------------------------------------------------------------------
request:
request 表示HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header,和session 数据的有用的方法。(参数、属性、cookies、URL)
response:
response 表示HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies 头信息等)。
out:
out 对象是javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext:
pageContext 表示一个javax.servlet.jsp.PageContext 对象。它是用于方便存取
各种范围的名字空间、servlet 相关的对象的API,并且包装了通用的servlet相关功能的方法。(JSP 的核心对象)
pageContext.get(其余的八大隐藏对象) 用于自定义标签;
session:
session 表示一个请求的javax.servlet.http.HttpSession 对象,Session 可以存贮用户的状态信息。(request.getSession()、属性、invalidate()、跟踪机制)
1.【response.sendRedirect(response.encodeRedirectURL("应用路径+资源路径"))】
2.【response.encodeURL("url"))】
application:applicaton 表示一个javax.servlet.ServletContext 对象。这有助于查找有关servlet引擎和servlet 环境的信息。( 获取、属性、控制转发
(application.getRequestDispatcher("路径")))
config:
config 表示一个javax.servlet.ServletConfig 对象。该对象用于存取servlet 实例的初始化参数。
page:page 表示从该页面产生的一个servlet 实例。
exception:exception 针对错误网页,未捕捉的异常。
synchronized
¡ 为了防止多个用户同时操作一个成员变量,可以对操作该变量的方法加锁。
¡ 加锁的办法是用synchronized关键字修饰该方法,当一个线程执行该方法时,其它线程只能等待。