【jsp】jsp中的动作元素
一,动作元素(Action):预定义的java代码。目的在于代码的可重用性。
1,为请求阶段提供信息,允许在页面之间转移控制权。
2,JSP2.0规范定义了标准动作,标准动作是一些标签,影响JSP运行时的行为和对客户请求的响应。
在页面被转换为Servlet时,JSP容器遇到这些标签,就使用预先定义的对应于该标签的java代码来代替它。
3,动作元素语法基于xml的形式。
<jsp:ActionName attr="value" .... ></jsp:ActionName>
4,JSP标准动作在客户端请求时执行。
5,动作元素标签是这些行为在jsp中的使用形式。
6,我们可以自定义动作,使用自定义标签来实现。
300 425
二,<jsp:userBean>,<jsp:setProperty>和<jsp:getProperty>: 在JSP使用JavaBean,代码将按出现位置插入到_jspService方法中。
1,<jsp:userBean>用于实例化Bean,或定位存在的Bean实例。
语法:<jsp:userBean id="Bean的唯一标识" class="package.Class" scop="Bean的可见度" ></jsp:userBean>
Bean的可见度:page(默认),request,session,application
* 实例化class指定的类,并将实例化后的对象绑定到_jspService中的变量,变量由id指定名称而类型为自身或type指定。
* 在使用class属性指定bean类时,不要依赖于page指令的import来导入类的包。
* Bean共享时,仅当不存在相同id和scope的Bean时才实例化新的对象。
* type属性用于将bean实例指向由id指定名称类型为type指定的变量。类型可以为父类,实现的接口,或者为自身。
例子:假定package.MyBean继承自java.beans.SimpleBeanInfo
<jsp:userBean id="myBean" class="package.MyBean" scop="session" type="java.beans.SimpleBeanInfo"></jsp:userBean>
在servlet中生成为:java.beans.SimpleBeanInfo myBean = new package.MyBean();
* jsp:userBean起始标签和结束标签之间的代码,只有在实例化Bean的时候才执行。所以依赖于scope指定的Bean生命周期。
所以可以将设置bean属性的代码(<jsp:setProperty>)放在标签内。
(<jsp:userBean>标签内部的代码</jsp:userBean>)
执行过程:
1,JSP容器在scope属性指定的范围查找指定id的JavaBean实例。
2,找到该实例,该被实例被共享。“该标签内的代码也不会被执行。"
3,没有找到,只指定了class属性,则根据class属性来创建一个新实例。
没有找到,只指定了beanName属性,则使用beanName作为参数调用java.bean.Beans类中的instantiate方法创建新的bean实例。
4,将变量保存到scope属性指定的范围中。使用setAttribute方法必须以id的值为key(这由容器自动处理)。
Bean的共享:bean都会绑定到_jspService方法中做为局部变量。
page(默认):由于每个页面都有不同的PageContext对象,所以不共享bean,对每个请求都建立新的bean。(include指令包含的页面除外)
request: 在处理当前请求时,将bean放入HttpServletRequest对象中,看起来确实不共享bean,
但在使用include指令和动作,forward转发的时候会形成几个页面共享一个reqeust对象,也就共享bean了。
session: 当前会话中共享。
application:web应用中共享。
2,<jsp:setProperty>:设置Bean的属性,对应(而不是简单的调用)Bean的setXxx方法。
重要:Bean的属性命名规则和jsp:setProperty标签的命名规则的一致性,Bean的属性命名的不规范会导致org.apache.jasper.JasperException异常。
这些规范在java.beans.Beans中定义,由开发工具来调用对类做检查。Bean之所以是个Bean是由其规范来决定的,而不是由父类来决定的。
bean分析器会执行一个“字母小写化的过程”来推导出属性的名字,将get/set之后的第一个字符转化为小写字母。这可能导致属性和参数名称的不一致。
要命的在于对于get/set之后二个字母都为大写字母的属性,那么属性的第一个字母不会被改写为小写字母。
假设方法名字为getURL 解析出的的属性为URL 而不是uRL。如果你声明属性为uRL的话,默认的方法命名为getURL。作为属性uRL和URL显然是不同的。
所以在命名bean属性的时候要么前面2个字母都大写,要么前面2个字母都大写。
在JSP中发生了什么呢?
在使用<jsp:setProperty>和<jsp:getProperty>的时候,得到所有请求参数的名称列表,JSP容器通过请求参数来推导出要设置的相应属性的get/set方法,调用这个方法。这里没有问题。
bean分析器根据bean属性名推导出方法名,这时JSP容器推导出来的方法名和bean分析器推导出的方法名字也没有问题。
问题来了,在设置属性值的时候,二者通过方法名推导出属性名的时候,二者都遇到了麻烦!
语法:<jsp:setProperty name="Bean的ID" property="属性名" value="属性值"></jsp:setProperty>
<jsp:setProperty name="Bean的ID" property="属性名" param="参数名"></jsp:setProperty>
* param属性不能和value属性一起使用。
* 使用value属性和param属性的区别:
使用value属性 : 需要手动将bean属性和请求参数类型进行匹配转换。
使用param属性 : 对于基本类型和包装类,容器自动将属性和请求参数的类型进行转换匹配。匹配失败不采取任何动作,也就是不会传递null。
* 如果bean属性名本与请求参数名相同,那可以不指定parm属性。
3,<jsp:getProperty>:访问并输出Bean的属性值,对应(而不是简单的调用)Bean的getXxx方法。
重要:同上;
语法:<jsp:getProperty name="Bean的ID" property="属性名"></jsp:setProperty>
* 把属性的值转换为String后发送到输出流输出,如果属性是一个对象,将调用该对象的toString()方法。所以有必要为我们的类实现toString方法,而不是依赖Object的默认toString方法;
三,<jsp:param>:以"名-值"对的形式增加或替换主页面中发送到被包含页面的请求参数。一般和include指令和动作,forward动作等一起使用;
1,语法:<jsp:param name="参数名" value="参数值"></jsp:param>
2,参数的可见度:主页面不可以访问被包含页面的参数,而被包含页面可以访问主页面的参数。
四,<jsp:include> :在“请求”期间将其他页面的“输出”包含进来。这样的行为和RequestDispatcher类的include方法完全相同。
*当被包含页面需要改变响应头和设置报头时,对于这样的情况使用include指令。
那怎么既可以使用jsp:include元素又设置响应头和设置报头呢?还有种方法是设置缓冲区,在输出流真正输入给客户端之前,设置响应头和设置报头。
五,<jsp:forward> :对于处理复杂情况,避免使用该动作。使用servlet的RequestDispatcher的forward方法。
六,<jsp:element>,<jsp:attribute>和<jsp:body>:指定动态定义一个xml元素的标签。
语法:<jsp:element name="元素名">
<jsp:attribute name="元素属性名" trim="如何处理空格">元素属性的值</jsp:attribute>
<jsp:body>元素的内容</jsp:body>
</jsp:element>
生成结果:<元素名 元素属性名="元素属性的值">元素的内容</元素名>
七,其他动作一般与定义jsp文档的xml有关。
原文链接:JSP动作元素
【jsp】jsp中的动作元素的更多相关文章
- JSP页面中的动作标识
JSP页面中的动作标识 制作人:全心全意 包含文件标识<jsp:include> 此标识和include指令类似,用于向当前页面中包含其它的文件,且包含的文件可以是动态文件,也可以是静态文 ...
- jsp中的动作元素:<jsp:plugin>
<jsp:plugin>用来产生客户端浏览器的特别标签(object或embed),可以使用它来插入Applet或JavaBean. 当jsp文件被编译把结果发给浏览器是,<jsp: ...
- JSP动作元素
JSP动作元素分类 <jsp:include page="content.jsp"></jsp:include> 使用<%@ include%> ...
- #1122 JSP动作元素
JSP动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面 ...
- JAVA-JSP动作元素之plugin、params、fallback
相关资料:<21天学通Java Web开发> 结果总结:1.<jsp:plugin>.<jsp:params>.<jsp:fallback>三个动作元素 ...
- JSP动作元素——————理论篇
JSP动作元素的组成及作用 JSP使用Action来控制Servlet引擎的行为,可重复使用JavaBean组件. 常用Action: jsp:param 在 jsp:include.js ...
- JSP基础总结(运行机制、脚本元素、指令元素、动作元素)
JSP的运行机制: 1.转译阶段:JSP页面转换成Servlet类: 2.请求阶段:Servlet类执行,将相应结果发送至客户端. 流程解释: 1.用户访问某个JSP页面 2.服务器找到相应的JSP页 ...
- JSP 动作元素
JSP动作元素 1. 动作元素分类 用来动态的包含文件.网页跳转及使用JavaBean组件等. 语法:<jsp:XXX />或者<jsp:XXX></jsp:XXX&g ...
- JavaWeb学习----JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- HTTP服务原理
第1章 HTTP服务介绍 1.1 简述用户访网站流程 a 进行域名信息的DNS解析 dig +trace 获得www.oldboyedu.com ip地址信息 b 进行与网站服务器建立连接,tcp三次 ...
- “服务器推”技术【转载+整理】
原文地址 本文内容 "服务器推(server-push)"技术的应用 基于客户端套接口的"服务器推"技术 基于 HTTP 长连接的"服务器推" ...
- Asp.NET MVC 之 调试访问 webservice 时出现“ 无法找到资源 ”的错误
问题情景如标题,具体错误如下图: 出现以上情况,是程序将 .asmx 文件按控制器方式解析了,在 RouteConfig.cs 文件的 RegisterRoutes 方法中忽略 .asmx 文件,&q ...
- 【Linux】Ubuntu配置服务自启动 sysv-rc-conf
在Ubuntu下,配置服务系统开机自启动,使用的不是chkconfig,而是sysv-rc-conf. 且看如下: 安装: sudo apt-get install sysv-rc-conf 帮助信息 ...
- 微信小程序 - 授权页面
小程序授权方式更改以后,我们只有两种选择. 1.在主页使用遮罩层,类似这样的(会造成一点卡顿) 2.新增登陆授权页(经过反复的思考,我还是觉得用这个好) 这个也不错: https://blog.csd ...
- Using a Microsoft Account to Logon and Resulting Internet Communication in Windows 8
Using a Microsoft Account to Logon and Resulting Internet Communication in Windows 8 此主题尚未评级 - 评价此主题 ...
- 数据库中truncate与delete的区别与联系
昨天被问到truncate与delete的区别,truncate没用过,回去百度了一下,才知道还有这个一种语句. truncate table命令将快速删除数据表中的所有记录(保留数据表结构).这种快 ...
- web.xml关于spring的讲解
<context-param>的作用: web.xml的配置中<context-param>配置作用 . 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件w ...
- SSH小问题:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HA ...
- golang之tcp自动重连
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代码: /* ...