仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1705|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网页编程之JSP 剧本元素、指令和预界说变量

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。js|变量|剧本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编程言语而筹办的占位符。



最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net并驾齐驱的
爱飞 该用户已被删除
沙发
发表于 2015-1-21 10:15:00 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-24 18:20:31 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
活着的死人 该用户已被删除
地板
发表于 2015-1-28 07:51:54 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
透明 该用户已被删除
5#
发表于 2015-2-4 13:17:10 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
老尸 该用户已被删除
6#
发表于 2015-2-5 12:44:12 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
简单生活 该用户已被删除
7#
发表于 2015-2-9 01:56:35 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-26 18:16:50 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
因胸联盟 该用户已被删除
9#
发表于 2015-3-2 18:31:00 | 只看该作者
是一种突破用户端机器环境和CPU
不帅 该用户已被删除
10#
发表于 2015-3-11 05:17:47 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
兰色精灵 该用户已被删除
11#
发表于 2015-3-12 01:09:33 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
admin 该用户已被删除
12#
发表于 2015-3-17 11:09:53 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
第二个灵魂 该用户已被删除
13#
发表于 2015-3-18 10:14:01 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
深爱那片海 该用户已被删除
14#
发表于 2015-3-25 09:51:15 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-1 17:32:23 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
16#
发表于 2015-4-6 07:58:22 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
再见西城 该用户已被删除
17#
发表于 2015-4-16 02:10:18 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
莫相离 该用户已被删除
18#
发表于 2015-5-2 15:31:06 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
蒙在股里 该用户已被删除
19#
发表于 2015-5-4 04:54:27 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
乐观 该用户已被删除
20#
发表于 2015-5-4 07:42:48 | 只看该作者
是一种为 Internet发展的计算机语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 09:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表