分享
 
 
 

Base-Jsp-1-基础

王朝java/jsp·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

v 基本概念

Ø Jsp是一种用来开发含有动态内容网页的技术。

动态内容:可以根据任意变量改变网页自身的内容。

Ø Jsp页面包含标准的标记语言元素,入HTML标签,也包含特殊的Jsp元素。这些元素使

得服务器可以把动态内容插入到网页中。

当用户请求一个Jsp页面时,服务器先执行Jsp元素,并把结果同网页的静态部分向结

合,然后把动态合成的页面送回到浏览器。

浏览器 服务器

<html> <html>

<body> <body>

动态内容 Jsp元素

</body> </body>

</html> </html>

Ø Jsp允许将特殊的元素嵌入HTML页面中,这些元素看起来和HTML元素类似,但它们实际上是组件化的Java程序。

ØJsp页面在有服务器进行处理前通常会得到编译。一次编译后,随后的请求会直接调用编译后的结果代码。

Ø 对于web应用程序中的页面,如果路径是以斜线开始的,容器会将其解释为环境相关的路径(从应用程序安装目录根部开始的文件路径)

Øweb application的目的是利用你当前拥有的任何一种设备(pc、pda),取得所需要的所有信息和服务,要做到这一点,就必须详细的规定客户端和服务器直接的通信协议,这正是HTTP的目的。

HTTP所定义的通信模型是所有web application设计的基础。

ØHTTP 请求/应答模型:一个客户端为了得到服务器上的一种资源而向服务器发出一个请求,服务器则返回一个与所请求相对应的应答。

i) HTTP是一种无状态的协议,即服务器发送应答后,不会保留客户端的任何信息,因此已经无法分辨来自同一个客户端的多个请求肯相同(session、cookie的出现)。

ii) Web application无法提供即时反馈,客户端和服务器的每一次交换都需要一次请求/应答。(JavaScript的出现)

iii) HTTP中不包含任何服务器端调用客户端特有函数的方法,也没有信息告诉服务器一个请求是如何产生的。

Ø 用户单击网页上的一个链接,提交一个表单、或在浏览器的地址栏中输入一个Web地址,

用户就相服务器发送了一个请求。

为了知道和哪个服务器进行通信,需要用HTTP URL来指定。如:

http://www.google.com:8080/index.html

表明请求需要HTTP协议,www.google.com是服务器名称、8080是web服务器等待从

每个特定的TCP/IP端口进入的请求(标准端口80不需要在URL中指定),index.html

确定了客户端所请求的资源。

Ø URI不必对应服务器上的某个静态文件,它可以标识一个可执行程序,数据库中的一条记录等,事实上没有办法知道/index.html直观URI所对应的是一个文件还是什么东西,它只是一个名称,这就是为什么使用通称“资源”的原因。经过配置,web服务器可以把名称和资源对应起来。

Ø 对应浏览器而言,请求的处理方式无关紧要,它所关心的只是要得到一个应答。

Ø 请求参数可以用两种方式来发送

i) 以请求字符串的形式发送(get,查询字符串以’?’号开始,’&’号分隔名称/值对组成,这些名称/值对必须经过URL编码,编码方式为16进制的ASCII码,即非字母是数字的特殊符合都要经过编码,以免和URI中的其他组成部分混淆)。

对于get方法,浏览器可以硬编码URL作为书签保存,应答将被保存在浏览器客户端,这样再次发送一次geg请求的话,不会造成任何的破坏。而post方法则不容易做到这点。

ii) 作为请求消息主体的一部分发送(post)

● Jsp页面分析

i) 页面中任何不是JSP元素的东西都叫做模板文本,模板文本可以是任何文本:HTML、XML等,模板文本一般直接传送到浏览器。

ii) 在处理一个JSP页面请求时,模板文本将和JSP元素产生的动态内容组合起来,组合的结果将作为应答发送个浏览器。

