|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。js|servlet|变量|剧本12.1JSP剧本元素
JSP剧本元素用来拔出Java代码,这些Java代码将呈现在由以后JSP页面熟成的Servlet中。剧本元素有三种格局:
表达式格局<%=expression%>:盘算表达式并输入其了局。
Scriptlet格局<%code%>:把代码拔出到Servlet的service办法。
声明格局<%!code%>:把声明到场到Servlet类(在任何办法以外)。
上面我们具体申明它们的用法。
12.1.1JSP表达式
JSP表达式用来把Java数据间接拔出到输入。其语法以下:
<%=JavaExpression%>
盘算Java表达式失掉的了局被转换成字符串,然后拔出到页面。盘算在运转时举行(页面被哀求时),因而能够会见和哀求有关的全体信息。比方,上面的代码显现页面被哀求的日期/工夫:
Currenttime:<%=newjava.util.Date()%>
为简化这些表达式,JSP预界说了一组能够间接利用的对象变量。前面我们将具体先容这些隐含声明的对象,但关于JSP表达式来讲,最主要的几个对象及其范例以下:
request:HttpServletRequest;
response:HttpServletResponse;
session:和request联系关系的HttpSession
out:PrintWriter(带缓冲的版本,JspWriter),用来把输入发送到客户端
上面是一个例子:
Yourhostname:<%=request.getRemoteHost()%>
最初,假如利用XML的话,JSP表达式也能够写成上面这类情势:
<jsp:expression>
JavaExpression
</jsp:expression>
请记着XML元素和HTML纷歧样。XML是巨细写敏感的,因而务必利用小写。有关XML语法的申明,请拜见《XML教程》
12.1.2JSPScriptlet
假如你要完成的义务比拔出复杂的表达式加倍庞大,可使用JSPScriptlet。JSPScriptlet同意你把恣意的Java代码拔出Servlet。JSPScriptlet语法以下:
<%JavaCode%>
和JSP表达式一样,Scriptlet也能够会见一切预界说的变量。比方,假如你要向了局页面输入内容,可使用out变量:
<%
StringqueryData=request.getQueryString();
out.println("AttachedGETdata:"+queryData);
%>
注重Scriptlet中的代码将被照搬到Servlet内,而Scriptlet后面和前面的静态HTML(模板文本)将被转换成println语句。这就意味着,Scriptlet内的Java语句并不是必定如果完全的,没有封闭的块将影响Scriptlet外的静态HTML。比方,上面的JSP片段夹杂了模板文本和Scriptlet:
<%if(Math.random()<0.5){%>
Havea<B>nice</B>day!
<%}else{%>
Havea<B>lousy</B>day!
<%}%>
上述JSP代码将被转换成以下Servlet代码:
if(Math.random()<0.5){
out.println("Havea<B>nice</B>day!");
}else{
out.println("Havea<B>lousy</B>day!");
}
假如要在Scriptlet外部利用字符“%>”,必需写成“%\>”。别的,请注重<%code%>的XML等价表达是:
<jsp:scriptlet>
Code
</jsp:scriptlet>
12.1.3JSP声明
JSP声明用来界说拔出Servlet类的办法和成员变量,其语法以下:
<%!JavaCode%>
因为声明不会有任何输入,因而它们常常和JSP表达式或Scriptlet分离在一同利用。比方,上面的JSP代码片段输入自从服务器启动(或Servlet类被修改偏重新装载以来)以后页面被哀求的次数:
<%!privateintaccessCount=0;%>
自从服务器启动以来页面会见次数为:
<%=++accessCount%>
和Scriptlet一样,假如要利用字符串“%>”,必需利用“%\>”取代。最初,<%!code%>的XML等价表达体例为:
<jsp:declaration>
Code
</jsp:declaration>
12.2JSP指令
JSP指令影响Servlet类的全体布局,它的语法一样平常以下:
<%@directiveattribute="value"%>
别的,也能够把统一指令的多个属性分离起来,比方:
<%@directiveattribute1="value1"
attribute2="value2"
...
attributeN="valueN"%>
JSP指令分为两品种型:第一是page指令,用来完成上面这类义务:导进指定的类,自界说Servlet的超类,等等;第二是include指令,用来在JSP文件转换成Servlet时引进其他文件。JSP标准也提到了taglib指令,其目标是让JSP开辟者可以本人界说标志,但JSP1.0不撑持该指令,有但愿它将成为JSP1.1的次要改善之一。
12.2.1page指令
page指令的感化是界说上面一个或多个属性,这些属性巨细写敏感。
import="package.class",大概import="package.class1,...,package.classN":
用于指定导进哪些包,比方:<%@pageimport="java.util.*"%>。import是独一同意呈现一次以上的属性。
contentType="MIME-Type"或contentType="MIME-Type;charset=Character-Set":
该属性指定输入的MIME范例。默许是text/html。比方,上面这个指令:
<%@pagecontentType="text/plain"%>。
和上面的Scriptlet效果不异:
<%response.setContentType("text/plain");%>
isThreadSafe="true|false"
默许值true标明Servlet依照尺度的体例处置,即假定开辟者已同步对实例变量的会见,由单个Servlet实例同时地处置多个哀求。假如取值false,标明Servlet应当完成SingleThreadModel,哀求大概是逐一进进,大概多个并行的哀求分离由分歧的Servlet实例处置。
session="true|false"
默许值true标明预界说变量session(范例为HttpSession)应当绑定到已有的会话,假如不存在已有的会话,则新建一个并绑定session变量。假如取值false,标明不会用到会话,试图会见变量session将招致JSP转换成Servlet时堕落。
buffer="sizekb|none"
该属性指定JspWriteout的缓存巨细。默许值和服务器有关,但最少应当是8KB。
autoflush="true|false"
默许值true标明假如缓存已满则革新它。autoflush很少取false值,false值暗示假如缓存已满则抛出非常。假如buffer="none",autoflush不克不及取false值。
extends="package.class"
该属性指出将要天生的Servlet利用哪一个超类。利用该属性应该非常当心,由于服务器大概已在用自界说的超类。
info="message"
该属性界说一个能够经由过程getServletInfo办法提取的字符串。
errorPage="url"
该属性指定一个JSP页面,一切未被以后页面捕捉的非常均由该页面处置。
isErrorPage="true|false"
该属性唆使以后页面是不是能够作为另外一JSP页面的毛病处置页面。默许值false。
language="java"
该属性用来唆使所利用的言语。今朝没有需要存眷这个属性,由于默许的Java是以后独一可用的言语。
界说指令的XML语法为:
<jsp:directive.directiveTypeattribute=value/>
比方,上面这个指令:
<%@pageimport="java.util.*"%>
它的XML等价表达是:
<jsp:directive.pageimport="java.util.*"/>
12.2.2include指令
include指令用于JSP页面转换成Servlet时引进其他文件。该指令语法以下:
<%@includefile="relativeurl"%>
这里所指定的URL是和收回援用指令的JSP页面绝对的URL,但是,与一般意义上的绝对URL一样,你能够使用以“/”入手下手的URL告知体系把URL视为从Web服务器根目次入手下手。包括文件的内容也是JSP代码,即包括文件能够包括静态HTML、剧本元素、JSP指令和举措。
比方,很多网站的每一个页面都有一个小小的导航条。因为HTML框架存在很多成绩,导航条常常用页面顶端或右边的一个表格制造,统一份HTML代码反复呈现在全部网站的每一个页面上。include指令是完成该功效的十分幻想的办法。利用include指令,开辟者不用再把导航HTML代码拷贝到每一个文件中,从而能够更轻松地完成保护事情。
因为include指令是在JSP转换成Servlet的时分引进文件,因而假如导航条改动了,一切利用该导航条的JSP页面都必需从头转换成Servlet。假如导航条修改不频仍,并且你但愿包括操纵具有尽量好的效力,利用include指令是最好的选择。但是,假如导航条修改十分频仍,你可使用jsp:include举措。jsp:include举措在呈现对JSP页面哀求的时分才会援用指定的文件,请拜见本文前面的详细申明。
12.3实例:剧本元素和指令的使用
上面是一个利用JSP表达式、Scriptlet、声明、指令的复杂例子。
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>JavaServerPages</TITLE>
</HEAD>
<BODYBGCOLOR="#FDF5E6"TEXT="#000000"LINK="#0000EE"
VLINK="#551A8B"ALINK="#FF0000">
<CENTER>
<TABLEBORDER=5BGCOLOR="#EF8429">
<TR><THCLASS="TITLE">
JSP使用实例</TABLE>
</CENTER>
<P>
上面是一些使用各类JSP功效天生的静态内容:
<UL>
<LI><B>表达式.</B><BR>
你的主机名:<%=request.getRemoteHost()%>.
<LI><B>JSPScriptlet.</B><BR>
<%out.println("查询字符串:"+
request.getQueryString());%>
<LI><B>声明(和表达式).</B><BR>
<%!privateintaccessCount=0;%>
服务器启动以来会见次数:<%=++accessCount%>
<LI><B>指令(和表达式).</B><BR>
<%@pageimport="java.util.*"%>
以后日期:<%=newDate()%>
</UL>
</BODY>
</HTML>
12.4JSP预界说变量
为了简化JSP表达式和Scriptlet的代码,JSP供应了8个事后界说的变量(或称为隐含对象)。这些变量是request、response、out、session、application、config、pageContext和page。
12.4.1request
这是和哀求联系关系的HttpServletRequest,经由过程它能够检察哀求参数(挪用getParameter),哀求范例(GET,POST,HEAD,等),和哀求的HTTP头(Cookie,Referer,等)。严厉说来,假如哀求所用的是HTTP以外的其他协定,request能够是ServletRequest的子类(而不是HttpServletRequest),但在理论中几近不会用到。
12.4.2response
这是和应对联系关系的HttpServletResponse。注重,因为输入流(拜见上面的out)是带缓冲的,因而,假如已向客户端发送了输入内容,一般Servlet不同意再设置HTTP形态代码,但在JSP中倒是正当的。
12.4.3out
这是用来向客户端发送内容的PrintWriter。但是,为了让response对象更加有用,out是带缓存功效的PrintWriter,即JspWriter。JSP同意经由过程page指令的buffer属性调剂缓存的巨细,乃至同意封闭缓存。
out一样平常只在Scriptlet内利用,这是由于JSP表达式是主动发送到输入流的,很少必要显式地援用out。
12.4.4session
这是和哀求联系关系的HttpSession对象。后面我们已先容过会话的主动创立,我们晓得,即便不存在session援用,这个对象也是主动绑定的。但有一个破例,这就是假如你用page指令的session属性封闭了会话,此时对session变量的援用将招致JSP页面转换成Servlet时堕落。
12.4.5application
这是一个ServletContext,也能够经由过程getServletConfig().getContext()取得。
12.4.6config
这是以后页面的ServletConfig对象。
12.4.7pageContext
次要用来办理页面的属性。
12.4.8page
它是this的同义词,以后用途不年夜。它是为了Java不再是独一的JSP编程言语而筹办的占位符。
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, |
|