JSP 手记-阿里云开发者社区

开发者社区> 嗯哼9925> 正文

JSP 手记

简介:
+关注继续查看

概念

JSP 是Java Server Page 的缩写,是Servlet 的简化。它是由Sun 公司提出的,并由许多公司参与制定的一种动态网页标准。

其主要特点是在HTML 页面中加入Java 代码片段,或者使用各种JSP 标签,包括使用用户标签,构成JSP 网页。

【早期使用JSP 页面的用户非常广泛,一个Web 应用可以全部由JSP 页面组成,只辅以少量的JavaBean 即可。自J2EE 标准出现以后,人们逐渐认识到使用JSP充当过多的角色是不合适的Q 因此, JSP 慢慢发展成学一的表现层技术,不再承担业务逻辑组件及持久层组件的责任。】

JSP 是Servlet 的扩展,在没有JSP 之前,就已经出现了Servlet 技术。Servlet 是利用输出流动态生成HTML 页面,包括每一个HTML 标签和每个在HTML 页面中出现的内容。

 

注释

JSP 注释用于表明在程序开发过程中的开发提示,它不会输出到客户端。

JSP 注释的格式如下:

〈%--在注释内容--%>

与JSP 注释形成对比的是HTML 注释, HTML 注释的格式是

<!--注释内容-->

JSP 页面会编译成一个Servlet 类,每个Servlet 在容器中只有一个实例:而在JSP 中声明的变量是类的成员变量,成员变量只在创建实例时初始化,该变量的值将一直保存,直到实例销毁。值得注意的是, infoO的值也可正常输出。因为JSP 声明的方法其实是在JSP 编译生成的Servlet 类的方法一Java 里的方法是不能独立存在的,即使在JSP 页面中也不行。

 

表达式

JSP 提供了一种输出表达式值的简单方法,输出表达式值的格式如下:

〈%=表达式%〉

 

脚本

JSP 脚本的应用非常广泛,可通过Java 代码镶嵌在HTML 代码中,即使用JSP 脚本。

因此,所有能在Java 程序中执行的代码,都可以通过JSP 脚本执行。

看下面的代码:

<! -- Java 脚本,这些脚本会对HTML 的标签产生作用一〉

〈%

for(int i = 0 ; i < 10 ; i++) {

%〉

<td><%=i%></td>

<%}%>

上面的JSP 页面,其简单的循环将导致<tr/>标签循环10 次,即生成一个10 行

的表格,并在表格中输出表达式值

 

三个编译指令

JSP 的编译指令是通知JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。

常见的编译指令有三个。

page: 该指令是针对当前页面的指令。

include: 用于指定如何包含另一个页面。

tablib: 用于定义和访问自定义标签。

 

编译指令的格式如下:

<%@ 编译指令名 属性名="属性值"…%>

 

page 指令

page 指令,通常位于JSP 页面的顶端,对同一个页面可以有多个page 指令。

page指令的语法格式如下:

〈%@ page

[language="Java"]

[extends="package.class"]

[import= "package. class | package. *},…"]

