JSP简明教程:令人欢快的剧本编程

假如你是直接利用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()要领取得表单位素的值并把它赋给一个姑且变量。这是处理惩罚从表单或查询字串输入的值的尺度要领。

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsddfs.html