标题：JSP
简介
JSP是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件（*.htm，*.html）中加入Java程序片段（Scriptlet）和JSP标签，就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等，实现建立动态网站所需要的功能。所有程序操作都在服务器端执行，网络上传送给客户端的仅是得到的结果，这样大大降低了对客户浏览器的要求，即使客户浏览器端不支持Java，也可以访问JSP网页。
JSP全名为java server page，其根本是一个简化的Servlet设计，他实现了Html语法中的java扩张（以 <%, %>形式）。JSP与Servlet一样，是在服务器端执行的，通常返回给客户端的就是一个HTML文本，因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时，首先执行其中的程序段，然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等，以实现建立动态网页所需要的功能。
JSP技术使用Java编程语言编写类XML的tags和scriptlets，来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离，支持可重用的基于组件的设计，使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术，它的主要目的是将表示逻辑从Servlet中分离出来。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理，然后将生成的HTML页面返回给客户端的浏览器。Java Servlet是JSP的技术基础，而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用，完全的面向对象，具有平台无关性且安全可靠，主要面向因特网的所有特点。
自JSP推出后，众多大公司都支持JSP技术的服务器，如IBM、Oracle、Bea公司等，所以JSP迅速成为商业应用的服务器端语言。
JSP 2.0
引入表达式语言JSP 2.0的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件，JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能，因此基本上所有seriptlet能实现的功能都可以由JSP替代。在JSP 2.0中，建议尽量使用EL而使JSP的格式更一致。SimpleTagJSP 2.0中加入了新的创建自制标记的API，javax.servlet.jsp.tagext.SimpleTag定义了用来实现简单标记的接口。和 JSP 1.2中的已有接口不同的是，SimpleTag接口不使用doStartTag()和doEndTag()方法，而提供了一个简单的doTag()方法。这个方法在调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲， SimpleTag和IterationTag可以达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来设置JSP内容的setJspBody()和getJspBody()方法。Web容器会使用setJspBody()方法定义一个代表JSP内容的 JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中根据需要多次调用getJspBody().invoke()方法以处理JSP内容。JSP fragmentJSP2.0中的一个主要功能是JSP fragment，它的基本特点是可以使处理JSP的容器推迟评估JSP标记属性。我们知道一般JSP是首先评估JSP标记的属性，然后在处理JSP标记时使用这些属性，而JSP fragment提供了动态的属性。也就是说，这些属性在JSP处理其标记体时是可以被改变的。JSP需要将这样的属性定义为 javax.servlet.jsp.tagext.JspFragment类型。当JSP标记设置成这种形式时，这种标记属性实际上的处理方法类似于标记体。在实现标记的程序中，标记属性可以被反复评估多次。这种用法称为JSP fragment。JSP fragment还可以定义在一个SimpleTag处理程序中使用的自制标记动作。像前面例子说明的，getJspBody返回一个 JspFragment对象并可以在doTag方法中多次使用。需要注意的是，使用JSP fragment的JSP只能有一般的文本和JSP action，不能有scriptlet和scriptlet表达式。
强势与弱势
强势（1）一次编写，到处运行。除了系统之外，代码不用做任何更改。  JSP
（2）系统的多平台支持。基本上可以在所有平台上的任意环境中开发，在任意环境中进行系统部署，在任意环境中扩展。相比ASP的局限性JSP的优势是显而易见的。
（3）强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP，到由多台服务器进行集群和负载均衡，到多台Application进行事务处理，消息处理，一台服务器到无数台服务器，Java显示了一个巨大的生命力。
（4）多样化和功能强大的开发工具支持。这一点与ASP很像，Java已经有了许多非常优秀的开发工具，而且许多可以免费得到，并且其中许多已经可以顺利的运行于多种平台之下。
(5)支持服务器端组件。web应用需要强大的服务器端组件来支持，开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用，以增强系统性能。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。弱势（1） 与ASP也一样，Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能，为了极度的伸缩能力，所以极大的增加了产品的复杂性。
（2） Java的运行速度是用class常驻内存来完成的，所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面，它还需要硬盘空间来储存一系列的.java文件和.class文件，以及对应的版本文件。
九大内置对象
requestrequest 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息，主要用于接受通过HTTP协议传送到服务器的数据。（包括头信息、系统信息、请求方式以及请求参数等）。request对象的作用域为一次请求。responseresponse 代表的是对客户端的响应，主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域，它只在JSP页面内有效。session1.什么是session：从一个客户打开浏览器并连接到服务器开始，到客户关闭浏览器离开这个服务器结束，被称为一个会话。当一个客户访问一个服务器时，可能会在这个服务器的几个页面之间反复连接，反复刷新一个页面，服务器应当通过某种办法知道这是同一个客户，这就需要session对象。
2．session对象的ID：当一个客户首次访问服务器上的一个JSP页面时，JSP引擎产生一个session对象，同时分配一个String类型的ID号，JSP引擎同时将这个ID号发送到客户端，存放在Cookie中，这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时，不再分配给客户新的session对象，直到客户关闭浏览器后，服务器端该客户的session对象才取消，并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时，服务器为该客户再创建一个新的session对象。
3.session对象存在一定时间过期问题，所以存在session中的名值对会在一定时间后失去，可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中，request是一个不错的替代对象。application1．什么是application:
服务器启动后就产生了这个application对象，当客户在所访问的网站的各个页面之间浏览时，这个application对象都是同一个，直到服务器关闭。但是与session不同的是，所有客户的application对象都是同一个，即所有客户共享这个内置的application对象。
2．application对象常用方法:
(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中，并为添加的对象指定一个索引关键字。
(2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。outout 对象用于在Web浏览器内输出信息，并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时，可以对数据缓冲区进行操作，及时清除缓冲区中的残余数据，为其他的输出让出缓冲空间。待数据输出完毕后，要及时关闭输出流。pagepage 对象代表JSP本身，只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量，类似于Java编程中的 this 指针。configconfig 对象的主要作用是取得服务器的配置信息。通过 pageContext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时，容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。exceptionjava.lang.Throwable 的实例，该实例代表其他页面中的异常和错误。只有当页面是错误处理页面，即编译指令page 的isErrorPage 属性为true 时，该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。pageContextpageContext 对象的作用是取得任何范围的参数，通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的，在JSP页面中可以直接使用 pageContext对象。
技术方法
为了快速方便地进行动态网站的开发，JSP在以下几个方面做了改进，使其成为快速建立跨平台的动态网站的首选方案。
1.将内容的生成和显示进行分离
用JSP技术，Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面，并使用JSP标识或者小脚本来生成页面上的动态内容（内容是根据请求变化的，例如请求账户信息或者特定的一瓶酒的价格等）。生成内容的逻辑被封装在标识和JavaBeans组件中，并且捆绑在脚本中，所有的脚本在服务器端运行。由于核心逻辑被封装在标识和JavaBeans中，所以Web管理人员和页面设计者，能够编辑和使用JSP页面，而不影响内容的生成。
在服务器端，JSP引擎解释JSP标识和脚本，生成所请求的内容（例如，通过访问JavaBeans组件，使用JDBC技术访问数据库或者包含文件），并且将结果以HTML（或者XML）页面的形式发送回浏览器。这既有助于作者保护自己的代码，又能保证任何基于HTML的Web浏览器的完全可用性。2.可重用组件绝大多数JSP页面依赖于可重用的、跨平台的组件（JavaBeans或者Enterprise JavaBeans组件）来执行应用程序所要求的复杂的处理。开发人员能够共享和交换执行普通操作的组件，或者使得这些组件为更多的使用者和客户团体所使用。基于组件的方法加速了总体开发过程，并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。3.采用标识Web页面开发人员不会都是熟悉脚本语言的编程人员。JSP技术封装了许多功能，这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件，设置或者检索组件属性，下载Applet，以及执行用其他方法更难于编码和耗时的功能。4.适应平台几乎所有平台都支持Java，JSP+JavaBeans几乎可以在所有平台下通行无阻。从一个平台移植到另外一个平台，JSP和JavaBeans甚至不用重新编译，因为Java字节码都是标准的与平台无关的。5.数据库连接Java中连接数据库的技术是JDBC，Java程序通过JDBC驱动程序与数据库相连，执行查询、提取数据等操作。Sun公司还开发了JDBC－ODBC bridge，利用此技术Java程序可以访问带有ODBC驱动程序的数据库，大多数数据库系统都带有ODBC驱动程序，所以Java程序能访问诸如Oracle、Sybase、MS SQL Server和MS Access等数据库。
此外，通过开发标识库，JSP技术可以进一步扩展。第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来进行工作。
JSP技术很容易整合到多种应用体系结构中，以利用现存的工具和技巧，并且能扩展到支持企业级的分布式应用中。作为采用Java技术家族的一部分，以及Java 2（企业版体系结构）的一个组成部分，JSP技术能够支持高度复杂的基于Web的应用。 由于JSP页面的内置脚本语言是基于Java的，而且所有的JSP页面都被编译成为Java Servlets，所以JSP页面具有Java技术的所有好处，包括健壮的存储管理和安全性。作为Java平台的一部分，JSP拥有Java编程语言“一次编写，各处运行”的特点。
开发入门
JSP开发入门2
安装好你的机器来使用JSP
你将会需要Java 2软件开发工具(JSDK)，它原来的名称是Java开发工具(JDK)以及JavaServer网站开发工具(JSWDK)，Tomcat，或是其它支持JSP的网络服务器。Sun免费提供JSDK与JSWDK来供Windows，Solaris，以及Linux平台使用。
如果你想要在你的网络服务器上使用JSP，但服务器本身并不支持JSP与Javaservlets，你可以试试看Allaire的Jrun，它的作用就像是针对Netscape企业版与FastTrack服务器、微软的网际网络信息服务器(IIS)与个人网络服务器(PWS)、Apache、以及其它服务器的网络服务器附加设备。你也可以使用Apache网络服务器的Java版本，最新的JSWDK里有提供。
下载与安装你需要的组件
发布的1.2.2-001，JSDK可下载的版本是以可安装的压缩形式。下载的文件大约是20MB，可提供完整的Java发展环境，让你能建立利用标准API为核心的Java解决之道。然而，你的网络服务器需要应用到JSP的唯一一件事是Java编译器。要让网络服务器知道编译器的位置，将环境变量JAVA.HOME设到JSDK的安装目录。如果你是在Windows上安装并且接受预设目录，将这行程序代码set JAVA.HOME=C:1.2.2加到你的autoexec.bat档案并且重新开机。
在安装好JSDK之后，下载并且安装JSWDK或beta版的Tomcat，以Java为主的Apache网络服务器。安装在哪里并不重要，重要的是你可以找到它。一般而言，它会放在上层目录，这种方式可以让你取代JSWDK或 JSDK的网络服务器，不需要移动其它的网络服务器。在你安装好这个档案之后，你就可以准备发展JSP了。
在你正确的安装JSWDK之后，执行startserver指令文件来激活网络服务器，预设通讯端口 为 8080。要看你在激活服务器之后是均C有正确的安装工具，你可以加载范例JSP档案中的任何一个(http://localhost:8080/examples/jsp/)。如果你能够成功的执行一个范例档案，你可以知道你已经正确的设定好软件了。如果你在激活服务器的控制台窗口看到错误讯息，那么你需要解决这个问题。最常发生的问题是没有设定(或者不正确设定)环境变量JAVA.HOME。要检视环境设定，在DOS模式下键入set。
开始
解释JSP语法之前，先建立一个显示日期与时间的简单网页并且将它储存成sample.jsp:
<html>
<head>
<title>First Page</title>
</head>
<body>
<H3>Today is:
<%= newjava.util.Date() %>
</H3>
</body>
</html>.
将这个档案与你所有的HTML与JSP网页放在你JSWDK安装目录下的网页目录里. 你可以在http://localhost:8080/sample.jsp下载此页.当你第一次参观这个网页时，网站服务器会将JSP翻译成Javaservlet程序代码，那你就会看到的日期与时间.。
现在你已经下载，安装，并且架构好发展环境，你已经准备好要了解JSP语法与建立你自己的JSP为主的解决之道。
JSP开发入门3
JSP语法的基本原理
安装之后，接下来我们要讨论JSP的语法.如果要偷懒，你可以下载语法卡而如果你不熟悉 Java的程序设计，你可能会想要参考Sun的使用手册；然而，网站建立者不应该做太多的Java发展。除了几个函数调用之外，出现在你JSP网页上的Java程序代码应该将它减到最少;
记住这点之后，现在让我们先来看看JSP的编译器指引与指令组件，之后我们将解释JavaBeans与内部对象. JSP编译器指引与指令组件有五种型态.JSP 1.0之后，大部分的JSP是包含在以<% 作为开始%>作为结束的单一卷标里.新的 JSP 1.1规格已经发表了，它同时也与XML兼容.
JSP的编译器指引与指令组件
编译器指示　<%@ 编译器指示 %>
声明　<%! 声明 %>
表达式 <%= 表达式 %>
程序代码段/小型指令　<% 程序代码片段 %>
注释　<%-- 注释 --%>
编译器指示
JSP的编译器指示是针对JSP引擎。它们并不会直接产生任何看得见的输出；相反的，它们是在告诉引擎如何处理其它的JSP网页。它们永远包含在 <%@ ?%>卷标里。两个主要的指引是 page与include。我们不会讨论taglib编译器指引但它可以在JSP1.1里用来建立自订卷标。
你几乎可以在你所有的JSP网页最上面找到page编译器指示。虽然这不是必须的，但它可以让你指定到哪里可以找到支持的Java类别这类的事：
<%@ page import="java.util.Date" %>，
当发生Java问题的事件时应该将讯息传送到哪里：
<%@ page errorPage="errorPage.jsp" %>，
以及你是?需要为使用者管理通话期的信息，可能存取多个网页(稍后在JavaBeans里会有更多通话期的讨论):
<%@ page session="true" %>。
include编译器指示让你将你的内容分成几个可管理的组件，就像那些有表头或脚注的网页。所包含的网页可以是固定格式的HTML网页或者是JSP内容的网页:
<%@ include file="filename.jsp" %>。
宣告
JSP声明让你定义网页层的变量，来储存信息或定义支持的函式，让JSP网页的其余部分能够使用。如果你发现自己有太多的程序代码，你最好将它们放在不同的Java类别里。你可以在 <%! ?%>卷标里找到声明。记住要在变量声明的后面加上分号，就跟任何有效的Java叙述的形式一样: <%! int i=0; %>。
表达式
JSP里有表达式，评估表达式的结果可以转换成字符串并且直接使用在输出网页上。JSP运算是属于 <%= ?%> 卷标里，并不包含分号，加引号字符串的无用部分。
<%= i %>
<%= "Hello" %> 。
程序代码段/小型指令文件
JSP程序代码片段或小型指令文件是包含在<% ?%> 卷标里。当网络服务器接受这段请求时，这段Java程序代码会执行。小型指令文件可以是原始的HTML或XML，其内部的程序代码片段可以让你建立有条件的执行程序代码，或者只是一些使用另一块程序代码的东西。举例来说，下列的程序代码结合了表达式与小型指令文件，在H1，H2，H3，以及H4卷标里显示字符串"Hello"。小型指令文件不限于一行的原始程序代码 :
<% for (int i=1; i<=4; i++) { %>
<H<%=i%>>Hello</H<%=i%>>
<% } %>。
注释
最后一个主要JSP组件是嵌入式注释。虽然你可以在你的档案里包含HTML注释，如果使用者检视网页的原始码，他们也会看到这些注释。如果你不要让使用者看到你的批注，你可以将它放在<%-- ?--%>卷标里:
<%-- 针对服务器端的注释 --%>。
JSP开发入门4
JSP与JavaBean
虽然你可以在小型指令文件里放入一大块的程序代码，但是大多数的Java程序代码是属于可以重复使用的组件，称为JavaBean。JavaBean就跟ActiveX控件一样:它们提供已知的功能，并且是为了可随时重复使用的目的而设计的。
JavaBean的价值在于它可以经由一组特性来使用，而这些特性则提供对JavaBean设定的存取。以人来作范例，此人就是JavaBean，而他的姓名，社会福利安全号码，以及住址可以是特性。对于JSP网站，基本上你是将'JavaBean'动态的连接到你的网站。
假设JavaBean是在建立网站之前建好的，你要做的第一件事是告诉JSP网页它所需要使用JavaBean.这工作可以用<jsp:useBean>卷标来完成：<jsp:useBean id="localName" class="com.jguru.Person" scope="application" />.
<jsp:useBean>卷标需要你以id 属性来辨识JavaBean.在这里，你提供一个名称让JSP网页来辨识JavaBean，除了id 属性之外，你也必须告诉网页要到哪里去找这个JavaBean，或者是它的Java类别名称。类别属性提供如何在各式方法之中找到它，最后一个需要的组件是scope 属性.有了范围属性的帮助，你可以告诉JavaBean，要它为单一网页(预设)[scope="page"]；为一个被请求的网页[scope="request"]；为通话期[scope="session"]；或为整个应用程序[scope="application"]来维护它自己的信息.对于通话期范围，你可以很容易的维护JSP网页里的项目，例如购物车。
一但你宣告了JavaBean之后，你就可以存取它的特性来订定它。要取得一特性的值，使用<jsp:getProperty>卷标。有了<jsp:getProperty>卷标，你可以指定要使用的JavaBean名称(从useBean的id字段)，以及你要取得值的特性。接着，真正的值就会放在输出里：<jsp:getProperty id="localName" property="name" />.
要更改JavaBean的特性，你需要使用<jsp:setProperty>卷标.对这个卷标，你也需要辨认JavaBean以及要修正的特性，除此之外，你还需要提供新值.如果命名正确，这些可以直接经由规定的格式取得：<jsp:setProperty id="localName" property="*" />;
要从一参数取得，你必须直接命名此特性以及参数: <jsp:setProperty id="localName" property="address" param="parameterName" />;
或是直接以名称与值来设定: <jsp:setProperty id="localName" property="serialNumber" value="string" /> or <jsp:setProperty id="localName" property="serialNumber" value= <%= expression %> />.
有关JavaBean的最后一点:要让网络服务器可以找到JavaBean，你需要将它们的类别档案放在特别位置。对JSWDK而言，最简单的地方是在安装目录里的类别目录，例如 jswdk-1.0.1classes.
JSP开发入门5
JSP的内部对象
最后一个与JSP语法有关的组件叫做内部对象.在JSP小型指令文件内，你可以存取这些内部对象来与执行JSP网页的servlet环境相互作用。许多对内部对象的存取应该要简化。然而，这些是范例，它们的存取都是可接受的，要完整的利用内部对象设定则需要对最新的Java Servlet API有所了解。
下表列出你可以使用的内部对象。
内部对象说明
request客户端请求，此请求会包含来自GET/POST请求的参数
response　网页传回客户端的响应
pageContext网页的属性是在这里管理
session 与请求有关的会话
applicationservlet正在执行的内容
out 用来传送响应的输出流
config　代码片段配置对象
page　JSP网页本身
exception　针对错误网页，未捕捉的例外
那么，这些是做什么的，而你应该如何使用它们呢?基本上，在你的小型指令文件里，你可以使用它们来存取执行JSP程序代码的servlet。为了避免谈论到太多Servlet API 的细节，让我们来检视一些你可以利用它们来做的事：
不必使用表达式，你可以直接存取内部out对象来打印一些东西到response:
<% out.println("Hello"); %>.
不必直接传送参数到JavaBean，你可以藉由请求对象来取得参数的值:
<% String name=request.getParameter("name"); out.println(name); %>。
当你以JSP写了许多的应用程序之后，如果你建立了JavaBeans或者发现你自己将太多的Java原始码放入你的JSP档案，你需要建立支持的Java类别，这样可以鼓励重复使用并且降低JSP网页转换时所需要的时间。当你需要建立Java类别时，你必须:
将JDSWK的安装目录in目录加到你的PATH。在你的autoexec.bat档案的PATH行的最后，加入C:1.2.2in; 。
以下面的指令将JAR档案复制到jrelibext目录：
copy c:jswdk-1.0.1libservlet.jar c:jdk1.2.2jrelibext.
与ASP的比较
JSP(Java Server Page)与ASP(Active Server Page)两者都是常用的动态网页技术，也都是可以嵌入HTML中的程序，但两者是有着本质的不同，主要从以下几个方面对其进行比较：
1.Web服务器的支持：大多数通用的 Web服务器如：Apache、Netscape和Microsoft IIS都支持JSP页面，只有微软本身的Microsoft IIS和Personal Web Server可以支持ASP。
2.平台的支持：JSP具有平台独立性，只要是一般的Java程序可以运行的平台，都支持JSP程序。Windows平台可以很好的支持ASP,但ASP对于基于Win32逐渐模型的依赖，使得它难于移植到其它平台上。
3.组件模型：JSP是建立在可重用的、跨平台的组件（如：JavaBeans、Enterprises JavaBeans和用户定制的标签库等组件）之上的，而ASP使用的是基于Win32的COM组件模型。
4.脚本语言：JSP可以使用Java编程语言或JavaScript作为脚本语言，而ASP使用VBScript或Jscript作为脚本语言。
5.安全性：JSP使用Java安全模型，而ASP使用Windows NT的安全结构。
6.与Access数据库的连接：JSP使用JDBC建立与Access数据库的连接，而ASP对Access数据库使用Data Active Objects。
7.用户定制的标签：JSP可以使用用户定制标签库进行扩充，而ASP中没有用户定制标签库，ASP是不能扩充的。
常见问题
1、如何显示目录列表：
我们在本机测试程序时，一般都习惯在浏览器中就能遍历到某个目录下都有哪些文件，这就需要web服务器支持目录列表：
打开文件conf/web.xml，找到以下代码：
<param-name>listings</param-name>
<param-value>false</param-value>
将其中的false改成true
2、配置error-page：（指定处理错误的页面）
打开文件D:\demo\WEB-INF\web.xml：
在<web-app>…</web-app>中间加入：
<error-page>
<error-code>404</error-code>
<location>/NotFound.jsp</location>
</error-page>
（错误代码为404的错误导向到NotFound.jsp）
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
（当系统发生500错误即服务器内部错误时，跳转到错误处理页面error.jsp）
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
（当系统发生java.lang.NullException（即空指针异常）时，跳转到错误处理页面error.jsp）
提醒：
以上页面都需要做大一点（>=2kB），否则不起作用。
原因：tomcat把这样的页面字节限制在不少于多少字节。
3、jsp页面出现乱码如何解决？
在页头加上：
<%@ page contentType=“text/html; charset=gb2312″%>
4、jsp中两种包含页面的方式？
第一种：动作标签；例如： <jsp:include page="/index.html" />
第二种：指令标签；例如：<%@ include file="relativeURL"%>
其它含义
JSP，即 -Jacketed Soft Point（半被甲软尖弹）。子弹类型的一种，即广义上俗称的“达姆弹”。
大约在于19世纪末期，位于印度加尔各答（Calcutta）附近的达姆兵工厂（Dum Dumarsenal）以口径.303英吋英式子弹（.303 inch British）进行研发，所以又俗称为“达姆弹”。达姆弹最早于1897年和1898年在印度西北边区和苏丹使用。这种弹头全金属包覆弹不同之处在于其金属外壳没有完全包覆弹头前端，以致于弹头的铅质核心外露。如此当弹头撞击目标物，尤其是人体时，由于铅的延展性高，以至于会立即变形，呈现扩展形状；弹头后端的包铜由于质量高，加上仍然具有强大的惯性与动能，以至于将弹头前方的铅压碎造成高速的破裂与扩散，同时由于弹头自转的关系，铅块会以自转的方向成顺时钟或逆时钟扩散。也就是说铅的功能类似发挥弹头缓冲撞击的效用，然而在铜的高速挤压下又会产称爆裂造成伤口严重撕裂的帮凶。可想而知达姆弹不完全具备全金属包覆弹的穿透力，所以对于高密度掩体后方的人体也无法形成伤害；然而在一般情形下达姆弹会造成严重的撕裂伤，而破损的铅弹头也会造成外科医师救治上的困难。
JavaServer Pages（JSP）可谓掀起了一场风暴，其追随者蜂拥而至。JSP为企业Java开发人员提供了一个开发动态Web网站和Web应用的灵活工具。随着JSP标准标记库（JSTL）的引入，JSP规范第一版中略显粗糙的方面也有了大幅改进，JSP 2.0则将此技术又推向了一个新的高度。 《JSP设计》（第三版）得到了充分的修订和更新，以涵盖JSP 2.0和JSTL 1.1规范。其中详细介绍了JSP 2.0中新增的表达式语言（EL）、JSTL 1.1标记库和新的函数库、支持定制标记库开发（而无须Java代码）的新标记文件格式、简化的Java标记库API、在JSP XML语法方面所做出的改进等等。不仅如此，在此还详尽地描述了Apache Tomcat服务器的建立、JSP和JSTL语法和特征、错误处理和调试、鉴别和个人化、数据库访问、XML处理和国际化等诸多内容。　　希望学习JSP的专业人士可以划归为两大阵营，而这本书也充分认识到这两大阵营存在着不同的需求：网页设计人员感兴趣的是如何在Web页面中使用JSP元素，而程序员则更希望了解JSP API，以及如何将JSP有效地用做企业应用的一部分。如果你身为网页设计人员，那么会从本书第二部分的实用Web应用示例中获益匪浅。如果你是一个程序员，则会对第三部分详细介绍的高级主题倍加推崇，例如如何使用流行的Apache Struts MVC（模型-视图-控制器）框架将Servlet和JavaBeans组件与JSP集成，以及如何使用JSP API开发定制标记库，在此还提供了一些实际示例，开发你自己的标记库时可以将这些示例作为起点.