分享
 
 
 

Base-Jsp-11-使用脚本元素

王朝java/jsp·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

现在已经不提倡在JSP页面中嵌写脚本元素,应尽量多的使用JSTL。

v 脚本元素

共有3类脚本元素

i) 用于要被执行的代码块的小脚本(scriptlet)

ii) 用于要被执行的单个语句的表达式(expression)

iii) 用于声明变量和方法的声明(declaration)

Ø 使用page指令的脚本属性

<%@ page language=”java” import=”java.util.*”%>

ª language属性指定了页面使用的脚本语言,默认是Java

ª 当java做脚本语言时,java.lang.javax.servlet、javax.servlet.jsp和javax.servlet.http程序包

中的类都默认可用于脚本元素。如果你使用的是程序包中除这些类之外的其他类,则可

以用import属性倒入那些类。这样就可以在脚本元素中使用简短的类名。

ª 导入多个程序包

<%@ page import=”java.util.*,com.ora.jsp.util.*”%>

等同于

<%@ page import=”java.util.*”%>

<%@ page import=”com.ora.jsp.util.*”%>

如果没有程序包名,则必须导入具体的类名

<%@ page imort=”MyNoPackageClass”%>

Ø 隐式的JSP脚本对象

脚本元素可以使用预定义的变量,容器会把这些变量作为参考分配给隐式对象

ª JSP隐式对象

变量名 java类型

Application java.servlet.ServletContext 代表应用程序

Config java.servlet.Servletconfig

Exception java.servlet.Throwable 包含了关于运行时错误的信息,只在错误处理页面中可

以得到

Out java.servlet..JspWriter 向应答消息中加入文本

Page java.servlet.Object

pageContext java.servlet.PageContext 提供一些访问其他所有对象和属性的引用

request java.servlet. http.HttpServletRequest 得到关于当前请求的信息

response java.servlet. http.HttpServletResponse 包含了当前应答消息对象的引用

session java.servlet.http.HttpSession 访问服务器管理的客户端的会话数据

Ø 使用小脚本

<%

String userAgent = request.getHeader("User-Agent");

if(userAgent.indexOf("MSIE") != -1)

{%}

mircrosoft IE

<%}

else if(userAgent.indexOf("Mozilla") != -1)

{%>

Netscape"

<%}%>

单独的小脚本并不是有效的Java语句,JSP容器会把小脚本中的代码段和向应答主体中写入的模板文本组合在一起,以形成有效的语句。

Ø 使用表达式

<%=userInfo.getUserName()%>

JSP的表达式元素用来把脚本代码表达式的结果插入到应答中。

需要注意的是:和小脚本中的语句不同,表达式中的代码不必以分号结尾,这是因为在翻译阶段会生成

Out.println(userInfo.getUserName());

Ø使用声明

<!%

Int globalCounter = 0;

%>

建议:不要使用声明元素声明变量,而是应该使用会话作用域和应用程序作用域的对象来保

存全局对象。

原因: ª Jsp页面运行时要被翻译为servlet,Jsp声明元素声明的变量在生成的servlet中作

为实例变量,而不是某个方法的局部变量。

ª 在服务器中每个用户被赋予一个线程,每个线程都执行JSP对象中的同一个方

法,当有多个用户访问Jsp声明元素声明的变量时就会出现线程安区问题,所有的

用户都共享这个实例变量,如果一个线程改变了它的值,那么所有的用户都可以看

到新的值,并都使用这个新的值。

Public class SomeClass

{

//实例变量:在所有方法体外声明的变量,值可以在类中的任何一个方法中访问。

//当有方法对其进行了设定,方法返回后,其值仍然保持不变

Private String anInstanceVariable;

Public void doSomething()

{

//局部变量:只能从声明它的那个方法访问,当这个方法返回时,局部变量就消

//失了

String aLocalVariable;

}

}

ª 当你在小脚本中,而不是在JSP声明块中声明一个变量时,在生成servlet的请求处

理方法中,该变量将被处理成一个局部变量,每个线程都会有它自己的局部变量副

本,所以当有多个线程执行同一代码时,局部变量不会造成任何问题。如果某个局

部变量的值被改变了,也不会影响到其他的线程。

ª 用JSP声明元素声明一个方法不会造成线程安全问题,但使得JSP页面包含了太多

的代码,使得应用程序的维护极为困难,因此也应该尽量避免使用,建议使用

JavaBeans和自定义行为。

v 处理脚本语法错误

使用脚本元素时,必须准备好处理一种新的语法错误。脚本代码几乎是原封不动地插入到servlet代码中,而servlet代码是在翻译阶段根据JSP页面生成的,因此,脚本元素中的语法错误会导致编译程序无法灵敏的报告错误。脚本元素中的语法错误在读取JSP页面时不会被发现,但在编译生成的servlet时会发现这些错误,编译器根据其在生成servlet代码中的位置(而不是JSP页面中的位置)来报告错误,但这种错误信息对JSP页面设计师来说不总是有意义。

指令和行为元素则没有这个问题,容器读取JSP页面,并通过生成适当的结果代码来替换所有的JSP指令和行为元素,容器需要详细的分析这些元素的类型,容器可以轻易的指出那个元素不正确,所以在替换过程中发生的错误,容器能比较准确的报告错误原因和位置。

报告脚本语法错误会出现误导性和令人困惑的出错消息,而且这种问题很难得到圆满的解决。因为当脚本代码和其他生成代码混合在一起的时候,容器很难查明真正的问题,所以尽量避免使用脚本代码。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有