JSP开发环境的配置运行
(一)JDK安装与配置
1.安装JDK
运行下载的JDK软件包,可安装SDK,在安装过程中可以设置安装路径及选择组件,系统默认的安装路径为C:\ jdk1.5(当然也可以自己设定),默认的组件选择是全部安装。
2.JDK环境变量的配置
第一步:进入系统属性选择高级属性。
第二步: 进入环境变量界面。
第三步: 添加环境变量值。
第四步:添加PATH路径 C:\jdk1.5\bin(即JDK安装目录下的bin目录)
(二)Tomcat安装与配置
1.安装Tomcat
运行下载的Tomcat软件包,可安装SDK,在安装过程中可以设置安装路径及选择组件,安装路径为C:\Tomcat5,默认的组件选择是全部安装。
2.Tomcat环境变量的配置
第一步:进入系统属性选择高级属性。
第二步:进入环境变量界面。
第三步:添加环境变量值。
第四步:添加PATH路径 C:\Tomcat5.0\bin
(三)Eclipse的安装与配置
1.安装Eclipse
先解压eclipse-SDK-3.2.1-win32.zip文件,然后运行MyEclipseEnterpriseWorkbenchInstaller_5.0.1GA_E3.2.exe软件。并选择安装路径,当安装提示要选择Eclipse SDK时,选择已经解压好的eclipse文件目录,然后照提示完成安装。
2.Eclipse的环境配置
先运行MyEclipse 5.0GA软件,第一次运行时需要建立一个工程文件目录,这里根据个人习惯自行建立。进入Eclipse界面后:
第一步:选择windows菜单选择Preferences项。
第二步:进入Preferences界面在type filter text中选择MyEclipse再选Application Server再选择Tomcat 5。后面操作如下图,分别选择Tomcat的安装路径,并选择Enable激活。
第三步:配置JDK。点开Tomcat,选择JDK。并点add。
第四步:添加JDK。在“JRE name:”写上JRE的名称(可以任意命名),在“JRE home directory”栏点browse选择JDK的安装路径。然后点确定,最后点击完成。
第五步:测试安装是否成功。检测是否能启动Tomcat。
(四)在Eclipse上建立一个JSP
1.建立一个新的工程文件,名为exam1。




2.建立一个JSP,名为First.jsp


3. 编写JSP程序。
在First.jsp中编写:
1 | <body> |
(五)部署JSP工程文件
1.进入开部署界面

点击

2.部署:在Project中选择要部署的工程文件,再点add。



(六)启动Tomcat服务器

