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的类型和type实现的效果一样,且不能并存。

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

jsp学习(2)jsp标签的更多相关文章

  1. 重温JSP学习笔记--JSTL标签库

    以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...

  2. jsp学习:jsp学习阶段性总结2019.9.21

    Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...

  3. jsp学习---使用jsp和JavaBean实现超简单网页计算器

    一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...

  4. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

  5. [jsp学习笔记]jstl标签的使用

    jstl常用在html嵌套 <body> <% session.setAttribute("q", "yushi"); request.set ...

  6. [jsp学习笔记] jsp过滤器

  7. [jsp学习笔记] jsp基础知识 数据初始化、同步

  8. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  9. JSP学习(2)

    JSP学习(2) JSP简介 Java Server Page,其根本是一个简单Servlet设计. 常用的动态网站开发技术 JSP:安全性高,适合开发大型的,企业级或分布式的Web应用程序. Asp ...

  10. JSP 学习笔记1

    JSP 学习笔记   JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...

随机推荐

  1. C#语法——await与async的正确打开方式

    C#5.0推出了新语法,await与async,但相信大家还是很少使用它们.关于await与async有很多文章讲解,但有没有这样一种感觉,你看完后,总感觉这东西很不错,但用的时候,总是想不起来,或者 ...

  2. SLAM+语音机器人DIY系列:(三)感知与大脑——3.轮式里程计与运动控制

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  3. centos通过yum安装mysql

    前言 前天按照Oracle上的文档装了一遍mysql,选了最新8.0的版本,后来出现一些问题,网上搜答案,出来的基本还是5.x版本的解决方案,并不适用8.0版本.然后我就去看了一下公司的正式环境买的阿 ...

  4. Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)

    前言 紧接着上一篇,这一篇我们讲一下原生怎么给 Flutter 发信号,即原生-> Flutter 还是通过 Flutter 官网的 Example 来讲解. 案例 接着上一次,这一次我们让原生 ...

  5. MyBatis缓存策略

    MyBatis 提供了一级缓存和二级缓存策略,一级缓存是作用在SqlSession级别上的,而二级缓存则是作用在Mapper级别上的( 即作用在 namespace上),MyBatis 默认是开启的一 ...

  6. 编程心法 之什么是MVP What is MVP development?

    Minimal Value product(feather), 比如说,如果是一个新的Photoshop,那么增加图片亮度就是一个MVP. 想要看到更多玮哥的学习笔记.考试复习资料.面试准备资料?想要 ...

  7. 输入框中的空"",0,null的判断

    改了一个小项目,里面有一个小的问题他们是这样提需求的.两个输入框,第一个输入框里面,输入的内容会对第二个输入框中的内容产生影响.具体是这样的:如果第一个输入框中的值不是“0”,那么第二个输入框就不能填 ...

  8. vue中的tab栏切换内容变换

    <!DOCTYPE html> <html lang="cn-zh"> <head> <meta charset="UTF-8& ...

  9. AJAX的创建

    20:29:50 创建的步骤: 1.创建异步请求的核心对象 2.设置请求方式和地址 3.设置结果产生的回调函数 4.进行结果的逻辑处理 5.获取结果并处理 6.发送请求 <!DOCTYPE ht ...

  10. 《JavaScript高级程序设计》笔记:函数表达式(七)

    递归 function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } ...