1、 JSP语法
JSP技术是以Java语言作为脚本语言的,JSP网页为整个服务器端的Java库单元提供了一个接口来服务于HTTP的应用程序。JSP文件后缀名为(*.jsp)。
一个JSP页面由元素和模板数据组成。元素是必须由JSP容器处理的部分,而模板数据是JSP容器不处理的部分。在JSP2.0规范中,元素有三种类型:指令元素、脚本元素和动作元素。
1.1 指令元素
指令元素主要用于为转换阶段提供整个JSP页面的相关信息,指令不会产生任何的输出到当前的输出流中。指令元素的语法形式如下:
<%@directive { attr=”value”}* %>
①page指令
page指令用于整个JSP页面,定义了许多与页面相关的属性,这些属性将用于和JSP容器通信。Page指令的语法如下:
<%@ page attribute="value"%>
在JSP规范中,还提供了XML语法格式的page指令,如下:
<jsp:directive.pageattribute="value" />
Page指令的常用属性如下表:
属性 |
描述 |
buffer |
指定out对象使用缓冲区的大小 |
autoFlush |
控制out对象的 缓存区 |
contentType |
指定当前JSP页面的MIME类型和字符编码 |
errorPage |
指定当JSP页面发生异常时需要转向的错误处理页面 |
isErrorPage |
指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
extends |
指定servlet从哪一个类继承 |
import |
导入要使用的Java类 |
info |
定义JSP页面的描述信息 |
isThreadSafe |
指定对JSP页面的访问是否为线程安全 |
language |
定义JSP页面所用的脚本语言,默认是Java |
session |
指定JSP页面是否使用session |
isELIgnored |
指定是否执行EL表达式 |
isScriptingEnabled |
确定脚本元素能否被使用 |
② include指令
Include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。Include指令的语法如下:
<%@ include file="relativeurl" %>
XML语法格式的include指令如下:
<jsp:directive.includefile="relative url" />
③ taglib指令
Taglib指令允许页面谁用用户定制的标签。Taglib指令的语法如下:
<%@ taglib uri="uri"prefix="prefixOfTag" %>
XML语法格式的taglib指令如下:
<jsp:directive.tagliburi="uri" prefix="prefixOfTag" />
Taglib的三个属性如下:
属性 |
描述 |
Uri |
该属性唯一地标识和前缀相关的标签库描述符 |
Tagdir |
该属性指示前缀将被用于安装在/web-inf/tag/目录或其子目录下的标签文件 |
Prefix |
定义一个prefix::tagname形式的字符串前缀,用于区分多个自定义的标签。 |
1.2 脚本元素
脚本元素包括三个部分:声明、脚本段和表达式。
① declaration(声明)
声明脚本元素用于声明在JSP页面的脚本语言中使用的变量和方法。它的语法如下:
<%! Declaration(s) %>
XML语法格式的声明如下:
<jap:declaration> declaration(s)</jsp:declaration>
② scriptlet(脚本段)
脚本段是在请求处理期间要执行的Java代码段。她的语法如下:
<% scriptlet %>
XML语法格式的脚本段如下:
<jsp:scriptlet> scriptlet</jsp:scriptlet>
③ expression(表达式)
表达式脚本元素是Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转换为字符串,插入到当前的输出流中。它的语法如下:
<%= expression %>
XML语法格式的表达式如下:
<jsp:expression> expression</jsp:expression>
1.3 动作元素
动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。它的语法如下:
<jsp:action_nameattribute="value" />
常用用标准动作如下:
语法 |
描述 |
jsp:include |
在页面被请求的时候引入一个文件。 |
jsp:useBean |
寻找或者实例化一个JavaBean。 |
jsp:setProperty |
设置JavaBean的属性。 |
jsp:getProperty |
输出某个JavaBean的属性。 |
jsp:forward |
把请求转到一个新的页面。 |
jsp:plugin |
根据浏览器类型为Java插件生成OBJECT或EMBED标记。 |
jsp:element |
定义动态XML元素 |
jsp:attribute |
设置动态定义的XML元素属性。 |
jsp:body |
设置动态定义的XML元素内容。 |
jsp:text |
在JSP页面和文档中使用写入文本的模板 |
所有的动作要素都有两个属性:id属性和scope属性。
① id属性:
id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。
② scope属性:
该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。
2、 JSP的内置对象
JSP支持的9大内置对象:
对象 |
描述 |
request |
HttpServletRequest类的实例 |
response |
HttpServletResponse类的实例 |
out |
PrintWriter类的实例,用于把结果输出至网页上 |
session |
HttpSession类的实例 |
application |
ServletContext类的实例,与应用上下文有关 |
config |
ServletConfig类的实例 |
pageContext |
PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page |
类似于Java类中的this关键字 |
Exception |
Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
① request对象
Request对象封装了由客户端生产的HTTP请求的所有细节,主要包括HTTP文信息、系统信息、请求方式和请求参数等。
1) 访问请求参数
Request对象用于处理HTTP请求中的各项参数。这些参数,最常用的就是获取访问参数。
在页面中定义超链接
<a href=“delete.jsp?id=1”>删除<a/>
通过request对象的getParameter()方法获取传递的参数值。
<%
Request.getParameter(“id”);
%>
使用request对象获取请求参数值。
[1] 创建index.jsp文件,在该文件中添加一个链接到deal.jsp页面的超链接,并传递两个参数。
[2] 创建deal.jsp文件,在该文件中通过request对象的getParameter方法获取请求参数值并输出。
2)在作用域中管理属性
在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。
ObjectgetAttribute(String name) 返回指定属性的属性值
void setAttribute(String name,Object object) 存储该请求中的属性
3) 获取cookie
cookie的中文意思是小甜饼,然而在互联网上的意思与这就完全不同了。它和食品完全没有关系。在互联网中,cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。
[1] 创建index.jsp 文件,具体代码如下:</p><p> <pre name="code" class="html"><%@ page language="java"contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.net.URLDecoder" %>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8">
<title>通过cookie保存并读取用户登录信息</title>
</head>
<body>
<%
Cookie[ ] cookies = request.getCookies();//从request中获得Cookie对象的集合
String user = ""; //登录用户
String date = ""; //注册的时间
if (cookies != null) {
for (int i = 0; i <cookies.length; i++) { //遍历cookie对象的集合
if(cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie
user =URLDecoder.decode(cookies[i].getValue().split("#")[0]);//获取用户名
date =cookies[i].getValue().split("#")[1];//获取注册时间
}
}
}
if ("".equals(user)&& "".equals(date)) {//如果没有注册
%>
游客您好,欢迎您初次光临!
<formaction="deal.jsp" method="post">
请输入姓名:<input name="user" type="text"value="">
<inputtype="submit" value="确定">
</form>
<%
} else {//已经注册
%>
欢迎[<b><%=user %></b>]再次光临<br>
您注册的时间是:<%=date %>
<%
}
%>
</body>
</html>
[2] 编写deal.jsp文件,用于向cookie中写入注册信息。Deal.jsp具体代码如下:
<%@ page language="java"contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ pageimport="java.net.URLEncoder" %>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=utf-8">
<title>写入cookie</title>
<scripttype="text/javascript">window.location.href="index.jsp"</script>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
Stringuser=URLEncoder.encode(request.getParameter("user"),"utf-8"); //获取用户名
Cookiecookie = new Cookie("mrCookie", user+"#"+newjava.util.Date().toLocaleString());
cookie.setMaxAge(60*60*24*30); //设置cookie有效期30天
response.addCookie(cookie); //保存cookie
%>
</body>
</html>
4) 获取客户端信息:
getHeader() 返回HTTP协议定义的文件头信息
getProtocol() 返回请求用的协议类型及版本号
getServerName() 返回接受请求的服务器主机名
getServerPort() 返回服务器接受此请求所用的端口号
getServerPath() 返回服务器所请求的脚本文件的文件路径
getReader() 返回解码过了的请求体
getRemoteAddr() 返回发送此请求的客户端IP地址
getRemoteHost() 返回发送此请求的客户端主机名
getRealPath(String path) 返回一虚拟路径的真实路径
② response 对象
response对象是服务器端向客户端返回的数据,从这个对象中可以取出部分与服务器互动的数据和信息,只有接受这个对象的页面才可以访问这个对象。
Response对象中一个重要的功能---重定向网页
使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。代码如下:
<%@ page language="java" import="java.util.*" contentType="text/html;charset=rgb"%>
<html>
<head>
<title>response对象页面重定向示例</title>
</head>
<body>
<%
response.sendRedirect("http://www.hustedu.com");
%>
</body>
</html>
③ session对象
session对象维护者客户端用户和服务器端状态,从这个对象中可以去除用户和服务器交互过程中的数据和信息。这个对象在用户关闭浏览器离开Web应用之前一直有效。
ObjectsetAttribute(String,Object) 使用指定名称将对象绑定到此回话
Object getAttribute(String) 返回与指定名称绑定在一起的对象
String getId() 返回Session创建时jsp引擎为它设置的唯一id号
④ out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。
JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。
下表列出了我们将会用来输出boolean,char,int,double,String,object等类型数据的重要方法:
方法 |
描述 |
out.print(dataType dt) |
输出Type类型的值 |
out.println(dataType dt) |
输出Type类型的值然后换行 |
out.flush() |
刷新输出流 |
⑤ application对象
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。
这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。
⑥ config对象
config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。
这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
以下是config对象的使用方法,不是很重要,所以不常用:
config.getServletName();
它返回包含在<servlet-name>元素中的servlet名字,注意,<servlet-name>元素在 WEB-INF\web.xml 文件中定义。
⑦ pageContext 对象
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。
这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。
这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。
PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。
其中一个重要的方法就是removeArribute(),它可接受一个或两个参数。比如,pageContext.removeArribute("attrName")移除四个scope中相关属性,但是下面这种方法只移除特定scope中的相关属性:
pageContext.removeAttribute("attrName",PAGE_SCOPE);
⑧ page 对象
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。
page对象就是this对象的同义词。
⑨ exception 对象
exception对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
3、JavaBean技术
JavaBean是一类特殊的Java,起初,JavaBean的目的是为了将可以重复使用的代码进行打包。
① JavaBean属性值
一个JavaBean对象的属性可以是可读写,或只读,或只写。JavaBean对象的属性通过JavaBean实现类中提供的两个方法来访问:
getPropertyName() ,如果属性的名称为myName,那么这个方法的名字就要写成getMyName()来读取这个属性。这个方法也称为访问器。
setPropertyName() 。如果属性的名称为myName,那么这个方法的名字就要写成setMyName()来写入这个属性。这个方法也称为写入器。
一个只读的属性只提供getPropertyName()方法,一个只写的属性只提供setPropertyName()方法。
② JavaBean在JSP中使用
1)用<jsp:useBean>标记:
<jsp:useBeanid="name" class="classname"scope="page|request|session|application"/>
id:代表jsp页面中的实例对象 通过这个对象引用类中的成员,如,id="wq", wq.成员();
class:代表JavaBean类,如: class="com.Test",引用com包中的Test类
scope:指明了javabean的生存时间
2)用<jsp:setProperty>标记:
功能:将请求页面中的表单值赋值/或者自己想设置的值 给JavaBean中的属性赋值
<jsp:setPropertyname="beanName" last_syntax />
name:表示 已经存在并且具有一定生存范围的JavaBean实例,例如上面的 wq。
ast_syntax:表示了四种不同的语法:
[1]property="*"[2]property="propertyName" [3]property="propertyName"param="parameterName" [4]property="propertyName"value="value"
property:是一个很重要的属性,它指定想要设定值的 JavaBean 中的成员名,不建议使用*。
param:根据我的理解,他是请求页面的 表单中的 txt 属性名。
value:代表了直接赋值给 property的属性
3)<jsp:getProperty>标签 与<jsp:setProperty>功能相反,用法一样:
<jsp:getPropertyname="BeanName" property="想要获取属性值的那个属性的名字">
③ 访问JavaBean
<html>
<head>
<title>useBean Example</title>
</head>
<body>
<jsp:useBean id="date" class="java.util.Date" />
<p>The date/time is <%= date %>
</body>
</html>
<p></p><p>
</p>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>