您的当前位置:首页正文

jsp简明教程

来源:画鸵萌宠网
简明法语教程:JSP简明教程

疯狂代码 http://CrazyCoder.cn/ ĵ:http:/CrazyCoder.cn/Java/Article7567.html

如果你是直接使用Java servlets那你将不得不在Java类中处理HTTP输入和HTML输出你需要丰富Java编程经验来构建复杂应用JSP加入使你可以把HTML表达逻辑从植入servlets中复杂商务逻辑区分开来这意味着可以由有经验脚本编写者来编写表达层代码而高级Java开发者能够集中精力去解决servlets和bean中更为复杂问题

  不管你有没有Java编程知识都能够使用JSPJSP包含了些服务器端标签使得不用写行Java代码就能显示动态数据你可以直接访问bean来完成操作然后使用JSP标签把结果显示为动态内容你还可以用servlets生成beanservlets 操作运算结果存于其中然后再使用JSP标签显示结果同样不需要在JSP页中写Java代码

  有 3种方式可以用来在你网页中加入Java代码:

  1、使用declarations(声明)可以定义全局变量或是在页内任何地方都可以访问Java思路方法声明被包含在标记<%!...%>中

例子:

<%! i = 0; %> <%! a, b, c; %>

<%! Circle a = Circle(2.0); %>

你可以直接使用在<% @ page %>中被包含进来已经声明变量和思路方法不需要对它们重新进行声明个声明仅在个页面中有效

2、使用scriptlets(脚本片断),你能书写页内处理所需任何逻辑它们包含在<%...%>标记内scriptlet,我们便能做以下事:

声明将要用到变量或思路方法 编写JSP表达式

使用任何隐含对象和任何用声明过对象 编写JSP语句

任何文本HTML标记JSP元素必须在scriptlet的外

当JSP收到客户请求时scriptlet就会被执行如果scriptlet有显示内容这些显示内容就被存在out对象中

  3、Expressions(表达式)包含于<%=...%>中它提供种简单思路方法来显示Java表达式结果被附加上表达式

将被计算并在页面上显示出来就好像你已经在代码中明确写出了运算结果数值样你不能用个分号来作为表达式结束符但是同样表达式用在scriptlet中就需要以分号来结尾了

4、HTML注释在客户端显示个注释JSP 语法:

不在客户端显示注释JSP 语法:

<%-- comment --%>

  在你自己编写代码中可以使用些隐含变量(implicit variables)??JSP提供预定义Java对象另外通过使用JSP指令(directives), 还可以包含非Java代码模块比如来自其他文件HTML文本

  下面我们来仔细看看这些脚本元素在编写你自己JSP脚本时将会经常用到它们

Directives(指令)

  JSP定义了 3个页内指令用于设置JSP参数或扩充代码它们是 page,和taglib必须写在JSP页第行语法如下:

  <%@ directive attribute=\\\"value\\\" ... %>

page指令允许你为网页设定些基本参数(定义JSP文件中全局属性)包括设置所用脚本语言参数(默认为Java)、你脚本片断中引入Java类、设置输出缓冲区等等完整page指令参数表见JSP Specication Version 1.0(JSP规范标准1.0)2.8.1章例子:

<%@ page import=\\\"java.util.*, java.lang.*\\\" %> <%@ page buffer=\\\"5kb\\\" autoFlush=\\\"false\\\" %> <%@ page errorPage=\\\"error.jsp\\\" %>

<%@ page %>指令作用于整个JSP页面同样包括静态包含文件但是<% @ page %>指令不能作用于动态包含文件比如 无论你把<% @ page %>指令放在JSP文件哪个地方它作用范围都是整个JSP页面

  使用指令可以包含其他文件内容比如存于单独文件中HTML报头和页脚

  taglib指令用于扩充标准JSP标签集(定义个标签库以及其自定义标签前缀)这超出了本文讨论范围然而了解JSP定义了种扩充其标签集思路方法还是很有好处当你是个软件Software商想扩充JSP原始功能而又不想破坏其

兼容性时这点尤为重要

Declarations(声明)

  使用declarations你可以在JSP页中定义思路方法或变量它们可被同页中其他代码访问在大多数情况下你可能会在自己bean中定义思路方法然而有时候在网页内定义思路方法可能更方便些尤其是当代码只用于单页面时不论定义思路方法还是变量声明都包含在<%! %>标记内

  注意声明并不在JSP页内产生任何输出它们仅仅用于定义而不生成输出结果要生成输出结果你应该用JSP表达式或脚本片断

Expressions(表达式)

  Expressions是种非常简单JSP标签它用来把在<%= %>中定义JSP表达式值转换成字串并将这个值以动态文本形式送出Expression确是条生成文本捷径有了它你不必在每次要显示段动态文本时候都去pr思路方法典型应用就是你可以用expressions显示简单变量值或bean中思路方法返回值

  例如下面代码将会生成getName思路方法返回值:

  

Welcome, <%= mybean.getName %>

  事实上在生成动态输出的前JSP必须把思路方法返回值转变为Java中String对象JSP规范标准中详细描述了在JSP表达式中什么样Java类型和Java类会被转变成字串

:重定向个HTML文件JSP文件或者是个段;语法:

\\\or

\\\value=\\\"{parameterValue | <%= expression %>}\\\" />+

属性:

page=\\\"{relativeURL | <%= expression %>}\\\"

这里是个表达式或是个串用于介绍说明你将要定向文件或URL.这个文件可以是JSP,段或者其它能够处理

request对象文件(如asp,cgi,php).

}\\\" />+

向个动态文件发送个或多个参数这个文件定是动态文件.