[session=true | false"]

[buffer="none | 8kb | size kb"]

[autoFlush="true | false"]

[isThreadSafe="true | false"]

[info="text"]

[errorPage="relativeURL"]

[contentType=mimeType[ ;charset=characterSet]" | "text/html;charSet= ISO-8859-1"]

[isErrorPage=" true | false"]

%〉

下面依次介绍page 的各个属性。

language: 声明当前JSP 页面使用的脚本语言的种类,因为页面是JSP 页面,该属性的值通常都是java 。

extends: 确定JSP 程序编译时所产生的Java 类,需要继承的父类,或者需要实现的接口的全限定类名。

import: 用来导入包,下面几个包是默认自动导入的,不需要显式导入。默认导入的包有: java .lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet. http

session: 设定这个JSP 页面是否需要HTIP session 。

buffer: 指定输出缓冲区的大小。输出缓冲区的JSP 内部对象: out 用于缓存JSP页面对客户浏览器的输出,默认值为8k,可以设置为none ,也可以设置为其他的值,单位为kb 。

autoFlush: 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出:如果设置为false ,会在buffer 溢出时产生一个异常。

info: 设置该JSP 程序的信息,也可以看做其说明,可以通过Servlet. getServletInfo

方法获取该值。如果在JSP 页面中,可直接调用getServletInfo方法获取该值,因为JSP 页面的实质就是Servlet 。

errorPage: 指定错误处理页面。如果本程序产生了异常或者错误,而该JSP 页面没有对应的处理代码,则会自动调用该指令所指定的JSP 页面。使用JSP 页面时,可以不处理异常,即使是checked 异常。

isErroePage: 设置本JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用errorPage 属性。

contentType: 用于设定生成网页的文件格式和编码方式,即MIME 类型和页面宇符集类型,默认的MIME 类型是textlhtml; 默认的字符集为ISO-8859-1。

 

include 指令

使用include 指令,可以将一个外部文件嵌入到当前JSP 文件中,同时解析这个页面

中的JSP 语句(如果有的话)。这是个静态的include 语旬,不会检查所包含JSP 页面的变化。

include 既可以包含静态的文本,也可以包含动态的JSP 页面。静态的编译指令

include ,是将被包含的页面加入进来,生成一个完整的页面。

include 编译指令的语法:

〈%@ include file="relativeURLSpec" %〉

如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include 语句。

JSP 的7 个动作指令

动作指令与编译指令不间,编译指令是通知Servlet 引擎的处理消息,而动作指令只

是运行时的脚本动作。编译指令在将JSP 编译成Servlet 时起作用:处理指令通常可替换

成Java 脚本,是JSP 脚本的标准化写法。

 

JSP 动作指令主要有如下7 个。

jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。

jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。

jsp:include: 用于动态引入一个JSP 页面。

jsp:p1ugin: 用于下载JavaBean 或Applet 到客户端执行。

jsp:useBean: 使用JavaBean 。

jsp:setProperty: 修改JavaBean 实例的属性值。

jsp:getProperty: 获取JavaBean 实例的属性值。

 

【forward 指令】

forward 指令用于将页面响应控制转发给另外的页面。既可以转发给静态的HTML

页面,也可以转发到动态的JSP 页面,或者转发到容器中的Servlet

JSP 的forward 指令的格式如下:

对于JSP 1. 0 ,使用如下语法:

<jsp: forward page=" {relativeURL | <%=expression%>}"/>

对于JSP 1. 1 以上,可使用如下语法:

<jsp:forward page=" { relativeURL | <%=expression %>}">

{<jsp:param.../>}

</jsp:forward>

<jsp:forward page="forward-result.jsp">

<jsp:param name="age" value="29"/>

</jsp:forward>

 

【include 指令】

include 指令是一个动态include 指令,也用于导入某个页面,它的导入会每次检查

被导入页面的改变。下面是include 指令的使用格式:

<jsp: include page=" {relativeURL I <%=expression%>}" flush= “true” />

或者

<jsp:include page="{relativeURL I <%=expression%>}" flush="true 与

<jsp:param name="parameterName" value="patameterValue"l>

</jsp:include>

flush 属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中:如果指定为false,则包含在原文件中。对于JSP 1.1旧版本,只能设置为false。

对于第二种格式,可用于在导入页面中加入参数值。

 

【useBean, setProperty, getProperty 指令】

这三个都是与JavaBean 相关的指令,其中第一个指令用于在JSP 页面中初始化一个Java 实例; setProperty 指令用于修改JavaBean 实例的属性; getProperty 用于获取JavaBean实例的属性。

useBean 的语法格式如下:

<jsp:useBean id="name" class="classname" scope="page | request | session | application" />

id 属性是JavaBean 的实例名, class 属性确定JavaBean 的实现类。

其中scope 属性用于确定JavaBean 实例的生存范围,该范围有以下四个值。

page: 该JavaBean 实例仅在该页面有效。

request: 该JavaBean 实例在本次请求有效。

session: 该JavaBean 实例在本次session 内有效。

application: 该JavaBean 实例在本应用内一直有效。

setProperty 的语法格式如下:

<jsp:setProperty name="BeanName" proterty="propertyName" value="value"/>

其中name 属性确定需要设定JavaBean 的实例名; property 属性确定需要设置的属性名; value 属性则确定需要设置的属性值。

getProperty 的语法格式如下:

<jsp:setProperty name="BeanName" proterty="propertyName" />

其中name'属性确定需要输出的JavaBean 的实例名; property 属性确定需要输出的属性名。

 

【plugin 指令】

plugin 指令主要用于下载服务器端的JavaB ean 或Applet 到客户端执行。由于程序在

客户端执行,因此客户端必须安装虚拟机。

plugin 的语法格式如下:

<jsp:plugin type=bean | applet"

code="classFileName"

codebase="classFileDiretoryName"

[name=" instanceName"]

[archive="URLtoArchive"]

algin= "bottom 1 top I middle 1 left 1 right"]

[heigh="displayPixels"]

[width="displayPixels"]

[hspace="leftRightPixels"]

[vspace="topBottomPiexels"]

[jreversion=JREVersionNumber11.2"]

[nspluginurl="URLToPlugin"]

[iepluginurl="URLToPlugin"]>

[<jsp:parames>

[jsp:param name="parameterName" value="parameterValue"I>]

</jsp:params>]

[<jsp:fallback>text message for user that can no see the plugin

</jsp:fallback> ]

</jsp:plugin>

关于这些属性的说明如下。

type: 指定被执行的Java 程序的类型。

code: 指定被执行的文件名,该属性值必须以" .class" 扩展名结尾。

codebase: 指定被执行文件所在的目录。

name: 给该程序起一个名字用来标识该程序。

archive: 指向一些要预先载入的将要使用到的类的路径。

hspace,vspace: 显示左右,上下的留白。

jreversion: 能正确运行该程序必需的JRE 版本,默认值是1.2

nsplugin,ieplugin:Netscape Navigator, Internet Exploer下载运行所需JRE 的地址。

<jsp:fallback>指令:当不能正确显示该Applet 时,代替显示的提示信息。

 

【pararn 指令】

可以与以下三个指令结合使用:

jsp:include

jsp:forward

jsp:plugin

当与include 指令结合使用时, pararn 指令用于将参数值传入被导入的页面:当与

forward 指令结合使用时, pararn 指令用于将参数值传入被转向的页面:当与plugin 指令

结合使用时,则用于将参数传入页面中的JavaBean 实例或Applet 实例。

pararn 指令的语法格式如下:

<jsp:param name="pararnName" value="paramValue"/>

 

9 个内置对象

application: javax.servlet. ServletContext 的实例,该实例代表JSP 所属的Web 应用

本身,可用于JSP 页面,或者Servlet 之间交换信息。

常用的方法有

getAttribute(String attNarne) , setAttribute(String attNarne , String attValue)

和getInitParameter(String paramNarne)等。

config: javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。

常用的方法有

getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。

exception: java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessageO和printStackTrace等。

out: javax.servlet.jsp.JspWriter 的实例,该实例代表JSP 页面的输出流,用于输出内容,形成HTML 页面。

page: 代表该页面本身,通常没有太大用处。也就是Servlet 中的this ,其类型就是生成的Servlet 。

pageContext: javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext和getServletConfig等。

request: javax.servlet. http:HttpServletRequest 的实例,该对象封装了一次请求,客

户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参

数必须使用该对象。常用的方法有getPararneter(String paramNarne),

getPararneterValues(String paramName),

setAttribute(String atttibuteName,Object attributeValue),

getAttribute(String attributeName)和setCharacterEncoding(String env)等。

response: javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常,也很少使用该对象直接响应,输出响应使用out 对象,而response 对象常用于重定向。常用的方法有sendRedirect(j ava.lang.String location)等。

session: javax.servlet.http.HttpSession 的实例,该对象代表一次会话。从客户端浏览器与站点建立连接起,开始会话,直到关闭浏览器时结束会话。常用的方法有:

getAttribute(String attName), setAttribute(String attName, String attValue)等。

 

JSP 定义

JSP 属性定义使用<jsp-property-group/>元素配置,主要包括如下四个方面。

·是否允许使用表达式语言:使用<el-ignored/>元素确定,默认值为false 。

·是否允许使用Java 脚本:使用<scripting-invalid/>元素确定,默认值为false 。

·声明JSP 页面的编码:使用<page-encoding/>元素确定。

·使用隐式包含:使用<include-prelude/>和<include-codal>元素确定。

看下面的配置文件:

<?xm1 version="1.0" encoding="ISO-8859-1"?>

<!--Serv1et2.4 以上版本的Web 应用配置的根元素->

<web-app xm1ns=''http://java.sun.com/xml/ns/j2ee"

xmlns:xsi=''http://www.w3.org /2 001/XMLSchema-instance''

xsi:schemaLocation=''http://java.sun.com/xml/ns/j2ee http://java.sun.com

/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

<1-- 关于JSP 的配置信息-->

<jsp-config>

<]sp-property-group>

<!-- 对哪个文件应用配置-->

<url-pattern>/test1.jsp</url-pattern>

<!--忽略表达式语言-->

<el-ignored>true</el-ignored>

<'--页面编码方式-->

<page-encoding>GBK</page-encoding>

<'--不允许使用Java 脚本-->

<scripting-invalid>true</scripting-invalid>

<'--隐式导入页面头-->

〈工nclude-prelude>/inc/top.jspf</inc1ude-prelude>

<'--隐式导入页面尾-->

<include-coda>/inc/bottom.jspf</include-coda>

</jsp-property-group>

<]sp-property-group>

