【Jsp精品源码栏目提醒】:网学会员,鉴于大家对Jsp精品源码十分关注,论文会员在此为大家搜集整理了“【精品】jsp学习 - 其它资料”一文,供大家参考学习!
Welcome.
jsp 代码ltbodygt This is my
JSP page. ltbrgt ltform actionquotwelcomequot methodquotgetquotgt 请输入用户名:ltinput typequottextquot namequotusernamequotgtltbrgt ltinput typequotsubmitquot valuequot提交quotgt lt/formgtlt/bodygtWeb.xml 的配置ltservletgt ltdescriptiongtThis is the description of my J2EE componentlt/descriptiongt ltdisplay-namegtThis is the display name of my J2EE componentlt/display-namegt ltservlet-namegtWelcomeServletlt/servlet-namegt ltservlet-classgtcom.servlet.WelcomeServletlt/servlet-classgt ltinit-paramgt ltparam-namegtgreetinglt/param-namegt ltparam-valuegtWelcome you:lt/param-valuegt lt/init-paramgt lt/servletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletlt/servlet-namegt lturl-patterngt/welcomelt/url-patterngt lt/servlet-mappinggt注:Welcome.
jsp 中的 actionquotwelcomequot 需要与 Web.xml 中的 lturl-patterngt/welcomelt/url-patterngt一致。
WelcomeServlet.java 代码如下:package com.servletimport java.io.IOExceptionimport java.io.PrintWriterimport javax.servlet.ServletExceptionimport javax.servlet.http.HttpServletimport javax.servlet.http.HttpServletRequestimport javax.servlet.http.HttpServletResponsepublic class WelcomeServlet extends HttpServlet private String greeting / Constructor of the object. / public WelcomeServlet super / Destruction of the servlet. ltbrgt / public void destroy super.destroy // Just puts quotdestroyquot string in log // Put your code here / The doGet method of the servlet. ltbrgt This method is called when a form has its tag value method equals to get. param request the request send by the client to the server param response the response send by the server to the client throws ServletException if an error occurred throws IOException if an error occurred / public void doGetHttpServletRequest request HttpServletResponse response throws ServletException IOException /response.setContentTypequottext/htmlquot PrintWriter out response.getWriter out.printlnquotltDOCTYPE HTML PUBLIC /quot-//W3C//DTD HTML 4.01Transitional//EN/quotgtquot out.printlnquotltHTMLgtquot out.printlnquot ltHEADgtltTITLEgtA Servletlt/TITLEgtlt/HEADgtquot out.printlnquot ltBODYgtquot out.printquot This is quot out.printthis.getClass out.printlnquot using the GET methodquot out.printlnquot lt/BODYgtquot out.printlnquotlt/HTMLgtquot out.flush out.close/ request.setCharacterEncodingquotgb2312quot String usernamerequest.getParameterquotusernamequot String welcomeInfogreeting quot quot username response.setContentTypequottext/htmlquot PrintWriter outresponse.getWriter out.printlnquotlthtmlgtltheadgtlttitlegtquot out.printlnquotWelcome Pagequot out.printlnquotlt/titlegtlt/headgtquot out.printlnquotltbodygtquot out.printlnwelcomeInfo out.printlnquotlt/bodygtlt/htmlgtquot out.close / The doPost method of the servlet. ltbrgt This method is called when a form has its tag value method equals to post. param request the request send by the client to the server param response the response send by the server to the client throws ServletException if an error occurred throws IOException if an error occurred / public void doPostHttpServletRequest request HttpServletResponse response throws ServletException IOException response.setContentTypequottext/htmlquot PrintWriter out response.getWriter out .printlnquotltDOCTYPE HTML PUBLIC /quot-//W3C//DTD HTML 4.01 Transitional//EN/quotgtquot out.printlnquotltHTMLgtquot out.printlnquot ltHEADgtltTITLEgtA Servletlt/TITLEgtlt/HEADgtquot out.printlnquot ltBODYgtquot out.printquot This is quot out.printthis.getClass out.printlnquot using the POST methodquot out.printlnquot lt/BODYgtquot out.printlnquotlt/HTMLgtquot out.flush out.close / Initialization of the servlet. ltbrgt throws ServletException if an error occure / public void init throws ServletException // Put your code here greeting getInitParameterquotgreetingquot 在你的 WEB-INF 目录下的 web.xml添加类似信息ltxml versionquot1.0quot encodingquotISO-8859-1quotgtltweb-app xmlnsquothttp://java.sun.com/xml/ns/j2eequot xmlns:xsiquothttp://www.w3.org/2001/XMLSchema-instancequot xsi:schemaLocationquothttp://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdquot versionquot2.4quotgt lt-- JSPC servlet mappings start --gt ltservletgt ltservlet-namegttest.myfirst_jsplt/servlet-namegt ltservlet-classgttest.myfirst_jsplt/servlet-classgt lt/servletgt ltservlet-mappinggt ltservlet-namegttest.myfirst_jsplt/servlet-namegt lturl-patterngt/myfirstlt/url-patterngt lt/servlet-mappinggtlt-- JSPC servlet mappings end --gtlt/web-appgt本例中 servlet 为 myfirst_
jsp.class 在 test 包中访问的方法为 http://你的服务器地址:端口/myfirst如法炮制即可1.1 Java Servlet 及其特点 Servlet 是 Java 技术对 CGI 编程的回答。
Servlet 程序在服务器端运行,动态地生成Web 页面。
与传统的 CGI 和许多其他类似 CGI 的技术相比,Java Servlet 具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资(更重要的是, Servlet 程序员收入要比 Perl 程序员高:-): 高效。
在传统的 CGI 中,每个请求都要启动一个新的进程,如果 CGI 程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。
而在 Servlet 中,每个请求由一个轻量级的 Java 线程处理(而不是重量级的操作系统进程)。
在传统 CGI 中,如果有 N 个并发的对同一 CGI 程序的请求,则该 CGI 程序的代码在内存中重复装载了 N 次;而对于 Servlet,处理请求的是 N 个线程,只需要一份 Servlet 类代码。
在性能优化方面,Servlet 也比 CGI 有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等。
方便。
Servlet 提供了大量的实用工具例程,例如自动地解析和解码 HTML 表单数据、读取和设置 HTTP 头、处理 Cookie、跟踪会话状态等。
功能强大。
在 Servlet 中,许多使用传统 CGI 程序很难完成的任务都可以轻松地完成。
例如,Servlet能够直接和 Web 服务器交互,而普通的 CGI 程序不能。
Servlet 还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
可移植性好。
Servlet 用 Java 编写,Servlet API 具有完善的标准。
因此,为 I-Planet Enterprise Server 写的 Servlet 无需任何实质上的改动即可移植到 Apache、Microsoft IIS 或者 WebStar。
几乎所有的主流服务器都直接或通过插件支持 Servlet。
节省投资。
不仅有许多廉价甚至免费的 Web 服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持 Servlet 的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
1.2
JSP 及其特点 JavaServer Pages(
JSP)是一种实现普通静态 HTML 和动态 HTML 混合编码的技术,有关
JSP 基础概念的说明请参见《
JSP 技术简介 》。
许多由 CGI 程序生成的页面大部分仍旧是静态 HTML,动态内容只在页面中有限的几个部分出现。
但是包括 Servlet 在内的大多数 CGI 技术及其变种,总是通过程序生成整个页面。
JSP 使得我们可以分别创建这两个部分。
例如,下面就是一个简单的
JSP 页面: <DOCTYPE HTML PUBLIC quot-//W3C//DTD HTML 4.0 Transitional//ENquot> <HTML> <HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD> <BODY> <H1>欢迎</H1> <SMALL>欢迎 <-- 首次访问的用户名字为quotNew Userquot --> < out.printlnUtils.getUserNameFromCookierequest > 要设置帐号信息,请点击 <A HREFquotAccount-Settings.htmlquot>这里</A></SMALL> <P> 页面的其余内容。
. </BODY></HTML> 下面是
JSP 和其他类似或相关技术的一个简单比较:
JSP 和 Active Server Pages(ASP)相比 Microsoft 的 ASP 是一种和
JSP 类似的技术。
JSP 和 ASP 相比具有两方面的优点。
首先,动态部分用 Java 编写,而不是 VB Script 或其他 Microsoft 语言,不仅功能更强大而且更易于使用。
第二,
JSP 应用可以移植到其他操作系统和非 Microsoft 的 Web 服务器上。
JSP 和纯 Servlet 相比
JSP 并没有增加任何本质上不能用 Servlet 实现的功能。
但是,在
JSP 中编写静态 HTML更加方便,不必再用 println 语句来输出每一行 HTML 代码。
更重要的是,借助内容和外观的分离,页 面制作中 不同性质的 任务可以 方便地分 开:比如, 由页面设 计专家进行HTML 设计,同时留出供 Servlet 程序员插入动态内容的空间。
JSP 和服务器端包含(Server-Side Include,SSI)相比 SSI 是一种受到广泛支持的在静态 HTML 中引入外部代码的技术。
JSP 在这方面的支持更为完善,因为它可以用 Servlet 而不是独立的程序来生成动态内容。
另外,SSI 实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。
JSP 和 javascript 相比 javascript 能够在客户端动态地生成 HTML。
虽然 javascript 很有用,但它只能处理以客户端环境为基础的动态信息。
除了 Cookie 之外,HTTP 状态和表单提交数据对 javascript 来说都是不可用的。
另外,由于是在客户端运行,javascript 不能访问服务器端资源,比如数据库、目录信息等等。
太阳当空照,花儿对我笑,小鸟说早早早你为什么背上 Z 药包,我去炸学校,天天不迟到,一拉线我就跑,扑通一声学校不见了。
2.1 安装 Servlet 和
JSP 开发工具 要 学 习 Servlet 和
JSP 开 发 , 首 先 你 必 须 准 备一 个 符 合 Java Servlet 2.1/2.2 和JavaServer Pages1.0/1.1 规范的开发环境。
Sun 提供免费的 JavaServer Web Development Kit(JSWDK),可以从 http://java.sun.com/products/servlet/下载。
安装好 JSWDK 之后,你还要告诉 javac,在编译文件的时候到哪里去寻找 Servlet 和
JSP 类 。
JSWDK 安 装 指 南 对 此 有详 细 说 明, 但 主要 就 是 把 servlet.jar 和
jsp.jar 加 入CLASSPATH。
CLASSPATH 是一个指示 Java 如何寻找类文件的环境变量,如果不设置CLASSPATH,Java 在当前目录和标准系统库中寻找类;如果你自己设置了 CLASSPATH,不要忘记包含当前目录(即在 CLASSPATH 中包含“.”)。
另外,为了避免和其他开发者安装到同一 Web 服务器上的 Servlet 产生命名冲突,最好把自己的 Servlet 放入包里面。
此时,把包层次结构中的顶级目录也加入 CLASSPATH会带来不少方便。
请参见下文具体说明。
2.2 安装支持 Servlet 的 Web 服务器 除了开发工具之外,你还要安装一个支持 Java Servlet 的 Web 服务器,或者在现有的Web 服务器上安装 Servlet 软件包。
如果你使用的是最新的 Web 服务器或应用服务器,很可 能 它 已 经 有 了 所 有 必 需 的 软 件 。
请 查 看 Web 服 务 器 的 文 档 , 或 访 问http://java.sun.com/products/servlet/industry.html 查看支持 Servlet 的服务器软件清单。
虽然最终运行 Servlet 的往往是商业级的服务器,但是开始学习的时候,用一个能够在台式机上运行的免费系统进行开发和测试也足够了。
下面是几种当前最受欢迎的产品。
Apache Tomcat. Tomcat 是 Servlet 2.2 和
JSP 1.1 规范的官方参考实现。
Tomcat 既可以单独作为小型Servlet、
JSP 测试服务器,也可以集成到 Apache Web 服务器。
直到 2000 年早期,Tomcat还是唯一的支持 Servlet 2.2 和
JSP 1.1 规范的服务器,但已经有许多其它服务器宣布提供这方面的支持。
Tomcat 和 Apache 一样是免费的。
不过,快速、稳定的 Apache 服务器安装和配置起来有点麻烦,Tomcat 也有同样的缺点。
和其他商业级 Servlet 引擎相比,配置 Tomcat 的工作量显然要多一点。
具体请参见 http://jakarta.apache.org/。
JavaServer Web Development Kit JSWDK. JSWDK 是 Servlet 2.1 和
JSP 1.0 的官方参考实现。
把 Servlet 和
JSP 应用部署到正式运行它们的服务器之前,JSWDK 可以单独作为小型的 Servlet、
JSP 测试服务器。
JSWDK 也是免费的,而且具有很好的稳定性,但它的安装和配置也较为复杂。
具体请参见http://java.sun.com/products/servlet/download.html。
Allaire JRun. JRun 是一个 Servlet 和
JSP 引擎,它可以集成到 Netscape Enterprise 或 FastTrack Server、IIS、Microsoft Personal Web Server、版本较低的 Apache、Oeilly 的 WebSite 或者 StarNineWeb STAR。
最多支持 5 个并发连接的限制版本是免费的,商业版本中不存在这个限制,而且增加了远程管理控制台之类的功能。
具体请参见 http://www.allaire.com/products/jrun/。
New Atlanta 的 ServletExec ServletExec 是一个快速的 Servlet 和
JSP 引擎,它可以集成到大多数流行的 Web 服务器,支持平台包括 Solaris、Windows、MacOS、HP-UX 和 Linux。
ServletExec 可以免费下载和使用,但许多高级功能和管理工具只有在购买了许可之后才可以使用。
New Atlanta 还提供一个免费的 Servlet 调试器,该调试器可以在许多流行的 Java IDE 下工作。
具体请参见http://newatlanta.com/。
Gefion 的 LiteWebServer LWS LWS 是一个支持 Servlet 2.2 和
JSP 1.1 的免费小型 Web 服务器。
Gefion 还有一个免费的 WAICoolRunner 插件,利用该插件可以为 Netscape FastTrack 和 Enterprise Server 增加Servlet 2.2 和
JSP 1.1 支持。
具体请参见 http://www.gefionsoftware.com/。
Sun 的 Java Web Server. 该服务器全部用 Java 写成,而且是首先提供 Servlet 2.1 和
JSP 1.0 规范完整支持的Web 服务器之一。
虽然 Sun 现在已转向 Netscape/I-Planet Server,不再发展 Java Web Server,但 它 仍 旧 是 一 个 广 受 欢 迎 的 Servlet 、
JSP 学 习 平 台 。
要 得 到 免 费 试 用 版 本 , 请 访 问http://www.sun.com/software/jwebserver/try/..1 Servlet 基本结构 下面的代码显示了一个简单 Servlet 的基本结构。
该 Servlet 处理的是 GET 请求,所谓的 GET 请求,如果你不熟悉 HTTP,可以把它看成是当用户在浏览器地址栏输入 URL、点击 Web 页面中的链接、提交没有指定 METHOD 的表单时浏览器所发出的请求。
Servlet也可以很方便地处理 POST 请求。
POST 请求是提交那些指定了 METHOD“POST”的表单时所发出的请求,具体请参见稍后几节的讨论。
import java.io.import javax.servlet.import javax.servlet.http.public class SomeServlet extends HttpServlet public void doGetHttpServletRequest requestHttpServletResponse responsethrows ServletException IOException // 使用“request”读取和请求有关的信息(比如 Cookies)// 和表单数据// 使用“response”指定 HTTP 应答状态代码和应答头// (比如指定内容类型,设置 Cookie)PrintWriter out response.getWriter// 使用 quotoutquot把应答内容发送到浏览器 如果某个类要成为 Servlet,则它应该从 HttpServlet 继承,根据数据是通过 GET 还是POST 发送,覆盖 doGet、doPost 方法之一或全部。
doGet 和 doPost 方法都有两个参数,分别为 HttpServletRequest 类型和 HttpServletResponse 类型。
HttpServletRequest 提供访问有关请求的信息的方法,例如表单数据、HTTP 请求头等等。
HttpServletResponse 除了提供用于指定 HTTP 应答状态(200,404 等)、应答头(Content-Type,Set-Cookie 等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的 PrintWriter 。
对于简单的 Servlet来说,它的大部分工作是通过 println 语句生成向客户端发送的页面。
注意 doGet 和 doPost 抛出两个异常,因此你必须在声明中包含它们。
另外,你还必须导入 java.io 包(要用到 PrintWriter 等类)、javax.servlet 包(要用到 HttpServlet 等类)以及 javax.servlet.http 包(要用到 HttpServletRequest 类和 HttpServletResponse 类)。
最后,doGet 和 doPost 这两个方法是由 service 方法调用的,有时你可能需要直接覆盖 service 方法,比如 Servlet 要处理 GET 和 POST 两种请求时。
3.2 输出纯文本的简单 Servlet 下面是一个输出纯文本的简单 Servlet。
3.2.1 HelloWorld.javapackage hallimport java.io.import javax.servlet.import javax.servlet.http.public class HelloWorld extends HttpServlet public void doGetHttpServletRequest requestHttpServletResponse responsethrows ServletException IOException PrintWriter out response.getWriterout.printlnquotHello Worldquot 3.2.2 Servlet 的编译和安装 不同的 Web 服务器上安装 Servlet 的具体细节可能不同,请参考 Web 服务器文档了解更权威的说明。
假定使用 Java Web Server(JWS)2.0,则 Servlet 应该安装到 JWS 安装目录的 servlets 子目录下。
在本文中,为了避免同一服务器上不同用户的 Servlet 命名冲突,我们把所有 Servlet 都放入一个独立的包 hall 中;如果你和其他人共用一个服务器,而且该服务器没有“虚拟服务器”机制来避免这种命名冲突,那么最好也使用包。
把 Servlet 放入了包 hall 之后,HelloWorld.java 实际上是放在 servlets 目录的 hall 子目录下。
大多数其他服务器的配置方法也相似,除了 JWS 之外,本文的 Servlet 和
JSP 示例已经在 BEA WebLogic 和 IBM WebSphere 3.0 下经过测试。
WebSphere 具有优秀的虚拟服务器机制,因此,如果只是为了避免命名冲突的话并非一定要用包。
对于没有使用过包的初学者,下面我们介绍编译包里面的类的两种方法。
一种方 法是设置 CLASSPATH,使其指向 实际存放 Servlet 的目录 的 上一级目录(Servlet 主目录),然后在该目录中按正常的方式编译。
例如,如果 Servlet 的主目录是 C:\JavaWebServer\servlets,包的名字(即主目录下的子目录名字)是 hall,在 Windows 下,编译过程如下:DOS> set CLASSPATHC:\JavaWebServer\servletsCLASSPATHDOS> cd C:\JavaWebServer\servlets\hallDOS> javac YourServlet.java 第二种编译包里面的 Servlet 的方法是进入 Servlet 主目录,执行“javac directory\YourServlet.java”(Windows)或者“javac directory/YourServlet.java”(Unix)。
例如,再次假定 Servlet 主目录是 C:\JavaWebServer\servlets,包的名字是 hall,在 Windows 中编译过程如下:DOS> cd C:\JavaWebServer\servletsDOS> javac hall\YourServlet.java 注意在 Windows 下,大多数 JDK 1.1 版本的 javac 要求目录名字后面加反斜杠\。
JDK1.2 已经改正这个问题,然而由于许多 Web 服务器仍旧使用 JDK 1.1,因此大量的Servlet 开发者仍旧在使用 JDK 1.1。
最后,Javac 还有一个高级选项用于支持源代码和.class 文件的分开放置,即你可以用javac 的“-d”选项把.class 文件安装到 Web 服务器所要求的目录。
3.2.3 运行 Servlet 在 Java Web Server 下,Servlet 应该放到 JWS 安装目录的 servlets 子目录下,而调用Servlet 的 URL 是 http://host/servlet/ServletName。
注意子目录的名字是 servlets(带“s”),而 URL 使用的是“servlet”。
由于 .