iii) 服务器执行JSP时首先转换为servlet,所有的模板文本被转换为println()语句,所有的JSP元素都被实现为相应的Java代码,然后容器再编译servlet.

Ø JSP有3中类型的元素

i) 指令元素:指定关于页面本身的一些信息,这些信息在各个页面请求间保持不变。如<%@ page…%><%@ include…%> <%@ taglib…%>,指令元素只在翻译阶段执行。

ii) 行为元素:在浏览器请求JSP页面时,根据它所需要的信息来执行某些动作。包括标准行为元素(<jsp:usebean>),自定义行为元素和JSP标准标记库(JSTL),

行为元素是在运行时执行的动态行为。所有标准行为元素都是有规范定义的,因此不需要用taglib指令声明标准行为。

当web应用程序启动时,容器会自动扫描整个WEB-INF目录结构,查找带有.tld扩展名的文件(这是TLD文件必须的扩展名),以及在它们的META-INF目录中含有扩展名.tld的文件。换句话说,就是容器会查找所有TLD文件。tag引用的URL不必是现有的网页,它只是一个标示符。容器并不会试图通过Internet来访问它。

<%taglib prefix=”ora” uri=”orataglib”%> <taglib>

… … <uri>orataglib</uri>

<ora:motd category=”thoughts”/> <tag>

<name>motd</name>

<tag-class>

Com.ora.tags.MotdTag

</tag-class>

</taglib>

对于行为指令,容器对待属性值与对待bean属性值一样,都会同样做类型转换。

iii) 脚本元素:添加到页面的小段代码(一般为Java代码),现已不提倡使用。

Ø web application中MVC分为:商业逻辑(模型)、外观呈现(视图)和请求处理(控制)。

ØJSP元素和属性名是区分大小写的。

Ø 用户在表单文本框输入的值、单选按钮、复选框选择后,这些值会作为请求中的HTTP

请求参数发送出去。

Ø MIME类型,HTML->text/html; XML->text/xml;PDA: ->Text/vnd.wap.wml。

Content-type作为应答首部发送给浏览器,因此浏览器知道如何解释和显示该页面。

v JavaBeans

Ø bean:遵循某些编码约定的Java类,作为组件被使用。

i) 应该始终为bean类使用包名称,从而可以容易地以可移植的方式使用JSP页面中的bean。

ii) Bean类必须使用无参数的构造函数,这样允许工具以只知道类名的方式创建bean.

iii) Bean的属性是通过getter和setter方法访问的。

iv) Bean类应该实现java.io.Serializable或java.io.Externalizable,以允许工具保存和恢复bean的状态。

v) Bean属性名区分大小写,而且总是以小写字母开头。

vi) Bean的属性可以是任何Java类型,容器可以在文本字符串和其他Java类型之间自动转换。

当使用<jsp:setProperty>行为时,容器会将文本值自动转换为具体的Java类型。

当使用<jsp:getProerty>或<c:out>时,容器会自动将Java类型转换为String类型。

Ø 例:

<jsp:useBean id=”cartoon”

Class=”com.ora.jsp.CartoonBean”/>

<img src=”images/<jsp:getProperty name=”cartoon” property=”fileName”/>”>

Ø <jsp:setProperty name=”cartoon” property=”fileName” value=”aaa.gif”/>

该行为可以根据请求参数值来设置bean的属性。

<jsp:setProperty name=”userInfo” property=”*”/>

它将把所有bean的属性都自动设为对于参数的值,

Ø<jsp:setProperty name=”userInfo” property=”username” param=”someOtherParam”/>

这里可以利用param属性将bean的值设为任何请求参数的值。

Ø 以上<img>不是合法的HTML语法,但却是合法的JSP语法。不被认为是JSP元素的任

何东西都被看作是模板文本,模板不会取解释模板文本的含义,因此它不会将其视为无

效的HTML。但这并不是说可以使用行为元素设置另一个JSP行为元素属性的值,只

有容器不把HTML元素看作是一种元素时,才使用它来设置HTML元素的属性。

