假如你是直接利用Java servlets,那你将不得不在Java类中处理惩罚HTTP输入和HTML输出,你需要富厚的Java编程履向来构建巨大的应用措施。JSP的插手,使你可以把HTML的表达逻辑从植入servlets中的巨大的商务逻辑区分隔来。这意味着可以由有履历的剧本编写者来编写表达层代码,而高级的Java开拓者可以或许会合精神去办理servlets和bean中更为巨大的问题。
不管你有没有Java编程常识,都可以或许利用JSP。JSP包括了一些处事器端的标签,使得不消写一行Java代码就能显示动态数据。你可以直接会见bean来完成操纵,然后利用JSP标签把功效显示为动态内容。你还可以用servlets生成bean,servlets 操纵的运算功效存于个中,然后再利用JSP标签显示功效,同样不需要在JSP页中写Java代码。
有三种方法可以用来在你的网页中插手Java代码:
1、利用declarations(声明),可以界说全局变量或是在页内任那里所都可以会见的Java要领。声明被包括在标志<%!...%>中。
2、利用scriptlets(剧本片段),你能书写页内处理惩罚所需的任何逻辑,它们包括在<%...%>标志内。
3、Expressions(表达式),包括于<%=...%>中。它提供一种简朴的要领来显示Java表达式的功效。被附加上的表达式将被计较并在页面上显示出来,就仿佛你已经在代码中明晰写出了运算功效的数值一样。
在你本身编写的代码中,可以利用一些隐含变量(implicit variables)――JSP提供的预界说的Java工具。别的,通过利用JSP的指令(directives), 还可以包括非Java代码模块,好比来自其他文件的HTML文本。
下面我们来仔细看一看这些剧本元素,在编写你本身的JSP剧本时将会常常用到它们。
Directives(指令)
JSP界说了三个页内指令用于配置JSP参数或扩充代码。它们是 page,include和taglib,必需写在JSP页的第一行。语法如下:
<%@ directive attribute="value" ... %>
page指令答允你为网页设定一些根基参数,包罗配置所用剧本语言的参数(默认为Java)、你的剧本片段中引入的Java类、配置输出缓冲区等等。完整的page指令参数表见《JSP Specification Version 1.0》(《JSP类型1.0》)的2.8.1章。
利用include指令,可以包括其他文件的内容,好比存于单独文件中的HTML报头和页脚。
taglib指令用于扩充尺度的JSP标签集,这超出了本文的接头范畴。然而,相识JSP界说了一种扩充其标签集的要领照旧很有长处的,当你是一个软件商,想扩充JSP的原始成果而又不想粉碎其兼容性时,这一点尤为重要。
Declarations(声明)
利用declarations,你可以在JSP页中界说要领或变量,它们可被同一页中的其他代码会见。在大大都环境下,你大概会在本身的bean中界说要领。然而,有时候在网页内界说要领大概更利便一些,尤其是今世码只用于单一页面时。岂论界说要领照旧变量,声明都包括在<%! %>标志内。
留意,声明并不在JSP页内发生任何输出。它们仅仅用于界说,而不生成输出功效。要生成输出功效,你应该用JSP表达式或剧本片段。
Expressions(表达式)
Expressions是一种很是简朴的JSP标签,它用来把在<%= %>中界说的JSP表达式的值转换成字串并将这个值以动态文本的形式送出。Expression简直是一条生成文本的捷径,有了它,你不必在每次要显示一段动态文本的时候都去挪用print()要领。典范的应用就是,你可以用expressions显示简朴的变量值或bean中的要领的返回值。
譬喻,下面的代码将会生成getName()要领的返回值:
<H2>Welcome, <%= mybean.getName() %></H2>
事实上,在生成动态输出之前,JSP必需把要领的返回值转变为Java中的String工具。JSP类型中具体描写了在JSP表达式中,什么样的Java范例和Java类会被转酿成字串。
Scriptlets(剧本片段)
到此刻为止你已经学会了利用指令来引入任何Java类或Java包,你能界说页面级的要领或变量并在页中利用它们,你还可以利用提供普通web处理惩罚成果的隐含变量。还能在JSP页内做些什么就取决于你了,因为你可以在scriptlets(剧本片段)里编写任何你想要的Java代码,如下所示:
<% ...code... %>
通过在page指令中利用IMPORT参数,你可以从剧本片段内挪用所有Java API。因为你写的所有JSP代码实际上都被编译组成Java servlet,它自己就是一个Java类,所以你所用的语言自己就是Java,而不是任何一种修改或整理过的版本。这就像在SSJS中你可以编写任何代码一样。而与SSJS差异,在JSP中你有权利用整套富厚的Java API,因此险些没有任何范围性。
Implicit Variables(隐含变量)
前面提到过,JSP界说了一些隐含变量(即Java 工具)供你在表达式和剧本片段中利用。《JSP Specification Version 1.0》的表2-2列出了JSP1.0中可用的隐含变量。这里列出一些常用的工具:
out工具,范例为javax.servlet.jsp.JspWriter,提供对要领(譬喻print()要领)的会见,用来在剧本片段内生成输出功效。
request工具直接与Java中的javax.servlet.http.HttpServletRequest类对应,具有该类的工具的一切属性和要领。举个例子,要获取一个从HTML表单或URL查询字串传入的值,可以挪用request.getParameter()要领,按照名字获取参量。
response工具与Java中的javax.servlet.http.HttpServletResponse类对应,提供对你的网页发生的HTML响应的参数的会见权。因此,要在JSP页返回的HTML响应报头中插手一个值,你就可以挪用the response.setHeader() 要领来实现。
另一个简朴的例子
在下面的例子中,我们来看一看一个表单和它的JSP表单句柄之间的交互进程。利用前面接头过的剧本元素,我实现了一个简朴的web站点回馈表单(见图2)和一个JSP表单句柄用来验证输入,然后有条件地地生成基于回馈的输出。
图2.一个web站点回馈表单
图中按钮:submit query--提交;reset――重填
表单句柄将会检讨名称和意见栏以确定它们已被填写,假如个中任何一个或两个是空缺的,表单句柄会生成一条错误信息;不然它将继承查察用户意见是否与预先设定的字串匹配。假如匹配,它就输出一条专门的信息;不然输出“thank you”。
例2
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="NetObjects ScriptBuilder 2.01">
<TITLE>Feedback Results</TITLE>
</HEAD>
<%!
// 姓名和意见栏不能为空缺
// 查抄它们的值并返回功效
boolean validateInput(String name, String comment) {
boolean result = true;
// 假如姓名或意见未填写,返回 false 以表白输入无效
if (name.length() == 0)
result = false;
if (comment.length() == 0)
result = false;
return result;
} // 竣事输入验证validateInput
// 按照表单上的意见栏输出功效
String getStringCheese (String comment) {
String cheese = "I like cheese.";
String result;
if (comment.compareTo(cheese) == 0)
result = "We like cheese too!";
else
result = "We hope someday you'll learn to like cheese.";
return result;
} //竣事 getStringCheese
%>
<BODY BGCOLOR="#F0F0E0">
<%
// 获取通过表单提交的数据
String name = request.getParameter("name");
String age = request.getParameter("age");
String comment = request.getParameter("comment");
boolean isValid;
isValid = validateInput(name, comment);
// 按照用户是否未填写姓名或意见栏抉择输出内容
if (isValid) {
%>
<H2>Thank you for your feedback!</H2>
<H3>
<%
//输出意见栏的查询功效
out.println(getStringCheese(comment));
} // 竣事 if 措施段
else {
out.println("You didn't give us your name or a comment.");
%>
</H3>
Please <a href=https://www.jb51.net/"feedback_form.html">try again</a>
<%
} //竣事 else 措施段
%>
</BODY>
</HTML>
这个例子假定用户输入的意见是“I like cheese."(我喜欢奶酪)在代码中可以看到,这一响应是为填写这条意见的用户定制的。表单句柄将会返回如图3所示的页面:
图3.表单句柄输出
图中文字:感谢你的反馈!我们也喜欢奶酪。
这个例子很是简朴易懂。即便你只是一个JavaScript措施员,你也应该可以领略它。我还要指出这个例子中浮现的在JSP类型中并不很明明的一些特性。首先,请留意我在声明部门(<%'...%>中的部门)界说了一些要领,与在Java类中界说要领一模一样。这是因为JSP引擎把这些要领转变为底层的Java servlets,在欣赏器向网页发出请求时由处事器来执行它们。因此,任何变量和要领的界说都必需遵守尺度的Java语法。
还应留意到,在我的剧本片段的代码中,我把一个if...else语句分隔了,它超过了两个差异的剧本片段段。这完全是正当的!不只正当,并且把剧本片段代码和静态HTML交错起来是有条件生成HTML的好步伐,就像我在本例中所做到的一样。
最后,你可以看到我通过挪用request.getParameter()要领取得表单位素的值并把它赋给一个姑且变量。这是处理惩罚从表单或查询字串输入的值的尺度要领。
您大概感乐趣的文章: