JSP
技术
JSP是Java Server Page的缩写,它是Servlet的扩展。其目的是简化建立和管理动态网站的工作
1
、
JSP
简介
在传统的网页
HTML
文件中加入
Java
程序片断和
JSP
标签,就构成了
JSP
网页。Java程序片断可以操纵数据库,重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。
所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持
Java
,也可以访问
JSP
网页
JSP的优点:把HTML编码和业务逻辑有效地分离。通常,JSP负责生成动态HTML页面,业务逻辑由其他可重用的组件(如:Servlet、Java Bean)和其他Java程序来实现,JSP可以通过Java程序片断访问这些业务组件
当
Tomcat
服务器接受到
Web
客户的一个
JSP
文件请求时,它对
JSP
文件进行语法分析并生成
Java Servlet
源文件,然后对其进行编译。一般情况下,
Servlet
源文件的生成和编译仅在初次调用
JSP
时发生。如果原始的
JSP
文件被更新,
Tomcat
服务器检测所做的更新,在执行它之前重新生成
Servlet
并进行编译
Tomcat把由JSP生成的Servlet源文件和类文件放于<CATALINA_HOME>/work目录下,通常情况下,如果修改了JSP文件,Tomcat会重新编译JSP,并把编译生成的新文件覆盖work目录下原来的旧文件
2
、
JSP
的语法
JSP文件(扩展名为.jsp)可以包含如下内容:
JSP指令
JSP声明
Java程序片断
变量数据的Java表达式
隐含对象
2.1
、
JSP
指令
JSP
指令(在
<%@
和
%>
内的)用于设置和整个
JSP
网页相关的属性。
JSP
指令的一般语法形式为:
<%@
指令名
属性
=”
值
”%>
1、page指令:page指令可以指定所使用的脚本语言、JSP代表的Servlet实现的接口以及导入的软件包
page指令的属性:
lauguage:
指定文件所使用的脚本语言
method
:指定Java程序片断所属的方法的名称
import:
指定导入的Java软件包名或类名列表
context_type
:指定响应结果的MIME类型
session
:
指定JSP页是否使用Session
errorPage
:指定当发生异常时,客户请求被重新定向到那个网页
isErrorPage
:表示此JSP网页是否为处理异常的网页
2
、
include
指令
JSP
可以通过
include
指令来包含其他文件,被包含的文件可以是
JSP
文件、
HTML
文件或文本文件
include
指令的语法为:
<%@ include file=”relativeURL”%>
2.2
、
JSP
声明
JSP
声明(在
<%!
和
%>
内的)用于声明
JSP
代表的
Servlet
类的成员变量和方法,语法如下:
<%! declaration%>
2.3
、
Java
程序片断
在
JSP
文件中,可以在
<%
和
%>
标记间直接嵌入任何有效地
Java
语言代码。这样嵌入的程序片断称为
Scriptlet
。如果在
page
指令中没有指定
method
属性,则生成的代码默认为
service
方法的主体
2.4
、变量数据的
Java
表达式
JSP
表达式标记为
<%=
和
%>
。该表达式的值会显示在网页上,
int
或
float
类型的值会自动转换成字符串加以显示
2.5
、隐含对象
在编写
JSP
程序时,可以直接使用
Servlet/JSP
容器提供的隐含对象。使用这些对象的引用变量时不需要做任何变量声明
javax.servlet.HttpServletRequest request
javax.servlet.HttpServletRespponse response
javax.servlet.ServletContext application
javax.servlet.jsp.JspWriter out
javax.servlet.http.HttpSession session
java.lang.Exception exception
3
、
JSP
与
Cookie
Cookie
是用户访问
Web
服务器时,服务器在用户硬盘上存放的信息
浏览器可以设置是否使用
Cookie
一个
Cookie
包干一对
Key/Value
。下面的代码生成一个
Cookie
并将它写到用户的硬盘上:
Cookie theCookie=new Cookie(”cookieName”,”cookieValue”);
response.addCookie(theCookie);
如果服务器想从用户硬盘上获取
Cookie
,可以使用下面方法从客户请求中取得所有的
Cookie
:
Cookie cookies=request.gerCookies();
然后调用
Cookie
的
getName
方法获得
Cookie
的
Key
,调用
Cookie
的
getValue
方法获得
Cookie
的
Value
。还可以通过
Cookie
的
setMaxAge(int expiry)
方法来设置
Cookie
的有效期,超过有效期,
Cookie
就会失效
4
、转发
JSP
请求
<jsp:forward>
标签用于将客户请求重定向到其他的
HTML
文件、
JSP
文件或者
Servlet
文件。
<jsp:forward>
语法为:
<jsp:forward page=”
重新定向的文件
”/>
<jsp:forward>
标签从一个
JSP
文件向另一个文件传递包含用户请求的
request
对象。如果
JSP
文件中包含
<jsp:forward>
标签,那么这个
JSP
文件中的所有输出数据都不会被发送到客户端,并且
<jsp:forward>
标签以下的代码不会被执行
5
、
JSP
异常处理
像普通的
Java
程序一样,可以把异常引入到
JSP
中,如果在执行
JSP
的
Java
代码时发生异常,可以通过下面的指令将
HTTP
请求转发给另一个专门处理异常的网页:
<%@ page errorPage=”errorpage.jsp”%>
在处理异常的网页中可以直接访问
exception
隐含对象,获取详细的异常信息
6
、部署
JSP
部署
JSP
很简单,只需把
jsp
文件拷贝到
webapp
应用的根目录下即可。
部署
Servlet
时,必须在
web.xml
中加入
<servlet>
和
<servlet-mapping>
元素,其中
<servlet-mapping>
元素可以用来设定访问
Servlet
的
<url-pattern>
。事实上,也可以为
JSP
配置
<servlet>
和
<servlet-mapping>
元素,从而设定访问
JSP
的
<url-pattern>