(七)浏览JSP
打开浏览起,在地址栏输入:http://localhost:8080/exam1/First.jsp 。
JSP Servlet技术
Web应用程序有严格定义的目录结构,它需要一个称为部署描述文件的文件web.xml来配置。对应用程序的每个Servlet,可以在web.xml中定义若干个初始化参数,然后通过ServletConfig对象获取这些参数。
ServletContext对象表示该应用程序的环境,通过该对象可以获得应用程序范围的初始化参数、容器版本信息、资源的URL、在其中存放共享数据以及登录日志等。
Servlet事件监听
在Web应用程序中,事件的处理也是通过事件监听器接口处理的。Web应用事件处理的原理为:当Web应用中某些状态改变时,Servlet容器就产生某种事件,如ServletContext对象初始化时会产生ServletContextEvent事件,此时Servlet容器就会从注册的事件监听器中寻找处理该事件的监听器对象,并执行相应的代码。
在Servlet 2.4规范中共定义了6种事件类型和8个事件监听器接口,它们可以处理三种对象上的事件,如下表所示:
| 监听对象 | 监听器接口 | 监听事件 |
|---|---|---|
| ServletContext | ServletContextListener | ServletContextEvent |
| ServletContextAttributeListener | ServletContextAttributeEvent | |
| HttpSession | HttpSessionListener | HttpSessionEvent |
| HttpSessionActivationListener | ||
| HttpSessionAttributeListener | HttpSessionBindingEvent | |
| HttpSessionBindingListener | ||
| ServletRequest | ServletRequestListener | ServletRequestEvent |
| ServletRequestAttributeListener | ServletRequestAttributeEvent |
Servlet过滤器的使用
过滤器是web服务器上的组件,它们对客户和资源之间的请求和响应进行过滤。
过滤器的工作原理是:当servlet容器接收到对某个资源的请求,它要检查是否有过滤器与之关联。如果有过滤器与该资源关联,servlet容器将把该请求发送给过滤器。在过滤器处理完请求后,它将做下面3件事:
- 产生响应并将其返回给客户;
- 如果有过滤器链,它将把(修改过或没有修改过)请求传递给下一个过滤器;
- 将请求传递给不同的资源。
当请求返回到客户时,它是以相反的方向经过同一组过滤器返回。过滤器链中的每个过滤器够可能修改响应。
过滤器API主要包括:Filter、FilterConfig和FilterChain接口。
JSP 会话管理
HTTP协议是无状态的协议。在很多情况下,Web服务器必须能够跟踪客户的状态。比如,对于一个购物网站,在一个时刻可能有多个客户购物,Web服务器必须能够区分不同的客户。一般情况下,Web服务器为每个客户配置了虚拟的购物车(ShoppingCart)。当某个客户请求将一个商品放入购物车时,Web服务器必须根据发出请求的客户的身份,找到该客户的购物车,然后把商品放入其中。
Web服务器跟踪客户的状态通常有4种方法:
(1)使用HttpSession对象管理会话;
(2)使用持久的Cookie对象;
(3)使用URL重写机制;
(4)使用隐藏的表单域。
JSP基本语法与页面指令
JSP语法元素有<% %>、<%@ %>、<%= %>和<%! %>四种,分别是运行Java代码、jsp的初始化以及导入、输出java表达式的值和java初始化代码
JSP有三个指令元素:page、include和taglib。这些指令元素是针对JSP引擎的,并不会产生任何看得见的输出。它们都包含在<%@和%>标签内。主要学会使用page指令。
<%@ page %>指令作用于整个JSP页面,包括静态包含的页面,但不包括动态包含的页面。可以在一个页面中包含多个<%@ page %>指令,但其属性除import外只能在整个页面中出现一次。<%@ page %>指令可以放在页面的任何位置,但为了JSP程序的可读性,一般将<%@ page %>指令放在页面的前面。<%@ page %>主要包含以下几种基本属性:1)import、引用类文件;2)language,指定脚本语言;3)contentType,指定jsp编码方式;
JSP隐含对象与作用域
在JSP页面的转换阶段(JSP页面转换后定义的类名为:implicit_jsp,该类继承了org.apache.jasper.runtime.HttpJspBase),JSP引擎在_jspService()方法中声明并初始化了9个隐含对象,它们主要是为了方便在JSP页面对这些对象的访问。这些隐含对象包括:application、session、request、response、out、page、pageContext、config、exception。
在上述9个隐含对象中,有下面4个作用域对象,它们是:application、session、request、pageContext。它们主要用来在不同作用域中共享数据。
一)request对象
request对象是javax.servlet.http.HttpServletRequest对象的一个实例。每次客户端请求一个页面时,JSP引擎都会创建一个新的对象来表示那个请求。
request对象提供方法来获取HTTP头信息,包括表单数据,cookies,HTTP方法等。
二)response对象
response对象是javax.servlet.http.HttpServletResponse对象的一个实例。当服务器创建request对象时,它也创建了代表客户端响应的对象。
response对象还定义了接口,可以处理创建的新的HTTP 头。通过这个对象JSP程序员可以添加新的cookies或日期stamps,HTTP状态码等。
三)out对象
out隐式对象是javax.servlet.jsp. JspWriter对象的一个实例,用于在响应中发送内容,在Servlet中可以通过pageContext.getOut()来获取该对象。
最初的JspWriter对象被实例化不同程度地取决于页面是否缓冲。通过使用页面指令的buffered='false'属性,缓冲可以很容易地关掉。
JspWriter对象包含大部分与java.io.PrintWriter类相同的方法。然而,JspWriter对象有一些额外的方法用来处理缓冲。与PrintWriter对象不同,JspWriter抛出IOException。
四)session对象
session对象是javax.servlet.http.HttpSession的一个实例,且行为与Java Servlet中的session对象完全相同,在Servlet中可以通过pageContext.getSession()来获取该对象。
session对象是用来跟踪客户端请求之间的客户端会话。
五)application对象
application对象是用于生成的Servlet的ServletContext对象的直接包装器,且实际上是javax.servlet.ServletContext对象的一个实例,在Servlet中可以通过pageContext.getServletContext()来获取该对象。
这个对象是JSP页面整个生命周期的一个代表。当初始化JSP页面时,这个对象被创建,当JSP页面由jspDestroy()方法删除时,该对象也会被删除。
通过为application添加属性,可以确保生成web应用程序的所有JSP文件可以访问它。
六)config对象
config对象是javax.servlet.ServletConfig的一个实例,且是用于生成的servlet的ServletConfig对象的直接包装器,在Servlet中可以通过pageContext.getServletConfig()来获取该对象。
该对象允许JSP程序员访问Servlet或JSP引擎初始化参数,如路径或文件位置等。
下面的config方法是唯一一个可能曾经使用的方法,且它的使用很简单:config.getServletName();
这返回servlet的名称,该名称是包含在定义在web-inf\web.xml文件中
七)pageContext对象
pageContext对象是javax.servlet.jsp.PageContext对象的一个实例。pageContext对象用于表示整个JSP页面。
这个对象是作为一种手段来访问页面信息的,同时避免了大部分的实现细节。
这个对象为每个请求存储了请求引用和响应对象。application,config,session,out对象是通过访问该对象的属性派生出来的。
pageContext对象还包含发布到JSP页面的指令信息,包括缓冲信息,errorPageURL,页面范围。
pageContext类定义了几个领域,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE,和APPLICATION_SCOPE,它确定了这四个范围。它还支持40多个方法,大约一半的方法是继承了javax.servlet.jsp.JspContext类的。
重要方法之一是removeAttribute(),该方法接受一个或两个参数。例如,pageContext.removeAttribute(“attrName”)从全部范围中删除属性,而下面的代码仅从页面范围中删除它:pageContext.removeAttribute("attrName", PAGE_SCOPE);
八)page对象
这个对象是一个页面实例的真实引用。它可以被认为是一个对象,代表了整个JSP页面。page对象实际上是this对象的一个直接的同义词。
九)exception对象
exception对象是一个包装器,包含来自先前页面的异常抛出。它通常用于为错误条件生成一个适当的响应。
JSP组件重用与JavaBean
通过重用Web组件可以提高应用程序开发的效率和其可维护性。在JSP中可以通过包含机制和JavaBean实现Web组件的重用。
包含分为静态包含和动态包含。静态包含通过include指令实现,动态包含通过标准动作jsp:include实现。
在JSP页面中使用JavaBean是最重要的组件重用技术,这主要是通过下面3个标准动作实现的:<jsp:useBean><jsp:setProperty><jsp:getProperty>
表达式语言
表达式语言(EL)是JSP 2.0新增的功能。它是一种简洁的数据访问语言,通过它可以在JSP页面中方便地访问应用程序数据,无需使用JSP表达式(<%=和%>)。EL的目标是使动态网页的设计、开发和维护更加容易。JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。
EL的特点是访问数据可以使用点(.)运算符或方括号([])运算符;可以访问隐含对象;有自己的运算符构造表达式;可以使用Java语言编写的函数等。
| EL 表达式 | 结果 |
|---|---|
${1} | 1 |
${1 + 2} | 3 |
${1.2 + 2.3} | 3.5 |
${1.2E4 + 1.4} | 12001.4 |
${-4 - 2} | -6 |
${21 * 2} | 42 |
${3/4} | 0.75 |
${3 div 4} | 0.75 |
${3/0} | Infinity |
${10%4} | 2 |
${10 mod 4} | 2 |
${(1==2) ? 3 : 4} | 4 |
JSTL与标签文件
JSP标准标签库(JSP Standard Tag Library,简称JSTL)是一个为实现Web应用程序的常用功能而开发的标签库集合。功能包括基本输入输出、流程控制、XML文件解析、数据库查询、国际化和文本格式化等。JSTL主要由下面几个库组成:核心标签库;XML标签库;格式化/国际化标签库;数据库标签库;函数标签库。
这些库都很有用,但我们这里只学习核心库的使用。核心库的标签又可以分成四类,如下表所示:
| JSTL标签类别 | JSTL标签 | 标签说明 |
|---|---|---|
| 通用目的 | <c:out> | 在页面中显示内容 |
<c:catch> | 捕获异常 | |
| 变量支持 | <c:set> | 设置一个EL变量值 |
<c:remove> | 清除一个EL变量 | |
| 流程控制 | <c:if> | 根据一个属性等于一个值改变处理 |
<c:choose> | 根据一个属性等于一组值改变处理 | |
<c:forEach> | 对集合中的每个对象作重复处理 | |
<c:forTokens> | 对给定一个文本域中的每个子串执行处理 | |
| URL处理 | <c:url> | 重写URL并对它们的参数编码 |
<c:import> | 访问web应用程序外部的内容 | |
<c:redirect> | 告诉客户浏览器访问另一个URL |
标签文件(tag file)也是JSP 2.0新增的功能,它的目的是使JSP页面开发人员仅使用JSP语法就能开发标签库而无须编写Java程序。所谓标签文件就是直接使用JSP语法编写的标签。标签文件的扩展名一般为.tag或.tagx,如果标签文件包含其他完整的或片段的标签文件,JSP 2.0建议其扩展名为.tagf。
在JSP页面中使用标签文件,需要在taglib动作中使用tagdir属性指定标签文件所在的目录,例如:<%@ taglib prefix="mytag" tagdir="/WEB-INF/tags"%>
JSTL的安装
要在JSP页面中使用JSTL标签,首先必须安装JSTL库。可以到Jakarta网站下载最新版本的JSTL。
如果安装了Tomcat,可以在示例应用程序中获得JSTL,它位于
使用JSTL我们不用建立标签库描述文件,因为该文件已经包含在standard.jar文件中了,JSP容器可以找到该文件。另外,也可以不用配置web.xml文件,因为JSP容器使用隐含映射的方式可以将标准的URI映射到适当的标签库上。