JSP html
JSP声明的语法格式以下:
<%! 声明部分 %>
示例页面:
<%@ page contentType="text/html;charset=GBK" language="java" errorPage="" %>
<html>
<head><title>JSP 声明示例</title></head>
<body>
<%!
public int count;
public String info(){
return "Hello!!!";
}
%>
<%
out.println(count++);
%>
<br/>
<%
out.println(info());
%>
</body>
</html>
打开多个浏览器,甚至能够在多个机子上打开浏览器来刷新该页面,将发现全部客户端访问的count值是连续的,即全部客户端共享了同一个count变量。JSP页面会编译成一个Servlet类,每一个Servlet在容器中只有一个实例;在JSP中声明的变量是成员变量,成员变量只在建立实例时初始化,该变量的值将一直保存,直到实例销毁。
JSP的3个编译指令
1. page指令
page指令一般位于JSP页面的顶端,一个JSP页面可使用多条page指令。page指令的语法格式以下:
<%@page
[language="Java"]
[extends="package.class]
[import="package.class|package.*,..."]
[session="true|false"]
[buffer="none|8KB|size Kb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charSet=ISO-8859-1"]
[pageEncoding="ISO-8859-1"]
[isErrorPage="true|false"]
%>
2.include 指令
使用include指令,能够将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(若是有的话)。这是个静态的include语句,它会把目标页面的其余译指令也包含进来,但动态include则不会。
include既能够包含静态的文本,也能够包含动态的JSP页面。静态的include编译指令会被包含的页面加入本页面,融合成一个页面,所以被包含的页面甚至不须要是一个完整的页面。
include编译指令的语法以下:
<%@include file="relativeURLSpec"%>
若是被嵌入的文件常常须要改变,建议使用<jsp:include>操做指令,由于它是动态的include语句。
JSP的7个动做指令
动做指令与编译指令不一样,编译指令是通知Servlet引擎的处理消息,而动做指令只是运行时的动做。编译指令在将JSP编译成Servlet时起做用;而处理指令一般可替换成JSP脚本,它只是JSP脚本的标准化写法。
JSP动做指令主要有以下7个。
jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
jsp:param: 用于传递参数,必须与其余支持参数的标签一块儿使用。
jsp:include: 用于动态引入一个JSP页面。
jsp:plugin: 用于下载JavaBean或Applet到客户端执行。
jsp:useBean: 建立一个JavaBean的实例。
jsp:setProperty: 设置JavaBean实例的属性值。
jsp:getProperty: 输出JavaBean实例的属性值。
1.forward指令
JSP的forward指令的格式以下语法:
对于JSP1.0,使用以下语法:
<jsp:forward page="{relativeURL|<%=expression%>}"/>
对于JSP1.1以上规范,可以使用以下语法:
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>}
</jsp:forward>
第二种语法用于在转发时增长额外的请求参数。增长的请求参数的值能够经过HttpServletRequest类的getParameter()方法获取。
2.include指令
include指令是一个动态include指令,也用于包含某个页面,它不会导入被include页面的编译指令,仅仅将被导入的页面的body内容插入本页面。
下面是include动做指令的语法格式:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
或者
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
{<jsp:param name="parameterName" value="parameterValue"/>}
</jsp:include>
flush属性用于指定输出缓存是否转移到被导入文件中。若是指定为true,则包含在被导入文件中;若是指定为false,则包含在原文件中。对于JSP1.1旧版本,只能设置为false。
静态导入和动态导入有以下是三点区别:
静态导入是将被导入页面的代码彻底融入,两个页面融合成一个总体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
静态导入时被导入页面的编译指令会起做用;而动态导入时被导入页面的编译指令则失去做用,只是插入被导入页面的body内容。
动态包含还能够增长额外的参数。
3. useBean、setProperty、getProperty
useBean的语法格式以下:
<jsp:useBean id="name" class="className" scope="page|request|session|application"/>
setProperty 指令的语法格式以下:
<jsp:setProperty name="BeanName" proterty="propertyName" value="value"/>
getProperty 指令的语法格式以下:
<jsp:getProperty name="BeanName" proterty="propertyName" />
4. plugin指令
plugin指令主要用于下载服务器端的JavaBean或Applet到客户端执行。因为程序在客户端执行,所以必须客户端安装虚拟机。该标签不多使用。
5.param指令
param指令用于设置参数值,这个指令自己不能单独使用,由于单独的param指令没有实际意义。param指令能够与如下三个指令结合使用。
jsp:include
jsp:forward
jsp:plugin
param指令的语法格式以下:
<jsp:param name="paramName" value="paramValue"/>
JSP脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来建立这些实例)。9个内置对象依次以下:
application:javax.servlet.ServletContext的实例,该实例表明JSP所属的Web应用自己,可用于JSP页面,或者在Servlet之间交换信息。经常使用的方法有
getAttribute(String attName)、setAttribute(String attName, String attValue)和getInitParameter(String paramName)等。
config:javax.servlet.ServletConfig的实例,该实例表明该JSP的配置信息。经常使用的方法有getInitParameter(String paramName)和getInitParameternames() 等方法。事实上,JSP页面一般无须配置,也就不存在配置信息。所以,该对象更多地在Servlet中有效。
exception:java.lang.Throwable的实例,该实例表明其余页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可使用。经常使用的方法有getMessage()和printStackTrace()等。
out:javax.servlet.jsp.JspWriter的实例,该实例表明JSP页面的输出流,用于输出内容,造成HTML页面。
page:表明该页面自己,一般没有太大用处。也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就能够用this。
pageContext:javax.servlet.jsp.PageContext的实例,该对象表明该JSP页面上下文,使用该对象能够访问页面中的共享数据。经常使用的方法有getServletContext()和getServletConfig()等。
request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被都被封装在该对象里。这是一个经常使用的对象,获取客户端请求参数必须使用该对象。经常使用方法有getParameter(String paramName)、getParameterValues(String paramName)、setAttribute(String atrrName, Object attrValue)、
getAttribute(String attrName)和setCharacterEncoding(String env)等。
response:javax.servlet.http.HttpServletResponse的实例,表明服务器对客户端的响应。一般不多使用该对象直接影响,而使使用out对象,除非须要生成非字符响应。而response对象经常使用于重定向,经常使用方法有getOutPutStream()、sendRedirect(java.lang.String location)等。
session:javax.servlet.http.HttpSession的实例,该对象表明一次会话。当客户端浏览器与站点创建链接时,会话开始;当客户端关闭浏览器时,会话结束。经常使用的方法有:getAttribute(String attrName)、setAttribute(String attrName, Object attrValue)等。 java