Ø 当JSP页面得到处理时,会用bean的属性值代替行为元素,因此发送给浏览器的结果是:

<img src=”images/dilbert237.gif”/>

Ø <jsp:useBean>行为会创建由class属性指定的bean类的一个实例,并将其与id属性指定的名称关联起来,该名称在网页中必须时唯一的。

Ø <jsp:getProperty name=”cartoon” property=”fileName”/>

该行为将取得bean的当前属性值,并把该值插入大应答的主体中。

v JSTL

库 URI 前缀

Core http://java.sun.com/jstl/core c

XML processing http://java.sun.com/jstl/xml x

I18N formation http://java.sun.com/jstl/fmt fmt

Database access http://java.sun.com/jstl/sql sql

Ø JSTL定义了简单的表达式语言(EL),用于将行为属性设为在运行时计算出来的动态值。

EL表达式以“${”符开始,以”}”符结尾

Ø 表达式语言操作符:

操作符 执行的操作

. 访问bean的属性或Map条目

[] 访问数组或List元素

() 将子表达式分组以改变操作优先级

+-*/ 数学运算

Empty 对空的变量值(null)或空的String、数组、map、list进行测试

EL语言的empty操作符避免了被迫出来null值和空字符串(“”)之间的差异。Empty

还可以为空的数组、java.urit.List或java.util.Map求值,也就是说它可以用来测试多数常见类型的空的集合。

Ø 隐含的EL变量

变量名 描述

pageScope 所有页面作用域变量的集合(java.util.Map)

requestScope 所有请求作用域变量的集合(java.util.Map)

SessionScope 所有会话作用域变量的集合(java.util.Map)

applicationScope 所有应用程序作用域变量的集合(java.util.Map)

param 所有请求参数的集合,每个参数是单个的String(java.util.Map)

paramvalues

header

headerValues

cookie

initParam 所有应用程序初始化请求参数的集合,每个参数是单个的String

(java.util.Map)

pageContext javax.servlet.jsp.PageContext类的一个实例,提供了对各种请求数据的访

问。

例:<c:out value=”${param.userName}”/>

Ø<c:out>: 把指定为value属性的表达式的结果添加到应答中。

Ø JSTL表达式语言(EL)也支持对bean属性的访问。

<jsp:useBean id=”cartoon”

Class=”com.ora.jsp.CartoonBean”/>

<img src=”images/<c:out value=${cartoon.fileName}>”>

Ø <c:out>

属性名:escapeXml 如果URL编码则true,如果不URL编码则false,默认为true,(可选)

Default:可选,如果值属性为空时使用(可选)

<c:out>在输出时会自动地作URL编码转换

Ø <c:forEach>

属性名: itmes:反复迭代的集合,如果为Null,则不会执行迭代,如果没有指定,则必须指

定开始和结束属性。,(可选)

Var: 迭代时当前元素值,(可选)

varStatus:保存LoopTagStatus对象变量(可选)

begin:第一个索引,该索引从0开始(可选)

end: 最后一个索引,该索引从0开始(可选)

step:每次迭代的索引增量(可选)

例:<c:forEach begin=”1” end=”6”>

… …

</c:forEach>

<c:if>

属性名 描述

Test 判断表达式(必须)

Var 保存boolean结果的变量名称(可选)

Scope 变量作用域,默认为page作用域(可选)

Ø <c:when>

属性名 描述

Test 判断表达式(必须)

<c:choose>会从一组相关的互斥选项中选择一个

例:

<c:choose>

<c:when test=”${param.gender == ‘f’}”>

… …

</c:wher>

<c:otherwise>

… …

</c:otherwise>

</c:choose>

Ø <c:set>

属性名 描述

Value 要设置的值,(必须)

Var 保存值的变量的名称(可选),如果没有指定,就必须使用target和property属性。

Scope var指定的变量的作用域,默认为page作用域

Target 带有property指定的属性的Map或JavaBeans对象(可选)

Property 设置target指定的对象的属性名(可选)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有