tomcat常见错误与解决方法

时间:2024.5.4

上海纽斯达科技

tomcat常见错误与解决方法

上海纽斯达科技有限公司

2014-10-25

文档状态

tomcat常见错误与解决方法

目的:

在tomcat服务器出现故障时,能快速定位并解决相关错误。

保密:

本文档仅供内部使用,请勿外传

概述:

tomcat常见错误与问题之解决方法技术指南。

安装环境:

系统环境:redhat enterprise 6.5 64bit

注释:Q代表问题,A代表错误解决办法

Q:在以tomcat用户启动tomcat时提示:

The JAVA_HOME environment variable is not defined This environment variable is needed to run this program

A:没有在在tomcat的配置文件.bash_profile中设置环境变量JAVA_HOME,具体设置方法为 :加入如下几行:

JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准) export JAVA_HOME

CLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jar

export CLASSPATH

Q: 在以tomcat用户登录linux系统后,提示:

-bash: /home/tomcat/j2sdk1.4.2_08: is a directory

-bash:/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jar:没有那个文件或目录。

A: 在tomcat的配置文件.bash_profile中JAVA_HOME和CLASSPATH两个变量值的等号“=”后 面存在空格,造成路径不能识别。

Q: 在tomcat启动时提示:

Error occurred during initialization of VM

Could not reserve enough space for object heap

A: 在tomcat的bin目录下,catalina.sh文件的tomcat内存参数配置过大,超过机器可用内 存总数造成,修改到适当的值即可,修改的参数为:JAVA_OPTS="-Xms50m -Xmx60m"

Q:信息发布后台管理,点击“网站发布”后,提示:

“由于发生I/O错误.原因,发布失败,请联系管理员或稍后再试!”

A:在防火墙上做了端口映射,使后台登录端口不是真正的服务器发布端口,修正方法:登 录信息发布后台管理时,使用服务器中原本设置的端口号。

Q:信息发布系统发布的静态页部分字符缺少,不能正常显示。

A:原因:linux企业版的缺省字符集为GB18030,jdk对该字符集的支持出现问题。 解决方法:修改/etc/sysconfig/下的i18n文件,将如下两行:

LANG="zh_CN.GB18030"

LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

修改为:

LANG="zh_CN.GBK"

LANGUAGE="zh_CN.GBK:zh_CN.GB18030:zh_CN.GB2312:zh_CN"

Q:如何在Windows下将tomcat装成服务:

A: 1. 打开DOS命令窗口

2. 进入tomcat的bin路径下(tomcat的路径不要有中文和空格)

3. 执行service.bat install,注意:中间是空格,没有中横线。 服务即安装完成。

4.进入tomcat的bin目录下,双击tomcat5w.exe

5. 在弹出的管理介面中,点击java页签,查看:

a:Java Virtual Machine一栏是否已经记录了java虚拟机的路径(即jvm.dll路径),如果没有,请点击右侧选择按钮,找到jdk路径下\jre\bin\server\jvm.dll

b:Java Classpath一栏是否已经记录了类路径,包括两方面:一个是tomcat自己的启动包,应该指向tomcat下的bin\ bootstrap.jar,第二个是jdk的工具包,指向的是jdk安装路径下的\lib\tools.jar,如果这两个路径没有或不完整,请按照 tomcat和jdk的实际安装路径填写完整。否则tomcat服务不能成功启动。

说明:以上参数如果jdk提前已经正确安装,就会一切正常。

6. 在Windows的服务管理和tomcat5w.exe两个地方都可以停止和启动tomcat服务

7. 如果要卸载tomcat服务,请打开DOS命令窗口,进入tomcat的bin路径下(tomcat的路径不要有中文和空格),执行service.bat remove,注意:中间是空格,没有中横线。 服务即卸载完成。

Q:如何在在solaris9上升级j2sdk1.4.2

A: 1.安装文档在:/j2se/1.4.2/install-solaris.html

2. 注意要安装solaris的sdk的专门补丁包,在/pub-

cgi/show.pl?target=patches/J2SE下载补丁.

3. 安装补丁: unzip J2SE_Solaris_9_Recommended.zip到/var/sadm/patch

4.运行:./install_cluster

5.zcat j2sdk-1_4_2_08-solaris-sparc.tar.Z|tar -xf -

