简单分析jsp页面的成份

一个jsp页面由五种元素组合而成:普通的html标记符、jsp标记(指令标记、动作标记)、成员变量和方法、Java程序片和Java表达式;简单来看,一个传统的html页面加入java程序片和jsp标签就组成了一个jsp页面;

当jsp页面被管理者第一次运行时(事实是第一次必须由管理者来启动运行),tomcat将启动一个线程将jsp文件转译成Java文件,并再将该Java文件编译生成字节码文件保存在内存中(如果jsp页面保存在Root中,那么生成的Java文件和字节码文件可以在目录work\Catalina\localhost\_org\apache\jsp中找到),然后执行该字节码响应用户的请求;该线程对于字节码的执行每一种成份各有不同,对于html的标记符号则不作处理,直接将需要显示的内容发送给用户,对于jsp标记、Java程序片、成员变量和方法将交给tomcat服务器执行,并将显示的结果发送给用户;对于Java表达式该线程则交给tomcat服务器来计算并将结果转化为字符串发送给客户的浏览器负责显示;

当线程的任务完成后则相应的线程进入死亡状态,但生成的字节码文件常驻内存,当用户再次请求时,tomcat服务器则再次启动一个线程执行字节码文件响应客户的请求;当有多个用户同时请求时,tomcat将为每个用户启动一个线程用来响应每一个用户的请求,并把cpu的使用权快速的在各个线程之间来回的切换,这样就好像每个用户独自占用CPU一样;

介绍完jsp的运行原理,下面将来细说每一种成份的作用以及格式;

一、jsp页面的成员变量和方法

jsp的成员变量和方法在标签“<%!”和“%>”之间定义,其中在标签内定义的变量在整个jsp页面内有效,被转译成Java类的成员变量,且被所有用户共享,利用这一特性可以实现一个简单的计数器;标签中定义的代码可以在Java程序片中调用;变量和方法的定义可以满足Java格式的任何形式,程序如下:

二、jsp页面中的java程序片

Java程序片在标签“<%”和“%>”中使用,一个jsp页面可以有多个Java程序片,且在Java程序片内可以声明变量,但该变量只在当前jsp页面后继的程序片以及表达式内有效,不属于共享变量只能被单个用户操作,因为当一个用户发送请求时服务器会让相应线程执行Java程序片为该变量分配内存空间,在该线程的当前jsp页面内使用;当另一个用户发送请求时,相应线程会再次分配空间供另一个线程所在的jsp页面使用;

Java程序片有三个功能为:操作jsp页面的成员变量、调用jsp页面的方法和声明操作自身的局部变量;另外当不同的用户通过方法操作成员变量时,成员变量的变化可能会影响到其他的用户,当其他用户不希望自己使用成员变量其他人对其有所影响时可以把操作成员变量的方法用synchronized关键字修饰,被该关键字修饰的方法在一个用户调用时,其他用户若想使用该方法必须等到使用该方法的用户执行完该方法为止;

另外可以根据需要将一个程序片分为几个小的程序片,如下图:

三、jsp页面中的Java表达式

Java表达式由服务器负责计算其值,并把结果发送给用户;Java表达式在标签“<%=”和“%>”之间定义;

在此处顺便说一下jsp的注释格式,jsp页面的注释有两种格式一种是html注释,格式<!--注释内容-->,对于该格式的注释,jsp引擎将发送给用户,用户可以在查看jsp源文件时看到此注释内容;另一种格式为<%--注释内容--%>,对于该格式的注释,jsp引擎将忽视,即用户在查看jsp源文件时看不到此内容。

四、html标签

html标签数据jsp页面的静态部分,即服务器不作任何处理直接发送给用户,用户的浏览器负责执行,html标签有100多种,此处只介绍比较常用的几种;

1、表单标记

当用户需要向服务器提交表单时使用该标签,格式如下:

form提交表单格式

其中<form>是表单格式,get和post为提交方式,通过get方式提交的信息会在提交的过程中出现杂地址栏里,而通过post方式提交的信息不会出现在地址栏里;数据提交手段可以通过文本框标签、列表标签、文本区标签等符号标签;

2、<input>标记

该标记可以作为form表单的数据提交手段部分用来指定form表单的提交按钮,还可以为type指定数据输入方式,name用来指定该标签对象的名字,格式如下:

input标签格式

输入对象的类型可以由text、checkbox、submit、hidden等组成;

(1)、text格式如下:

type="text"

其中name属性的值为该对象的名字,value值为该对象的初始值、algin为该对象在浏览器窗体中的的对齐方式,maxlength的值为该对象可输入的最大字符长度;

(2)、radio格式如下:

type="radio"

其中name、value、algin属性和上面的意义相同,checked属性值若为非空则表示该按钮为默认选中状态;另外,若有一组radio的name名字相同则同时只有一个能够被选中,且能通过name属性获取选中的radio的value值;

(3)、checkbox格式如下:

type="checkbox"

当多个该组件name属性相同时可以多选,其他的内容和radio相同;

(4)、password格式如下:

type=“password”

该组件通常作为密码输入框,因为当用户在输入框里无论输入什么值都以*回显,起到保密作用;其属性和text作用相同;

(5)、hidden格式如下:

type="didden"

该组件不会显示在界面上,表单将直接把该组家的value属性值交给服务器;

(6)、submit的格式如下:

type="submit"