如果你想传递多个参数你可以在个JSP文件中使用多个name指定参数名value指定参数值.

例子:

标签从个JSP文件向另个文件传递个包含用户请求request对象.标签以下代码将不能执行你能够向目标文件传送参数和值在这个例子中我们传递参数名为username,值为scott,如果你使用了标签话目标文件必须是个动态文件能够处理参数如果在你使用的前jsp文件已经有了数据那么文件执行就会出错

:获取Bean属性值用于显示在页面中语法:

属性:

name=\\\"beanInstanceName\\\" bean名字,由指定 property=\\\"propertyName\\\" 所指定Bean属性名

窍门技巧:

在sunJSP参考中提到如果你使用来检索值是空值那么NullPoerException将会出现同时如果使用段或表达式来检索其值那么在浏览器上出现是null(空). 例子

Calendar of

描述

这个元素将获得Bean属性值并可以将其使用或显示在JSP页面中.在你使用的前你必须用创建它. 元素有些限制:

你不能使用来检索个已经被索引了属性

你能够和JavaBeans组件起使用,但是不能和Enterprise Bean起使用

:包含个静态或动态文件元素允许你包含动态文件和静态这两种包含文件结果是区别如果文件仅是静态文件那么这种包含仅仅是把包含文件内容加到jsp文件中去而如果这个文件动态那么这个被包含文件也会被Jsp编译器执行

:执行个applet或Bean,有可能话还要下载个Java插件用于执行它元素用于在浏览器中播放或显示个对象(典型就是applet和Bean),而这种显示需要在浏览器java插件

: 创建个Bean例子并指定它名字和作用范围用于定位或举例个JavaBeans组件首先会试图定位个Bean例子如果这个Bean不存在那么就会从个或模版中进行举例 例子

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 Specication Version1.0表2-2列出了JSP1.0中可用隐含变量这里列出些常用对象:

  out对象类型为javax.servlet.jsp.JspWriter提供对思路方法(例如pr思路方法)访问用来在脚本片断内生成输出结果

  request对象直接和Java中javax.servlet.http.HttpServletRequest类对应具有该类对象切属性和思路方法举个例子要获取个从HTML表单或URL查询字串传入值可以request.getParameter思路方法根据名字获取参量

   response对象和Java中javax.servlet.http.HttpServletResponse类对应提供对你网页产生HTML响应参数访问权因此要在JSP页返回HTML响应报头中加入个值你就可以the response.Header 思路方法来实现

另个简单例子

  在下面例子中我们来看看个表单和它JSP表单句柄的间交互过程使用前面讨论过脚本元素我实现了个简单web站点回馈表单(见图2)和个JSP表单句柄用来验证输入然后有条件地地生成基于回馈输出

  表单句柄将会检验名称和意见栏以确定它们已被填写如果其中任何个或两个是空白表单句柄会生成条信息;否则它将继续查看用户意见是否和预先设定字串匹配如果匹配它就输出条专门信息;否则输出“thankyou”

  例2

  

  

  

  Feedback Results

  

  <%!

  // 姓名和意见栏不能为空白

  // 检查它们值并返回结果

  boolean validateInput(String name, String comment) {

   boolean result = true;

   // 如果姓名或意见未填写返回 false 以表明输入无效

   (name.length 0)

     result = false;

   (comment.length 0)

     result = false;

   result;

  } // 结束输入验证validateInput

  // 根据表单上意见栏输出结果

  String getStringCheese (String comment) {

   String cheese = \\\"I like cheese.\\\";

   String result;

   (comment.compareTo(cheese) 0)

    result = \\\"We like cheese too!\\\";

  

    result = \\\"We hope someday you´ll learn to like cheese.\\\";

   result;

  } //结束 getStringCheese

  %>

  

  <%

   // 获取通过表单提交数据

   String name = request.getParameter(\\\"name\\\");

   String age = request.getParameter(\\\"age\\\");

   String comment = request.getParameter(\\\"comment\\\");

   boolean isValid;

   isValid = validateInput(name, comment);

   // 根据用户是否未填写姓名或意见栏决定输出内容

   (isValid) {

  %>

  

Thank you for your feedback!

  

  <%

    //输出意见栏查询结果

    out.prln(getStringCheese(comment));

   } // 结束 段

   {

    out.prln(\\\"You didn´t give us your name or a comment.\\\");

  %>

  

  Please try again

  <%

   } //结束 段

  %>

  

  

  这个例子假定用户输入意见是“I like cheese.\\\"(我喜欢奶酪)在代码中可以看到这响应是为填写这条意见用

户定制表单句柄将会返回如图3所示页面:

  这个例子非常简单易懂即便你只是个JavaScript员你也应该可以理解它我还要指出这个例子中体现在JSP规范标准中并不很明显些特性首先请注意我在声明部分(<%´...%>中部分)定义了些思路方法和在Java类中定义思路方法模样这是JSP引擎把这些思路方法转变为底层Java servlets在浏览器向网页发出请求时由服务器来执行它们因此任何变量和思路方法定义都必须遵守标准Java语法

  还应注意到在我脚本片断代码中我把个...语句分开了它跨越了两个区别脚本片断段这完全是合法!不仅合法而且把脚本片断代码和静态HTML交叉起来是有条件生成HTML好办法就像我在本例中所做到样

  最后你可以看到我通过request.getParameter思路方法取得表单元素值并把它赋给个临时变量这是处理从表单或查询字串输入值标准思路方法   2009-2-12 3:31:09

疯狂代码 http://CrazyCoder.cn/

因篇幅问题不能全部显示,请点此查看更多更全内容

Top