JSP文件在用户第一次请求时,会被编译成Servlet,后由这个Servlet处理用户的请求,所以JSP可看成是 运行时的Servlet,JSP与Servlet的区别如下:
Servlet主要在服务器上执行和解释浏览器的请求,承担客户端和其他应用程序之间的中间层的角色,将动态的内容混合到静态的内容中以产生HTML.
JSP页面在HTML元素中嵌入Java脚本代码和JSP标记,且把静态和动态的内容分离开来,实现了内容与表示的分离.
使用JSP,不需要单独配置没一个文件,只要扩展名为.jsp,JSP容器(同时也是Servlet容器)就会自动识别,将其转换为Servlet并为客户端提供服务.
1.JSP的运行机制:
step1.客户端请求JSP页面jsp-name.jsp
step2.JSP文件转换(translation)为Servlet的Java文件(jsp-name_jsp.java),转换阶段(translation phase)
step3.经过编译(javac)生成(jsp-name_jsp.class)class文件
step4.JSP容器(Servlet容器)执行请求,生成Servlet实例
step5.服务器返回响应结果
2.JSP的语法
指令元素(directive elements):page,include,taglib
指令元素主要用于为转换阶段提供这个JSP页面的相关信息,一般不产生任何输出.
<%@page contentType="text/html;charset=gb2312" language="java" import="importList" extends="className" session="true|false" buffer="none|sizekb" autoFlush="true|false" isThreadSafe="true|false" info="info_text" errorPage="error_url" isErrorPage="true|false" pageEncoding="peinfo" isELIgnored="true|false" %>
<%@include file="relativeURLspec"%>
<%@taglib uri="tagLibraryURI"|tagdir="tagDir" prefix="tagPrefix"%>
脚本元素(scripting elements)
脚本元素包括三个部分:声明,脚本段,表达式.JSP2.0新增加了EL表达式.
<%!this is a declaration%>//声明,例如<%!int i;%>
<%this is a scriptlet%>//脚本段,例如
<%
if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM)
{
%>
Good Morning!
<%
else{
%>
Good Afternoon!
<%
}
%>
<%=this is an expression%>//直接输入到页面中,例如<%=I love JSP very much!%>
动作元素(action elements)
动作元素为请求处理阶段提供信息,JSP2.0规范定义了一些标准的动作,标准动作是一些标签,它们影响JSP运行时的行为和对客户端请求的响应,这些动作由JSP容器来实现.
<jsp:useBean id="instance name" class="full package"/>
<jsp:setProperty name="instance" property="*">
<jsp:getProperty name="instance" property="property name">
<jsp:param name="name" value="value"/>
<jsp:include page="urlSpec" flush="true|false"/>
<jsp:forward page="relativeURLspec"/>
<jsp:plugin><jsp:params><jsp:fallback>
<jsp:element><jsp:attribute><jsp:body><jsp:text><jsp:output>
<jsp:invoke><jsp:doBody>
注释<!--HTML comments-->或者<%--JSP comments--%>
3.JSP的隐含对象
隐含对象 JSP隐含对象的类型
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
pageContext javax.servlet.jsp.PageContext
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.servlet.ServletConfig
page java.lang.Object
exception java.lang.Throwable
经常用到pageContext对象,request对象,session对象及application对象的getAttribute()与setAttribute()来设置和获得对象的属性值,其作用范围由小到大.