<1- 对哪个文件应用配置->

<url-pattern>/test2.jsp</url-pattern>

<el-ignored>false</el-ignored>

<!-- 页面编码方苯-->

<page-encoding>GBK</page-encoding>

<!一允许使用Java 脚本一〉

<scripting-invalid>false</scripting-invalid>

</jsp-property-group>

</jsp-config>

</web-app>

注意:如果在不允许使用Java 脚本的页面中使用Java 脚本,则页面将出现错误。

即test1 .jsp 页面中不允许出现Java 脚本。

 

表达式语言的内置对象

使用表达式语言可以直接获取请求参数,可获取页面中某个JavaBean 的属性值,获取请求头及获取session 属性值等,这些都得益于表达式语言的内置对象。

表达式语言包含如下11 个内置对象。

pageContext: 代表该页面的pageContext 对象,与JSP 的pageContext 内置对象相同。

pageScope: 用于获取page 范围的属性值。

requestScope: 用于获取request 范围的属性值。

sessionScope: 用于获取session 范围的属性值。

applicationScope: 用于获取application 范围的属性值。

param: 用于获取请求的参数值。

paramValues: 用于获取请求的参数值,与param 的区别在于,该对象用于获取属

性值为数组的属性值。

header: 用于获取请求头的属性值。