6.去掉j2sdk1.3: pkgrm SUNWj3dmo SUNWj3man SUNWj3dev SUNWj3rt

7.pkgadd -d . SUNWj3cfg SUNWj3dev SUNWj3dmo SUNWj3jmp SUNWj3man SUNWj3rt

8. 注意,在装64位jdk之前一定要先安装32位的.

Q:tomcat启动时报某个目录没有权限,启动失败,或者不能执行某些jsp页

A:tomcat需要tomcat用户具有一些目录和文件的相应权限, 所有目录应该具有读写执行(浏览)的权限,jsp,class文件应该最少具有读权限, 一些文件需要写权限,下面是已知的需要读写权限文件的列表:

$CATALINA_HOME/logs下所有文件

$CATALINA_HOME/work下所有文件

$CATALINA_HOME/publish/main/count.txt文件

$CATALINA_HOME/publish/chatroom/resource下的所有.xml文件

所有上传图片目录都需要写权限。

改变文件目录权限的方法:执行下面命令,设置所有的tomcat安装下的文件和目录,可以保证执行,但是不是很安全。

1. 设置tomcat上级目录/opt所有用户都有读写执行权限:

chmod 777 [tomcat的上级目录]

2. 设置tomcat5.0.28目录下的所有文件的属主为tomcat:

chown -R tomcat [tomcat安装目录]

3. 设置所有tomcat5.0.28下的所有文件和目录的属主(tomcat)具有读写执行权限

chmod 700 -R /opt/tomcat5.0.28

Q:执行startup.sh文件时告诉没有权限不能执行,但这个文件的署主就是当前用户

A: bin目录下的所有.sh文件都应该设置执行权限,命令为:

chmod 777 [文件名称]

Q:执行startup.sh文件后告诉地址已经使用,导致tomcat不能启动

A: 可能是前一次执行./shutdown.sh文件关闭tomcat时没有停止已经启动的java进程,而这个进程仍然在监听tomcat所使用的端口,或者有另外一个tomcat正在运行,server.xml文件中的监听端口和当前tomcat冲突。使用下面命令查看当前系统是否有正在监听的端口(8080--webcache, 90--www或http).

1. 列出所有系统正在监听的端口和绑定的地址netstat -l

2. 找出当前系统中的所有进程,管道符号过滤输出显示包含java字符串的行

ps -A |grep java 1021 ? java kill [进程号] kill -9 [进程号] tty time proc 3. 结束一个指定的进程: 4. 强制杀死一个进程:

如果确定不是别的tomcat运行导致的冲突或者没有java进程运行可以再次运行startup.sh文件启动tomcat

Q:如何将linux的8080端口映射到80端口

A: 首先要已root用户登录linux系统,然后执行如下命令:

1. 编辑映射策略:

/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 80:80 --to-ports 8080

2. 保存设置:

/sbin/service iptables save

Q:Linux下调整VCM系统运行参数之(一)如何调整tomcat的数据库连接参数

A: 方法如下:

1. 编辑tomcat安装目录下的conf目录下的server.xml文件

vi server.xml

2. 查找到tomcat数据库用户名称参数一行:/username

将 username vcmtest一段的value值更改数据库的有效帐户

3.查找到tomcat数据库用户名称参数一行:/password

将 password vcmtest一段的password值更改数据库的登录口令

4.查找到tomcat数据库用户名称参数一行:/url

将 username vcmtest一段的value值更改数据库的有效帐户

Q:Linux下调整VCM系统运行参数之(二)如何调整tomcat的占用内存

A: 方法如下:

1. 编辑tomcat安装目录下的bin目录下的catalina.sh文件

vi catalina.sh

2. 查找到tomcat内存参数一行:/ JAVA_OPTS

3. 将JAVA_OPTS="-Xms 1024m –Xmx 1520m"一行的两个参数依据服务器实际内存数量分别进行更改:

- Xms为tomcat启动初始内存,一般为服务器开机后可用空闲内存减去100兆 - Xmx为tomcat最大占用内存,一般为服务器开机后可用空闲内存减去50兆

说明:以上两个参数关系到tomcat承受的访问性能,但也要根据服务器实际内存情况设定。

Q:Linux下调整VCM系统运行参数之(三)如何调整tomcat的线程参数

