zoukankan      html  css  js  c++  java
  • jsp学习(2)jsp标签

    1.脚本程序

    脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

    脚本程序的语法格式:<%代码片段%>您也可以编写与其等价的XML语句,就像下面这样:<jsp:scriptlet>代码片段</jsp:scriptlet>

    2.中文编码问题:

    如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    3.jsp声明变量:

    一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。JSP声明的语法格式:

    <%! int a = 1; void method()%> 可以声明实例变量或方法,加上static可以声明类变量。可以添加private 等修饰符

    <jsp:declaration>代码片段</jsp:declaration> 可以声明实例变量或方法,加上static可以声明类变量。可以添加private 等修饰符

    ③直接在代码片段<%%>中声明,声明的是方法内的变量局部变量,不能声明方法

    4.JSP表达式

    一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

    由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

    表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

    JSP表达式的语法格式:

    <%= %>

    <jsp:expression></jsp:expression>


    5.jsp注释

    JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉。

    <%-- 注释 --%>:JSP注释,注释内容不会被发送至浏览器甚至不会被编译

    <!-- 注释 -->:HTML注释,通过浏览器查看网页源代码时可以看见注释内容

    ③使用java的单行注释// 或多行注释 /** */

    6.jsp指令:

    JSP指令用来设置与整个JSP页面相关的属性,如网页的编码方式和脚本语言。

    JSP指令语法格式: <%@ directive attribute="value" %>

    在编译阶段起作用

    <%@ page ... %>:定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等

    Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

    Page指令的语法格式:<%@ page attribute="value" %>等价的XML格式:<jsp:directive.page attribute="value" />

    page指令相关属性:

    属性 描述
    buffer 指定out对象使用缓冲区的大小
    autoFlush 控制out对象的 缓存区
    contentType 指定当前JSP页面的MIME类型和字符编码
    errorPage 指定当JSP页面发生异常时需要转向的错误处理页面,假如a.jsp的errorPage是b.jsp,那么当a.jsp出问题时,将执行b.jsp的代码,地址栏还是a.jsp
    isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面,如果是true,则可以直接使用exception这个隐式对象,否则需要通过pageContext.getException();得到他。
    extends 指定servlet从哪一个类继承
    import 导入要使用的Java类
    info 定义JSP页面的描述信息
    isThreadSafe 指定对JSP页面的访问是否为线程安全
    language 定义JSP页面所用的脚本语言,默认是Java
    session 指定JSP页面是否使用session
    isELIgnored 指定是否执行EL表达式
    isScriptingEnabled isScriptingEnabled

     

    <%@ include file="文件的绝对路径或者相对路径" %>

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

    file不支持任何的表达式,也不允许通过?挂参方式来传递参数。

    include 指令中的文件名实际上是一个相对的 URL 地址。

    如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

    等价的XML语法:<jsp:directive.include file="文件相对 url 地址" />

    <%@ taglib taglib uri="uri" prefix="prefixOfTag" %>:引用标签库,可以是自定义的标签库

    uri属性确定标签库的位置,prefix属性指定标签库的前缀。

    等价的XML语法:<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

    7.jsp行为:

    与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。

    JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

    行为标签只有一种语法格式,它严格遵守XML标准:

    <jsp:action_name attribute="value" />

    所有的动作要素都有两个属性:id属性和scope属性。

    id属性:id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

    scope属性:该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application

    行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:

    <jsp:include page="" flush="true/false">:在页面被请求的时候引入一个文件。page 包含在页面中的相对URL地址。flush 布尔属性,定义在包含资源前是否刷新缓存区。

    和<%@ include file="文件的绝对路径或者相对路径" %>

    相同点:

    (1):引用的那个页面必须加上<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>才不会乱码

    不同点:

    (2):<jsp:include>是在请求页面时载入,<%@ include>是在编译时引入,所以a.jsp 通过<%@ include file="b.jsp">,那么a可以使用b页面的变量,而b也可以使用a页面的变量,而<jsp:include>不能。

    jsp:useBean:寻找和初始化一个JavaBean组件

    jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。 这个功能非常有用,因为它使得我们可以发挥 Java 组件复用的优势。

    jsp:useBean动作最简单的语法为:

    <jsp:useBean id="name" class="package.class" />

    在类载入后,我们既可以通过 jsp:setProperty jsp:getProperty 动作来修改和检索bean的属性。

    以下是useBean动作相关的属性列表。 

    (1):class 指定Bean的完整包名。

    (2):type 指定将引用该对象变量的类型。

    (3):beanName:通过 java.beans.Beans 的 instantiate() 方法指定Bean的类型和class实现的效果一样,且不能并存。

     <jsp:useBean>元素用来定位或初始化一个JavaBeans组件。<jsp:useBean>首先会尝试根据id定位Bean,如果其不存在,则会依据class名称(class属性指定)或序列化模板(beanName属性指定)进行实例化。

     进行定位或初始化Bean对象时,<jsp:useBean>按照以下步骤执行:

    步骤1: 尝试在scope属性指定的作用域使用你指定的名称(id属性值)定位Bean对象(只有在不同jsp页面这种操作有可能成功,因为相同页面不允许出现同样id的bean,会报错【 Duplicate bean name】,scope相同是必须一致,假如第一个scope是application,第二是scope是session,这种定位不到,反过来也一样,可以理解为我附庸的附庸不是我的附庸);

    步骤2: 使用你指定的名称(id属性值)定义一个引用类型变量;

    步骤3: 假如找到Bean对象,将其引用给步骤2定义的变量。假如你指定类型(type属性),赋予该Bean对象该类型;

    步骤4: 假如没找到,则实例化一个新的Bean对象,并将其引用给步骤2定义的变量。假如该类名(由beanName属性指定的类名)代表的是一个序列化模板(serialized template),该Bean对象由java.beans.Beans.instantiate初始化;

    步骤5: 假如<jsp:useBean>此次是实例化Bean对象而不是定位Bean对象,且它有体标记(body tags)或元素(位于<jsp:useBean>和</jsp:useBean>之间的内容,则执行该体标记,如果是定位bean,它有体标记(body tags)或元素(位于<jsp:useBean>和</jsp:useBean>之间的内容,不会执行。

    我们可以使用<jsp:useBean>元素来定位或实例化一个JavaBean对象,但不能是EJB。对于EJB,我们可以通过创建自定义标记来直接调用彧采用其它方式。

    <jsp:useBean>元素各属性解析id="beanInstanceName"

    一个用来标识你指定作用域的变量。可以在JSP文件的表达式或脚本小应用程序中使用该变量名称。该名称大小写敏感,必须符合JSP页面中脚本语言的命名规则。假如你使用的是Java语言,则该名称遵守的是Java命名规范。假如该Bean对象已由其它<jsp:useBean>元素创建,则该值必须和实例化该Bean对象的<jsp:useBean>元素id属性值一致(scope也必须一致),才能实现定位到该Bean对象。

    scope="page | request | session | application" Bean对象存在的作用范围,默认值为 page. 不同作用域解释如下:

    1) page: 你可以在<jsp:useBean>元素所在JSP页面或其静态包含页面使用该JavaBean对象,直到该页面发送响应回客户端或跳转(forwards)至其它页面。

    2) request: 你可以在处理同一个请求的任意一个页面使用该JavaBean对象,直到该页面发送响应回客户端或产生新的请求。你可以使用request对象访问该JavaBean对象,示例:request.getAttribute(beanInstanceName). 

    3) session: 你可以在同一次会话的任意一个页面使用该JavaBean对象,该JavaBean对象在整个会话期间一直存在。使用<jsp:useBean/>创建JavaBean对象的页面的<%@page %>指令元素的session属性值必须设置为true; 

    4) application: 你可以在创建该JavaBean对象的同一个应用的任意一个页面使用该JavaBean对象,该JavaBean对象在整个应用期间一直存在。应用中任意一个页面均可使用它。

     class="package.class" 

    从一个class实例化Bean对象,使用new关键字调用class的构造方法完成。该 class 必须不能是抽象,必须有一个 public、无参的构造器。包名和类名称大小写敏感。

     type="package.class"

    用来指定该Bean对象的数据类型,假如既没有指定 class 或 beanBean, 没有Bean对象能被实例化。包和类名称大小写敏感。

    class="package.class"  type="package.class"

    使用class属性指定的类实例化JavaBean对象,并声明其数据类型为type属性指定的类型;type属性值可和class属性值同,或为其超类、接口。class属性中所指定类名称必须不能为抽象的,必须包含有public,无参的构造方法。class和type属性所指定的包名,类名均大小写敏感。

    beanName="{package.class | <%= expression %>}" type="package.class"

    使用java.beans.Beans.instantiate方法实例化beanName属性指定的类或序列化模板对应的Bean对象,赋予JavaBean对象type属性指定的数据类型。Beans.instantiate方法会检查beanName属性指定的名称是类名称还是序列化模板的名称。假如该JavaBean对象已被序列化,则Beans.instantiate使用类加载器读取序列化的内容,属性值要么是一个完整类名,要么是一个可以转化为完整类名的表达式。用来传给Beans.instantiate方法。type属性值可和beanName属性值同,或为其超类、接口。beanName和type属性所指定的包名,类名均大小写敏感。

    JSP动作元素useBean使用剖析:

    对于<jsp:useBean>执行步骤的理解,我们可以通过阅读JSP转化成的Servlet源码
    完成。以下给出二段示意代码, 可参阅之前步骤进行深化理解:

    1) 通过beanName指定要实例化的JavaBean类名:

    JSP源码 :<jsp:useBean id="hello" beanName="com.app.model.Person" type="com.app.model.Person">

    JSP转译成Servlet的源码 :


     

    2) 通过class指定要实例化的JavaBean类名:

    JSP源码 :<jsp:useBean id="hello" class="com.app.model.Person" type="com.app.model.Person">

    JSP转译成Servlet的源码 :

     注意几点:

    1) class或beanName不能同时存在;它们用来指定实例化的类名称或序列化模板;如果确信JavaBean对象已存在,class和beanName属性均可无须指定, 可只须指定type属性。

    2) class可以省去type独自存在,beanName必须和type一起使用;

    3) class指定的是类名,beanName指定的是类名或序列化模板的名称;

    4) class指定的类名必须包含public、无参的构造方法;在对象已实例化时,beanName指定的名称可以为其接口、父类;

    5) 如果JavaBean对象已存在,<jsp:useBean>只是用来定位JavaBean,则只需使用type属性即可,class和beanName这时舍去不影响使用。

    6) class或beanName指定的类名必须包括包名称,type可以省去包名,通过<%@page import=""%>指定所属包亦可。

    7) class通过new创建JavaBean对象;beanName通过java.beans.Beans.instantiate初始化JavaBean对象。

    转载:https://chineseoa.iteye.com/blog/577256

    jsp:setProperty:用来设置已经实例化的Bean对象的属性

    有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:

    <jsp:useBean id="myName" ... /> ...

    <jsp:setProperty name="myName" property="someProperty" .../>

    此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。

    第二种用法是把jsp:setProperty放入jsp:useBean元素的内部,如下所示:

    <jsp:useBean id="myName" ... > ...

    <jsp:setProperty name="myName" property="someProperty" .../>

    </jsp:useBean>

    此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。

    jsp:setProperty动作有下面四个属性,如下表:

    (1):name name属性是必需的。它表示要设置属性的是哪个Bean。

    (2):property property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

    (3):value value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。 value和param不能同时使用,但可以使用其中任意一个。

    (4):param param 是可选的。它指定用哪个请求参数(指的是从request中转过来的参数)作为Bean属性的值,param的名字必须和参数名一致。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

    转载:https://www.cnblogs.com/wkhuahuo/p/4270781.html

    第一种形式:

    <jps:setProperty name = "JavaBean实例名"  property = "*"/>

    该形式是设置Bean 属性的快捷方式.在Bean 中属性的名字,类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。

    例如:a.jsp:

    b.jsp:

    property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。  

    第二种形式:

    <jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" />

    使用request对象中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean 的属性名,而且Bean 属性和 request参数的名字应相同。也就是说,如果在Bean 中有setUserName(String userName)方法,那 么,propertyName的值就是"userName".这种形式灵活性较强,可以有选择的对Bean中的属性赋值,

    a.jsp和上面一样,b.jsp如下

    第三种形式:

    <jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/>

    value 用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、 char、Character。例如,boolean和Boolean类型的属性值(比如“true”)通过Boolean.valueOf转换,int 和Integer类型的属性值(比如“42”)通过Integer.valueOf转换。 

    第四种形式:

    <jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名"/>

      param指定用哪个请求参数作为Bean属性的值。Bean 属性和request参数的名字可以不同。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。 

    例如: a.jsp

    b.jsp

    实验:假如上面的Person改为

    那么<jsp:setProperty>中property=""必须改为a或b,name和age会报错【Cannot find any information on property 'name' in a bean of type 'com.app.model.Person'】,可能复制是根据方法而不是属性吧

     

    jsp:getProperty:将 JavaBean组件的值插入到 output中(取指定Bean属性的值,转换成字符串,然后输出)

     <jsp:useBean id="myName" ... /> ...

    <jsp:getProperty name="myName" property="someProperty" .../>

    getProperty相关联的属性: 

    (1):name 要检索的Bean属性名称。Bean必须已定义。

    (2):property 表示要提取Bean属性的值

    jsp:forward:从一个JSP文件向另一个文件传递一个包含用户请求的request对象,a.jsp请求b.jsp,b.jsp通过jsp:forwardc.jsp,那么c.jsp可以或去a.jsp传给b.jsp的参数,且地址栏上面是b.jsp,

    jsp:plugin:用于在生成的HTML页面中包含Applet和JavaBean对象(根据浏览器类型为Java插件生成OBJECT或EMBED标记)

    jsp:element:动态创建一个XML元素

    jsp:attribute:定义动态创建的XML元素的属性

    jsp:body:定义动态创建的XML元素的主体

    jsp:text:用于封装模板数据(在JSP页面和文档中使用写入文本的模板)

    8.JSP隐含对象

    JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表:

    request:HttpServletRequest类的实例

    response:HttpServletResponse类的实例

    out:PrintWriter类的实例,用于把结果输出至网页上

    session:HttpSession类的实例

    application:ServletContext类的实例,与应用上下文有关

    config:ServletConfig类的实例

    pageContext:PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问。pageContext.getAttributeNamesInScope(1) ;获取scope中的属性,1.代表page,2代表request,3代表session,4道标application

    page:类似于Java类中的this关键字

    Exception:Exception类的对象,代表发生错误的JSP页面中对应的异常对象

  • 相关阅读:
    再谈TextField
    IOS-TextField知多少
    leftBarButtonItems
    LeftBarButtonItems,定制导航栏返回按钮
    Apple Mach-O Linker (id) Error "_OBJC_CLASS...错误解决办法 Apple Mach-O Linker (id) Error "_OBJC_CLASS...错误解决办法
    Unrecognized Selector Sent to Instance问题之诱敌深入关门打狗解决办法
    UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
    Present ViewController,模态详解
    UILABEL AUTOLAYOUT自动换行 版本区别
    iOS自动布局解决警告Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
  • 原文地址:https://www.cnblogs.com/yuby/p/10789088.html
Copyright © 2011-2022 走看看