headerValues: 用于获取请求头的属性值,与header 的区别在于,该对象用于获取属性值为数组的属性值。

initParam: 用于获取请求Web 应用的初始化参数。

cookie: 用于获取应用的Cookie 值。

表达式语言的自定义函数

表达式语言除了可以使用基本的运算符外,还可以使用自定义函数。通过使用自定

义函数,加强了表达式语言的功能。

自定义函数的用法非常类似于标签的用法,同样需要定义函数处理类和使用标签库。

下面介绍定义函数的开发过程。

(1)开发函数处理类:函数处理类就是普通类,这个普通类中包含若干个静态方法,

每个静态方法都可定义成一个函数。

public class Functions{

       //对字符串进行反转

       public static String reverse( String text ){

              return new StringBuffer(text).reverse().toString();

       }

       //统计字符串的个数

       public static int countChar( String text) {

              return text.length();

       }

}

(2) 使用标签库定义函数,定义函数方法与定义标签库方法相同。下面是定义函的配置文件:

<?xml version="l.O" encoding="UTF-8" ?>

<1 一标签库配置文件的根元素一〉

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/200l/XMLSchema-instance"

xsi:schemaLocation="http://j ava.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

<jsp-version>2.0</jsp-version>

<tlib-version>l.O</tlib-version>

<1-- 定义第一个函数>

<function>

<!- 定义第一个函数:reverse-->

<name>reverse</name>

<!一定义函数的处理类>

<function-class>lee.Functction/function-class>

<!- 定义函数的对应的方法-->

<function-signature>java.lang.String reverse( java.lang.String )

</function-signature>

</function>

<function〉

<!-- 定义第二个函数: countChar-->

<name>countChar</name>

<!一定义函数的处理类->

<function-class>lee.Functions</function-class>

<1- 定义函数的对应的方法->

<function-signature>int countChar( java.lang.String )</function-signature>

</function>

</taglib>






本文转自hoojo博客园博客,原文链接:http://www.cnblogs.com/hoojo/archive/2012/01/29/2331154.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4068 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4479 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5456 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
443 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16819 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
1131 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3227 0
+关注
4653
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载