A: 方法如下:

1.编辑tomcat安装目录下的conf目录下的server.xml文件

vi server.xml

2. 查找到tomcat内存参数一段:/ maxThreads

3. 将maxThreads="450" minSpareThreads="100" maxSpareThreads="300"一段的三个参数依据服务器实际内存数量分别进行更改:

maxThreads为tomcat最大线程数,一般可设置为400~800

minSpareThreads为tomcat最小共享线程数,一般可设置为100

maxSpareThreads为tomcat最大共享线程数,一般可设置为最大线程数减去50

Q:启动服务器后无异常抛出,但无法打开网页:

A:检查linux线程($ps -A)是否有未关闭的java进程。

Q:servlet方法实现中,doPost方法中界面传值中文为乱码

A:在代码中存取第一个参数之前添加代码:

response.setContentType("text/html; charset=gbk");

request.setCharacterEncoding("GBK");

Q:servlet方法实现中,doGet方法中界面传值中文为乱码

A:tomcat目录下conf下,server.xml文件

找到<connecter port="8080" protocol=“HTTP/1.1” connectionTimeout="20000" redirectPort="8443"/>改为:<connecter port="8080" protocol=“HTTP/1.1” connectionTimeout="20000" redirectPort="8443" URIEncoding="GB

Q: Tomcat 的启动窗口一闪而过,根本就看不出启动过程中发生了什么错误。

A: 这中间的原因有好多种,最常见的解决办法就是使用run 命令,打开startup.bat 文件,找到下面这行:

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

并将它修改为:

call "%EXECUTABLE%" run %CMD_LINE_ARGS%

这样, Tomcat 启动时就不会弹出新窗口,我们就可以从容不迫地观察Tomcat 的启动错误,并解决问题


第二篇:jsp常见错误代码 tomcat报错解析 jsp和servlet区别


Jsp tomcat常见错误代码

1**:请求收到,继续处理

2**:操作成功收到,分析、接受

3**:完成此请求必须进一步处理

4**:请求包含一个错误语法或不能完成

5**:服务器执行一个完全有效请求失败

IIS状态代码的含义

概要

当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码。该状态代码记录在IIS日志中,同时也可能在Web浏览器或FTP客户端显示。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。

更多信息

日志文件的位置

在默认状态下,IIS把它的日志文件放在%WINDIR\System32\Logfiles文件夹中。每个万维网(WWW)站点和FTP站点在该目录下都有一个单独的目录。在默认状态下,每天都会在这些目录下创建日志文件,并用日期给日志文件命名(例如,exYYMMDD.log)。

HTTP

1xx-信息提示

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。

100-继续。

101-切换协议。

2xx-成功

这类状态代码表明服务器成功地接受了客户端请求。

200-确定。客户端请求已成功。

201-已创建。

202-已接受。

203-非权威性信息。

204-无内容。

205-重置内容。

206-部分内容。

3xx-重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

301-对象已永久移走,即永久重定向。

302-对象已临时移动。

304-未修改。

307-临时重定向。

4xx-客户端错误

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份

验证信息。400-错误的请求。

401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示:

401.1-登录失败。

401.2-服务器配置导致登录失败。

401.3-由于ACL对资源的限制而未获得授权。

401.4-筛选器授权失败。

401.5-ISAPI/CGI应用程序授权失败。

401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。 403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因: 403.1-执行访问被禁止。

403.2-读访问被禁止。

403.3-写访问被禁止。

403.4-要求SSL。

403.5-要求SSL128。

403.6-IP地址被拒绝。

403.7-要求客户端证书。

403.8-站点访问被拒绝。

403.9-用户数过多。

403.10-配置无效。

403.11-密码更改。

403.12-拒绝访问映射表。

403.13-客户端证书被吊销。

403.14-拒绝目录列表。

403.15-超出客户端访问许可。

403.16-客户端证书不受信任或无效。

403.17-客户端证书已过期或尚未生效。

403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。 403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。 403.20-Passport登录失败。这个错误代码为IIS6.0所专用。

404-未找到。

404.0-(无)–没有找到文件或目录。

404.1-无法在所请求的端口上访问Web站点。

404.2-Web服务扩展锁定策略阻止本请求。

404.3-MIME映射策略阻止本请求。

