Servlet技术简介与编写、编译Servlet程序

1Servlet技术简介
Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的WEB服务器端编程技术,主要用于在WEB服务器端获得客户端的访问请求信息和动态生成对客户端的响应消息。Servlet技术也是JSP技术(另外一种动态网页开发技术)的基础。一个Servlet程序就是一个实现了特殊接口的 Java类,用于被支持Servlet的WEB服务器调用和运行,即只能运行于具有Servlet引擎的WEB服务器端。一个Servlet程序负责处理它所对应的一个或一组URL地址的访问请求,接收访问请求信息和产生响应内容。
Applet是用于浏览器端的Java小程序,在浏览器端被解释执行,用于在HTML网页中实现一些桌面应用程序的功能,被称为“小应用程序”。Servlet是用于WEB服务器端的Java小程序,它在WEB服务器端被解释执行,用于处理客户端的请求和产生动态网页内容。源于Applet的命名,这种WEB服务器端的Java小程序就被命名为了Servlet,与Applet相对应,Servlet可以被称之为“小服务程序”。
Servlet与普通java程序相比,只是输入信息的来源和输出结果的目标不一样,所以,普通Java程序所能完成的大多数任务,Servlet程序都可以完成。Servlet程序具有如下的一些基本功能:
  •          获取客户端通过HTML的FORM表单递交的数据和URL后面的参数信息;
  •          创建对客户端的响应消息内容;
  •          访问服务器端的文件系统;
  •          连接数据库并开发基于数据库的应用;
  •          调用其它的Java类。
2.编写与编译Servlet程序
一个Servlet程序就是一个在WEB服务器端运行的特殊Java类,这个特殊的Java类必须实现javax.servlet.Servlet接口,Servlet接口定义了Servlet容器与Servlet程序之间通信的协议约定。为了简化Servlet程序的编写,Servlet API中也提供了一个实现了Servlet接口的最简单的Servlet类,其完整名称为javax.servlet.GenericServlet,这个类实现了Servlet程序的基本特征和功能。Servlet API中还提供了一个专用于HTTP协议的Servlet类,其名称是javax.servlet.http.HttpServlet,它是GenericServlet的子类,在GenericServlet类的基础上进行了一些针对HTTP特点的扩充。显然,一个Java类只要继承了GenericServlet或HttpServlet,它就是一个Servlet。反过来说,要编写一个Servet类,这个类必须继承GenericServlet类或HttpServlet类。为了充分利用HTTP协议的功能,在一般情况下,都应让自己编写的Servlet类继承HttpServlet类,而不是继承GenericServlet类。
查看HttpServlet类的帮助文档,可以看到其中有一个名为service的方法,当客户端每次访问一个Servlet程序时,Servlet引擎都将调用这个方法来进行处理。service方法接受两个参数,一个是用于封装HTTP请求消息的对象,其类型为HttpServletRequest,另一个是代表HTTP响应消息的对象,其类型为HttpServletResponse。调用HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个流对象中写入的数据将作为HTTP响应消息的实体内容部分发送给客户端。
:动手体验:编写与编译Servlet程序的过程
(1)编写一个继承了HttpServlet类的HelloServlet类,它对HttpServlet类中的service方法进行了覆盖,如例程4-2所示。
例程4-2  HelloServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet
{
    //从HttpServlet类的帮助文档中复制service方法的声明部分可避免书写错误
    public void service(HttpServletRequest request,
        HttpServletResponse response) throws ServletException,IOException
    {
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<font size=30 color=red>www.it315.org</font><br>");
        out.println("<marquee>" + new java.util.Date() + "</marquee>");
        out.println("</html>");
    }
}

