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页面中对应的异常对象

  • 相关阅读:
    精通正则表达式(JavaScript)
    Go知识点记录
    多线程揭秘
    Python test
    ELinq+T4模版引擎制作多文件实体代码生成器
    浏览器内核
    MongoDb的增删改查
    LINQ执行表达式
    ASP.NET MVC3 读书笔记四(数据注解和验证)
    C#默认以管理员身份运行程序
  • 原文地址:https://www.cnblogs.com/yuby/p/10789088.html
Copyright © 2011-2022 走看看