【jsp】jsp中的动作元素

摘要:
4,Jsp标准操作在客户端请求时执行。5.Action元素标记是jsp中这些行为的使用形式。300425 II、、和:在jsp中使用JavaBean时,代码将插入_JspService方法。执行过程:1。JSP容器在scope属性指定的范围内查找具有指定id的JavaBean实例。

一,动作元素(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 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 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中的动作元素》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇echarts分段(一段一种颜色)显示python线程互斥锁Lock(29)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringBoot整合Shiro 二:Shiro配置类

  环境搭建见上篇:SpringBoot整合Shiro 一:搭建环境   Shiro配置类配置 shiro的配置主要集中在 ShiroFilterFactoryBean 中       关于权限:   anon:无需认证就可以访问 ​  authc:必须认证了才能访问​   user:必须用有了 记住我 功能才能用​   perms:拥有对某个资源的...

SpringBoot + MyBatis(注解版),常用的SQL方法

一、新建项目及配置 1.1 新建一个SpringBoot项目,并在pom.xml下加入以下代码   <dependency>    <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starte...

线程.Qt更新界面

1、信号&槽 机制 即可  ZC:个人暂时 测试下来,类似是 PostMessage(...)的方式:   a、是在各自的线程中执行代码,   b、调用 emit不耗时(指的意思是 像调用PostMessage(...)一样 扔完就算,具体 slot中需要执行多久 不关“emit ???()”的事) 2、测试代码:  2.1、h #ifndef M...

关于Spring IOC (DI-依赖注入)需要知道的一切

关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 《Spring入门经典》这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初学者也适合spring有过开发经...

linux 应用程序直接读写寄存器或物理内存

1.程序说明: 调试驱动程序时,经常遇到候需要查看或设置寄存器的情况,但是直接更改内核代码又不方便。 这里提供一个应用程序源码能在应用层访问底层寄存器。(网上找到的,进行过更改)。 这里只提供4字节数据的访问,如果需要其他字节宽度则需要更改代码。 line40 增加了O_DSYNC标志,防止cache导致数据写入不及时。 2.应用程序源码 1 #incl...

SpringMvc 项目配置

spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...