(2)使用javac命令编译这个源文件,通常情况下,第一次学习编写Servlet程序的人都会遇到类似如下错误:
HelloWorld.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
HelloWorld.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
......
这些错误信息提示javac编译器找不到javax.servlet和javax.servlet.http这两个包以及其中的一些Servlet API类,这是因为包含Servlet API类的jar文件还没有被加入到javac所使用的CLASSPATH环境变量中。
(3)在执行javac的命令行窗口中,将包含有Servlet API的jar文件加入到CLASSPATH环境变量的路径列表中,例如,对于Tomcat 4.x,应使用如下的命令设置:
set CLASSPATH=<tomcat的安装目录>/common/lib/servlet.jar;%CLASSPATH%
设置完CLASSPATH环境变量后,重新编译HelloServlet.java文件,如果源程序中没有书写错误的话,这时候就可以编译成功了。
在笔者编写的《java就业培训教程》中曾经讲过,在命令行窗口中设置的CLASSPATH环境变量是临时的,只对这个命令行窗口起作用,对其它窗口和应用程序不起作用,因此在每次新启动的命令行窗口中都要重新设置。如果想让设置一直保持有效,应该使用对整个系统都有效的环境变量的设置方法,例如,在win2000的系统特性的“环境变量”对话框中进行设置,在win98的开机自动批处理文件Autoexec.bat中设置,在Linux的Profile文件中设置。
(4)在编译和运行java程序时,Java类装载器也会去<JDK安装主目录>/jre/lib/ext目录下的jar包中搜索要加载的类。如果将包含Serlet API的jar文件复制到该目录下,在编译Servlet程序时,就不必在CLASSPATH环境变量中增加包含Serlet API的jar文件。

转载于:https://www.cnblogs.com/spring3/archive/2006/06/14/2401797.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring mvc学习(24):配置maven环境和创建maven项目(建议收藏,超全超详细)

1本次歌谣就对如何创建一个maven项目做一个详细的讲解&#xff0c;毕竟卡了我三天&#xff0c;久久不能入眠&#xff0c;也搜了网上很多的博客 都没有顺利的解决maven项目的创建。这篇建议大家收藏&#xff0c;总会用到的。不然大家看网上的博客也是一脸懵逼。 2首先工具使用…

120. Triangle

文章目录1 题目理解2 解题2.1 动态规划2.2 优化空间2.3进一步优化空间1 题目理解 Given a triangle array, return the minimum path sum from top to bottom. For each step, you may move to an adjacent number on the row below. 输入&#xff1a;一个三角形数组List<…

Torque2D MIT 实战记录: 塔防进度(1)

前言 Torque2D虽然工具不齐全,而且加入MIT不久,但是有老底在,所以即使是第一版也是非常好用和完善的,这几天准备开发一款塔防类的游戏. :) 熟悉了TorqueScript的用法后,写东西还是很快的. 进度 1. 完成了道具库模块 2. 场景系统 3. 阵营逻辑 4. 攻击系统雏形 截图 效果还不错吧…

三十岁前不要去在乎的18件事

1&#xff0e;放弃 把握的反面就是放弃&#xff0c;选择了一个机会&#xff0c;就等于放弃了其它所有的可能。当新的机会摆在面前的时候&#xff0c;敢于放弃已经获得的一切&#xff0c;这不是功亏一篑&#xff0c;这不是半途而废&#xff0c;这是为了谋求更大的发展空间&#…

第一百一十一期:思考 | 一文说透秒杀系统如何设计

秒杀大家都不陌生。自2011年首次出现以来&#xff0c;无论是双十一购物还是 12306 抢票&#xff0c;秒杀场景已随处可见。简单来说&#xff0c;秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看&#xff0c;秒杀系统本质是一个高性能、高一致、高可…

TcpClient.Connect函数连接超时的问题(转载)

TcpClient.Connect函数连接超时的问题 问题原述&#xff1a; http://topic.csdn.net/t/20060616/15/4825920.html 调用TcpClient.Connect函数连接其他机器。我在一台机器上测试程序&#xff0c;对于连接根本无法连接&#xff08;物理连接不通&#xff09;的机器&#xff0c;该函…

Programming MS Office 2000 Web Components第二章第一节(第二部分)

排序和过滤 阅读本节时&#xff0c;如果您打开随书光盘Samples\Chap02目录下的SortFilterExample.htm文件。您会发现这个例子很有用。本节展示的代码和描述的特定环境来自这个文件。 电子表格组件支持Excel中的基础的排序和过滤功能&#xff0c;并且通过编程模型和用户界面来提…

309. Best Time to Buy and Sell Stock with Cooldown