405-用来访问本页面的HTTP谓词不被允许(方法不被允许)

406-客户端浏览器不接受所请求页面的MIME类型。

407-要求进行代理身份验证。

412-前提条件失败。

413–请求实体太大。

414-请求URI太长。

415–不支持的媒体类型。

416–所请求的范围无法满足。

417–执行失败。

423–锁定的错误。

5xx-服务器错误

服务器由于遇到错误而不能完成该请求。

500-内部服务器错误。

500.12-应用程序正忙于在Web服务器上重新启动。

500.13-Web服务器太忙。

500.15-不允许直接请求Global.asa。

500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。

500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。

500.100-内部ASP错误。

501-页眉值指定了未实现的配置。

502-Web服务器用作网关或代理服务器时收到了无效响应。

502.1-CGI应用程序超时。

502.2-CGI应用程序出错。application.

503-服务不可用。这个错误代码为IIS6.0所专用。

504-网关超时。

505-HTTP版本不受支持。

FTP

1xx-肯定的初步答复

这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。

110重新启动标记答复。

120服务已就绪,在nnn分钟后开始。

125数据连接已打开,正在开始传输。

150文件状态正常,准备打开数据连接。

2xx-肯定的完成答复

一项操作已经成功完成。客户端可以执行新命令。200命令确定。

202未执行命令,站点上的命令过多。

211系统状态,或系统帮助答复。

212目录状态。

213文件状态。

214帮助消息。

215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 220服务就绪,可以执行新用户的请求。

221服务关闭控制连接。如果适当,请注销。

225数据连接打开,没有进行中的传输。

226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。

227进入被动模式(h1,h2,h3,h4,p1,p2)。

230用户已登录,继续进行。

250请求的文件操作正确,已完成。

257已创建“PATHNAME”。

3xx-肯定的中间答复

该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331用户名正确,需要密码。

332需要登录帐户。

350请求的文件操作正在等待进一步的信息。

4xx-瞬态否定的完成答复

该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。

425无法打开数据连接。

426Connectionclosed;transferaborted.

450未执行请求的文件操作。文件不可用(例如,文件繁忙)。

451请求的操作异常终止:正在处理本地错误。

452未执行请求的操作。系统存储空间不够。

5xx-永久性否定的完成答复

该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。

501在参数中有语法错误。

502未执行命令。

503错误的命令序列。

504未执行该参数的命令。

530未登录。

532存储文件需要帐户。

550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。

551请求的操作异常终止:未知的页面类型。

552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。

553未执行请求的操作。不允许的文件名。

常见的FTP状态代码及其原因

150-FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。

226-命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。

230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。

331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。

426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。

530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。

550-命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。

JSP和SERVLET区别

JSP和SERVLET到底在应用上有什么区别,很多人搞不清楚。我来胡扯几句吧。简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。

后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。

从网络三层结构的角度看,一个网络项目最少分三层:data layer,business layer, presentation layer。当然也可以更复杂。SERVLET用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business layer混在一起。就象前面那个朋友,把数据库处理信息放到JSP中,其实,它应该放在business layer中。

根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的东东,也就是说,只放输出HTML网页的部份。而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。 实际上,微软前不久推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,实现整合。

为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。

另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。

综上所述,SERVLET是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。

所以,推出JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。 可是,这不是说,学了SERVLET没用,实际上,你还是应该从SERVLET入门,再上JSP,再上JSP+BEAN。

强调的是:学了JSP,不会用JAVA BEAN并进行整合,等于没学。大家多花点力气在JSP+BEAN上。

在补充几句:

我们可以看到,当ASP+COM和JSP+BEAN都采用组件技术后,所有的组件都是先进行编译,并驻留内存,然后快速执行。所以,大家经常吹的SERVLET/JSP先编译驻内存后执行的速度优势就没有了。

反之,ASP+COM+IIS+NT紧密整合,应该会有较大的速度优势呈现。而且,ASP+COM+IIS+NT开发效率非常高,虽然BUG很多。

那么,为什么还用JSP+BEAN?因为JAVA实在前途远大。微软分拆后,操作系统将群雄并起,应用软件的开发商必定要找一个通用开发语言进行开发,JAVA一统天下的时机就到了。如果微软分拆顺利,从中分出的应用软件公司将成为JAVA的新领导者。目前的JAVA大头

SUN和IBM都死气沉沉,令人失望。希望新公司能注入新活力。不过,新公司很有可能和旧SUN展开JAVA标准大战,双方各自制定标准,影响JAVA夸平台。

另外,现在的机器速度越来越快,JAVA的速度劣势很快就可以被克服。

什么是Servlet?

一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。

javax.servlet和javax.servlet.http包为编写servlet提供了接口和类。所有的servlet都必须实现Servlet接口,该接口定义了生命周期方法。

Servlet的生命周期

一个servlet的生命周期由部署servlet的容器来控制。当一个请求映射到一个servlet时,该容器执行下列步骤。

1. 如果一个servlet的实例并不存在,Web容器

a. 加载servlet类。

b. 创建一个servlet类的实例。

c. 调用init初始化servlet实例。该初始化过程将在初始化servlet中讲述。

2. 调用service方法,传递一个请求和响应对象。服务方法将在编写服务方法中讲述。

如果该容器要移除这个servlet,可调用servlet的destroy方法来结束该servlet。结束过程将在结束Serlvet中讨论。

Servlet运行时的基本原理

1)、当WEB客户请求Servlet服务或当WEB服务启动时,容器环境加载一个Java Servlet类。

2)、容器环境也将根据客房请求创建一个Servlet对象实例,或者创建多个Servlet对象实例,并把这些实例加入到Servlet实例池中。

3)、容器环境调用Servlet的初始化方法HttpServlet.init()进行Servlet实例化。在调用初始化时,要给init()方法传入一个ServletConfig对象,ServletConfig对象包含了初始化参数和容环境的信息,并负责向servlet传递信息,如果传递失败,则会发生ServletException。Servlet将不能正常工作。

4)、容器环境利用一个HttpServletRequest和HttpServletResponse对象,封装从Web客户接收到的HTTP请求和由Servlet生成的响应。

5)、容器环境把HttpServletRequest和HttpServletResponse对象传递给HttpServlet.Service()

方法。这样,一个定制的Java Servlet就可以访问这种HTTP请求和响应接口。Servlet()方法可被多次调用,各调用过程运行在不同的线程中,互不干扰。

6)、定制的Java Servlet从HttpServletRequest对象读取HTTP请求数据,访问来自HttpSession或Cookie对象的状态信息,进行特定应用的处理,并且用HttpServletResponse对象生成HTTP响应数据。

7)、当WEB服务器和容器关闭时,会自动调用HttpServlet.destroy()方法关闭任何打开的资源,并进行一些关闭前的处理。

servlet 的生命周期。

Servlet 运行在 Servlet 容器中,其生命周期由容器来管理。 Servlet 的生命周期通过 Servlet 接口中 init ()、 service ()、 destroy ()方法来表示。

Servlet 的生命周期包含了下面 4 个阶段。

(1) 加载和实例化

Servlet 容器负责加载和实例化 Servlet 。当 Servlet 容器启动时,或者在容器检查到需要这个 Servlet 来响应一个请求时,创建 Servlet 实例。当 Servlet 容器启动后,它必须要知道所需的 Servlet 类在什么位置, Servlet 容器可以从本地文件系统、远程文件系统或者其他网络服务器中通过类加载器加载 Servlet 类,成功加载后,容器创建 Servlet 实例。因为容器是通过 Java 的反射 API 来创建 Servlet 实例,调用的是 Servlet 的默认构造函数,也就是那个不带参数的构造函数,所以我们在编写 Servlet 类的时候,不应该提供带参数的构造函数。——这也就是为什么 Servlet 类可以不写构造函数的原因。

(2) 初始化

在 Servlet 实例化之后,容器必须调用 Servlet 的 init ()方法初始化这个对象。初始化的目的是为了让 Servlet 对象在处理客户请求前完成一些初始化工作,如建立数据库连接,获取配置信息等。对于每一个 Servlet 实例, init ()方法只能被调用一次。在初始化期间, Servlet 实例可以使用容器为它准备的 ServletConfit 对象从 web 应用程序的配置信息(在 web.xml 中配置)中获取初始化的参数信息。在初始化期间,如果发生错误, Servlet 实例可以抛出异常来通知容器。

(3) 请求处理

Servlet 容器调用 Servlet 的 service ()方法对请求进行处理。要注意的是,在 service ()方法调用之前, init ()方法必须成功执行。在 service ()方法中, servlet 实例通过 ServletRequest 对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用 servletResponse 对象的方法设置响应信息。

(4) 服务终止

当容器检测在一个 Servlet 实例应该从服务中被移除的时候,容器就会调用实例的 destroy

()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用 Servlet 实例的 destroy ()方法。在调用 destroy ()方法后,容器会释放这个 Servlet 实例,该实例随后会被 java 的垃圾收集器回收。

在整个 Servlet 的生命周期过程中,创建 Servlet 实例、调用实例的 init ()和 destroy ()方法都只进行一次,当初始化完成后, Servlet 容器会将该实例保存在内存中,通过调用它的 service ()方法,为接收到的请求服务。

更多相关推荐:
Tomcat去除端口号和项目名

在一个项目结束的时候往往根据需要直接映射到一个IP地址上此时就需要去除端口和项目名了在访问的时候下面根据具体的例子提供一种实现方法1在进入TOMCATHOME创建文件夹将其命名为webdb此处为webdb根据需...

关于tomcat启动端口号被占用问题解决

有时候把在myeclpise项目部署到tomcat中的时候会莫名其妙的发现tomcat启动不了换成是myeclpise自带的tomcat启动还是无法成功启动看看控制台显示的错误信息有时候会看到javanetBi...

Tomcat 部署网站 去掉端口号和项目名称

一在一个项目结束的时候往往根据需要直接映射到一个IP地址上此时就需要去除端口和项目名了在访问的时候下面根据具体的例子提供一种实现方法1在进入TOMCATHOME创建文件夹将其命名为webdb此处为webdb根据...

Tomcat的安装与配置和Tomcat端口的配置

前沿1如果之前安装了Oreacla在使用tomcat是会出现8080端口被占用的情况发生解决的方法就是对tomcat的端口进行配置安装tomcat注意两个系统环境变量的配置JAVAHOMECATALINAHOM...

tomcat 8080端口被占用解决方法

tomcat因端口占用无法启动解决方法20xx0322223711分类技术分享标签tomcat端口占用解决方法8080jsp字号大中小订阅嗯嗯记录一下这个问题吧应该很多人会遇到其实端口占用问题不仅是tomcat...

tomcat端口解决办法

lt一gt首先是JDK环境变量配置在Windows系统中1右击我的电脑gt属性gt高级gt环境变量gt系统变量2新建建立javahome变量值CProgramFilesJavajdk160016JDK安装目录3...

Tomcat 修改默认端口 以及Tomcat设置虚拟目录

Tomcat修改默认端口以及Tomcat设置虚拟目录个人操作所获经验例虚拟目录改为Djsproot1建立Djsproot将tomcat下的webappsROOT目录下WEBINF文件复制到Djsproot中里面...

Tomcat基本配置

Tomcat基本配置1一简介tomcat是jakarta项目中的一个重要的子项目其被JavaWorld杂志的编辑选为20xx年度最具创新的java产品MostInnovativeJavaProduct同时它又是...

IIS6.0+tomcat6.0+JK整合(8080端口和80端口共用jsp网站)

经过这么久IIS和tomcat整合实践积累了部分经验从一开始整合项目需要放到tomcat的webapps下面而且必须需要tomcat里面ROOT的indexhtml的跳转到现在的可以把项目放在服务器的任何地方上...

iis8 tomcat6共用80端口

1下载dll文件isapiredirectdll我使用的是1228版本的2在tomcat目录下新建文件夹IIS可以在别的地放建也可以3IIS文件夹内放置文件如下isapiredirectdllisapiredi...

tomcat 日志 端口 域名 支持的文件格式配置

Tomcat的配置1Tomcat日志信息分为两类一是运行中的日志它主要记录运行的一些信息尤其是一些异常错误日志信息11问题tomcat每次启动时自动在logs目录下生产以下日志文件且每天都会生成对应日期的一个文...

一个tomcat部署多个项目并通过不同的端口访问

一个tomcat部署多个项目并通过不同的端口访问第一步修改TOMCATHOMEconfserverxml文件复制Service节点去掉ltConnectorportquot8009quot这个节点新增Servi...

tomcat端口号(41篇)