每个表单必须有一个该组件,用来把表单要发送给服务器的值按照表单method属性值方式发送出去;另外该组件还可设置一个value值,可通过name属性获取到;

(7)、reset的格式如下:

type=“reset”

该组件用来将form表单的内容清空以便重新输入数据;

3、<Select>/<Option>标记

此标记可以由两种不同的状态下拉列表和滚动列表;下面但是两种状态的格式相同,在此标记中有个size属性,该属性表示能够显示的选项个数,当此属性设置时将变为滚动列表状态,不设置的话将为下拉列表状态;如下所示

下拉列表:

下拉列表


界面

点击三角框出现下面的界面:

点击后的下拉列表

滚动列表:

滚动列表


滚动列表

4、<TextArea>标记

该标记是一个能够提供输入或者显示多行文本的文本区,格式如下:

text

5、表格标记<table>

该标记可以定义一个表格,格式如下:

table标记

该标记中<tr></tr>表示一行,<th></th>和<td></td>表示行中的列,<th></th>为加粗表示可做表的表头,<td></td>为不加粗显示;

6、<img>标记

该标记可以显示一副图像格式如下:

img标记

7、<embed>标记

该标记可以把一段视频或者音乐在浏览器里播放,当浏览器执行到这的时候会使用默认的播放器播放文件,格式如下:

embed标记

该标记有autostart属性可取值为true或者false,默认为false,当取值为true时则文件传输完就直接播放;loop属性可指定文件的重复播放次数;width和height可指定播放器的高和宽;

五、jsp标记

jsp标记时jsp页面的重要组成部分,包括指令标记、动作标记和自定义标记;下面分别来说明,另外自定义标记只说明tag标记;

1、指令标记page

格式如下:

page指令

该指令为jsp页面属性指定属性值,可以用一个page指令为多个属性赋值,也可用多个page指令为每个页面属性赋值,此标记可以写在jsp页面的任意位置,但通常写在最前面。页面属性以及属性值为下面的罗列情况;

(1)、属性contentType

此属性的值用来调用客户端相应的解析器来执行本jsp页面的信息,此属性在一个jsp页面内只能赋一次值;如contentType="text/html;charset=gb2312"则提示用户启用html解析器执行该页面信息;若contentType="application/msword"则提示用户启用word应用程序来执行传送来的信息;默认值为text/html;charset=ISO-8859-1格式如下:

<%@page contentType="text/html;charset=gb2312">

(2)、属性import

该属性是为jsp页面引入java核心包中的类,可以多次赋值;可以导入一个包中的所有类或者一个类,其默认属性有java.lang、javax.servlet、javax.servlet.jsp、javax.servelet.http.*;

例如:<%page import="Java。awt.*">

(3)、属性language

该值定义jsp脚本语言,目前取值只能为java;

(4)、属性session

设置是否需要服务内置的session对象,默认为true;

(5)、属性buffer

该值设置服务器向浏览器输入流的缓冲区,默认值为8kb,当值设为none时表示缓冲区不可用;

(6)、属性autoflash

该值设置当缓冲区满时是否自动刷新,取值可为true或者false;

(7)、属性isthreadsafe

值为true时表明服务器可快速在各线程之间来回切换,false时表明服务器只有把一个线程执行完毕后才把cpu的使用权交给其他线程;

2、指令标记include

该指令为当前jsp页面静态嵌入一个文件,静态嵌入是指嵌入的文件在编译成字节码文件的时候就已经把嵌入的文件和当前jsp页面合并成一个jsp页面,故执行速度较快;所以嵌入的文件不可和当前jsp页面有语法冲突;格式如下:

<%@page include="文件所在目录或者相对路径">

注意要是嵌入的文件发生变化,则服务器将会重新编译;

3、动作标记include

该标记也是嵌入一个文件,但是和include指令标记不同的是,该标记嵌入的文件在jsp编译时不加载进来而是告诉服务器在字节码文件运行时再执行嵌入的文件,所以该方式较灵活,但执行速度较慢;

此标记有两种格式分别如下:

不带子标记的格式为:<jsp:include page="文件的url"/>

带子标记的格式为:<jsp:include page="文件的url">子标记</jsp:include>

注意:当没有子标记的时候必须使用第一种方式;

4、动作标记forward

该标记的特点为当执行到该标记时,停止当前jsp页面的执行,转向执行指定的页面;该页面有两种格式:

不带子标记格式为:<jsp:forward page="要转向的页面">

带子标记的格式为:<jsp:forward page="要转向的页面">子标记</jsp:forward>

注意:当没有子标记的时候必须使用第一种方式;

5、动作标记param

该标记通常作为动作include标记和forward标记的子标记使用,用来向指定的页面传值,传入的值可以通过request.getparameter("name");来获得;

格式如下<jsp:param name="属性名" value="属性值"/>


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 21,776评论 1 92
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,360评论 6 343
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 感赏张愿意回复我 感赏ed主动联系我,虽然还是很冷漠,但是他还是会回复我的 感赏有钱宝宝进账 感赏今天和闺蜜一起参...
    童欣怡_中阅读 95评论 0 0
  • 蚊子是害虫,因为它叮人吸血,而且还传播疾病,所以被人类称为害虫。 查到一段资料是这样说的:“雄蚊只吸草汁,花蜜过活...
    云是雨的衣阅读 436评论 0 0