1 题目理解 Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple tim…

第一百一十二期:96秒100亿!如何抗住双11高并发流量?

今年双 11 全民购物狂欢节进入第十一个年头&#xff0c;1 分 36 秒&#xff0c;交易额冲到 100 亿 !比 2018 年快了近 30 秒&#xff0c;比 2017 年快了近 1 分半!这个速度再次刷新天猫双 11 成交总额破 100 亿的纪录。 作者&#xff1a;邴越 今年双 11 全民购物狂欢节进入第…

不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据

Python爬虫为什么受欢迎如果你仔细观察&#xff0c;就不难发现&#xff0c;懂爬虫、学习爬虫的人越来越多&#xff0c;一方面&#xff0c;互联网可以获取的数据越来越多&#xff0c;另一方面&#xff0c;像 Python这样的编程语言提供越来越多的优秀工具&#xff0c;让爬虫变得简…

股票

FXCM - 网路外汇交易 http://www.fxcmasia.com/chinese/转载于:https://www.cnblogs.com/snowball/archive/2006/06/26/436446.html

740. Delete and Earn

1 题目 Given an array nums of integers, you can perform operations on the array. In each operation, you pick any nums[i] and delete it to earn nums[i] points. After, you must delete every element equal to nums[i] - 1 or nums[i] 1. You start with 0 poin…

第一百一十三期:去伪存真,区块链应用到底能解决什么实际问题?

区块链技术仍然在发展初期&#xff0c;实践应用也停留在试水阶段。就金融等领域而言&#xff0c;区块链究竟意味着什么?今后实践应用的前景何在?在Libra的倒逼下&#xff0c;全球央行数字货币又将如何发展? 作者&#xff1a;第一财经 两周前&#xff0c;区块链成为热词。上…

两种战斗

两种战斗 Written by Allen Lee 战斗分两种&#xff0c;我们一定要把它们分开&#xff0c;就是为了维持生命的战斗&#xff0c;和为了维持自尊的战斗。 如果你无法分清的话&#xff0c;要么你将致使他失去生命。要么你将致使他失去自尊。“你要是现在去帮忙的话&#xff0c;或…

地图图元的闪烁效果制作

实现查找之后如果加上一个闪烁效果会更明显&#xff0c;方法是用个时间控件控制&#xff0c;改变vstyle即可&#xff1b;还可以简单的设置进程休眠时间&#xff0c;改变可视性&#xff0c;利用一个循环&#xff0c;控制闪烁次数。前面一种实现代码如下&#xff1a; 用个时间控件…

790. Domino and Tromino Tiling

文章目录1 题目理解2 动态规划2.1只有一种板2.2 有两种板1 题目理解 We have two types of tiles: a 2x1 domino shape, and an “L” tromino shape. These shapes may be rotated. XX <- domino XX <- “L” tromino X Given N, how many ways are there to tile a …

第一百一十四期:盘点十大最新Web UI测试工具

本文为您盘点目前十大最新Web UI测试工具的各自优缺点&#xff0c;以方便您根据实际情况进行选择。 作者&#xff1a;陈峻 在过去的几年中&#xff0c;业界至少出现了十二种全新的UI测试自动化工具。虽然每一种工具都有各自的侧重点&#xff0c;但是它们普遍将出色的可用性和…

新起点

还记得以前找资料时经常看到博客园的文章&#xff0c;今天很高兴我也参与其中了。我只希望通过这么一个平台来不断的激励自己&#xff0c;属于我的大学时间已经不多了&#xff0c;不再懊悔过去&#xff0c;只要坚持从今天开始&#xff0c;一万小时定律我相信你。加油~ just now…

通过Web Services上传和下载图片文件

通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加&#xff0c;Web Services的应用越来越广&#xff0c;我们不但需要通过Web Services传递字符串信息&#xff0c;而且需要传递二进制文件信息。下面&#xff0c;我就分别介绍如何通过Web Servi…

300. Longest Increasing Subsequence

文章目录1 题目理解2 动态规划3 二分贪心1 题目理解 Given an integer array nums, return the length of the longest strictly increasing subsequence. A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing…