服务器:
服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),也可以指代用于部署网站的应用。我们这里说的服务器,其实是web服务器,或者应用服务器。它本质就是一个软件,一个应用,通过软硬件的结合从而达到发布应用(工程)的作用,让用户可以通过浏览器访问我们的应用。
常见的应用服务器,请看下表:
- 重量级:重量级服务器实现了所有的JavaEE规范
- 轻量级:轻量级服务器实现了部分JavaEE规范
服务器名称 | 说明 |
---|---|
weblogic | 实现了javaEE规范,重量级服务器,又称为javaEE容器 |
websphereAS | 实现了javaEE规范,重量级服务器。 |
JBOSSAS | 实现了JavaEE规范,重量级服务器。免费的。 |
Tomcat | 实现了jsp/servlet规范,是一个轻量级服务器,开源免费。 |
Tomcat:
Tomcat是Apache软件基金会的一个核心项目,由Apache、Sun和其它公司共同开发而成的。由于有了Sun公司的参与支持,最新的Servlet、JSP规范总是能在Tomcat中得到体提现,因为Tomcat技术先进、性能稳定,而且免费,所以深受Java爱好者并得到了部分软件开发商的认可,已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一。
Tomcat各版本的技术支持:
Servlet Spec | JSP Spec | EL Spec | WebSocket Spec | Authentication (JASIC) Spec | Apache Tomcat Version | Latest Released Version | Supported Java Versions |
---|---|---|---|---|---|---|---|
6.0 | 3.1 | 5.0 | TBD | TBD | 10.1.x | 10.1.0-M6 (alpha) | 11 and later |
5.0 | 3.0 | 4.0 | 2.0 | 2.0 | 10.0.x | 10.0.12 | 8 and later |
4.0 | 2.3 | 3.0 | 1.1 | 1.1 | 9.0.x | 9.0.54 | 8 and later |
3.1 | 2.3 | 3.0 | 1.1 | 1.1 | 8.5.x | 8.5.72 | 7 and later |
3.1 | 2.3 | 3.0 | 1.1 | N/A | 8.0.x (superseded) | 8.0.53 (superseded) | 7 and later |
3.0 | 2.2 | 2.2 | 1.1 | N/A | 7.0.x (archived) | 7.0.109 (archived) | 6 and later(7 and later for WebSocket) |
2.5 | 2.1 | 2.1 | N/A | N/A | 6.0.x (archived) | 6.0.53 (archived) | 5 and later |
2.4 | 2.0 | N/A | N/A | N/A | 5.5.x (archived) | 5.5.36 (archived) | 1.4 and later |
2.3 | 1.2 | N/A | N/A | N/A | 4.1.x (archived) | 4.1.40 (archived) | 1.3 and later |
2.2 | 1.1 | N/A | N/A | N/A | 3.3.x (archived) | 3.3.2 (archived) | 1.1 and later |
Mac版本下载:
下载地址:http://tomcat.apache.org/
启动Tomcat:
- 下载好了解压到指定路径,并进到bin目录下
- 打开终端,把bin目录拖到cd后面
启动:
- Windows启动:
startup.bat Windows
- Linux/Mac启动:
./startup.sh
停止:
- Windows停止:
shutdown.bat Windows
- Linux/Mac停止:
./shutdown.sh
# cd后面是你的tomcat路径
cd /Users/itzhuzhu/Desktop/Java/plug/apache-tomcat-10.0.2/bin# 启动tomcat
./startup.sh# 关闭Tomcat
./shutdown.sh
访问http://localhost:8080/可以看到这样的就说明启动了
自己部署项目的话就放在在webapps目录下浏览器访问对应的路径就可以了
为什么需要写8080才可以访问
- 正常情况下访问一个网站都是只要输入域名就可以了,但是Tomcat提供的是http服务,而http的端口默认是80,所以为了和http的端口贴近,就默认是8080了,而且在Linux里不是root用户的话是不能使用1024以内的端口号的
Linux版本下载与安装:
- 下载Tomcat,和Mac版一样,用tar.gz的上传到Linux
- 在crt上 使用 alt+p,将windows上的软件拖进去即可(root目录)
- 找个地方新建一个tomcat文件夹
mkdir tomcat
- 移动 tomcat…tar.gz 到 /usr/local/tomcat
mv apache-tomcat-8.5.32.tar.gz /usr/local/tomcat/
- 进入/usr/local/tomcat目录,解压Tomcat
cd /usr/local/tomcat tar -xvf apache-tomcat-8.5.32.tar.gz
- 进入 /usr/local/tomcat/apache-tomcat-8.5.32/bin
cd /usr/local/tomcat/apache-tomcat-8.5.32/bin
- 启动tomcat
./startup.sh
- 修改防火墙的规规则
# 放行8080 端口,修改配置文件
cd /etc/sysconfig
vi iptables
# 复制(yy , p) -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# 改成
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
# 重启加载防火墙或者重启防火墙
service iptables reload
# 或者
service iptables restart
Tomcat目录结构:
Tomcat异常:
启动问题:
- 启动一闪而过
- 原因:没有配置环境变量。
解决办法:
配置上JAVA_HOME环境变量
- Address already in use : JVM_Bind
- 原因:端口被占用
解决办法:
修改conf文件下的server.xml配置文件修改端口号,(修改69行的port=”8080″)修改完再启动
- 启动产生很多异常,但能正常启动
- 原因:Tomcat中部署着很多项目,每次启动这些项目都会启动。而这些项目中有启动报异常的。
解决办法:
- 找到报异常的项目,就把它从发布目录中移除。
- 不能确定报异常的项目,就重新解压一个新的Tomcat。
- 启动乱码
- 原因:可能和你的控制台的字符集不匹配
解决办法:
- 打开conf下的logging.properties的配置文件,47行的UTF-8改成GBK,或者GBK改成UTF-8
IDEA集成Tomcat:
新建项目就可以使用Tomcat了
创建完是这样的
URL:自己随便写,把下面两个改为更新和资源便于后续更新时不需要重启服务器
都配置完毕,就可以启动Tomcat了
Tomcat报错:java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
报错内容如下,
类型 异常报告消息 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常描述 服务器遇到一个意外的情况,阻止它完成请求。例外情况jakarta.servlet.ServletException: 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:354)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:863)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1682)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:834)
根本原因。java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletjava.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)java.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)java.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:354)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:863)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1682)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:834)
根本原因。java.lang.ClassNotFoundException: javax.servlet.http.HttpServletorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1445)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)java.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)java.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)java.base/java.lang.ClassLoader.defineClass1(Native Method)java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2499)org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:873)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1409)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:354)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:863)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1682)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:834)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看
解决:
1、更换Tomcat版本,我是10版本换成了9就没问题了,不知道为什么。
2、网上说要加依赖,这个没试,
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>
Tomcat部署项目找不到war包:
在我们启动项目时发现tomcat配置里找不到war包,这个时候启动就会有问题。把下面的操作跟着做一遍即可。
1、首先找到项目结构
2、找到工件,点击添加
3、在工件中添加web应用程序,选择基于模块
然后会弹出弹框,点击确定
4、这个时候的配置如图所示,点击确定即可
5、回到Tomat配置文件中,点击添加工件就会出现war包了
点击确定,到这里就配置好了
JavaWeb应用目录结构详解
Tomcat创建好以后会自动创建几个目录
src
:存放源代码的web
:存在项目相关资源的(html、css、js、jsp、图片等)WEB-INF
:存放相关配置的(web.xml等),如果有web.xml或者.class文件时,该目录必须存在,且严格区分大小写。该目录下的资源,客户端是无法直接访问的。目录中内容如下:classes
:web应用的class文件(加载顺序:我们的class,lib目录中的jar包,tomcat的lib目录中的jar包。优先级依次降低)lib
:web应用所需的jar包(tomcat的lib目录下jar为所有应用共享)web.xml
:web应用的主配置文件
Tomcat启动报错:java.net.BindException
报错内容:没复制完,当时还有别的内容,反正一般起不来基本都是端口冲突的问题,改端口或者kill就行了。有时候是因为刚安装Tomcat然后启动访问8080测试,当时忘记关闭,然后又去IDEA集成Tomcat,就会遇到冲突的问题。
org.apache.catalina.LifecycleException: 协议处理程序初始化失败 at org.apache.catalina.connector.Connector.initInternal(Connector.java:1059) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:556) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1012) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.startup.Catalina.load(Catalina.java:747) at org.apache.catalina.startup.Catalina.load(Catalina.java:769) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
Tomcat更改端口号:
Tomcat服务器主配置文件中配置着访问端口,它在配置文件中写的值是:8080。但是它不是Tomcat的默认端口。我们此处说的默认端口是,当使用默认值的时候,端口号可以省略。Tomcat的默认端口是80。
通过在主配置文件中添加标签实现,在conf的目录下有一个server.xml的配置文件,如果想改端口号就找到这个
<!-- 改成80端口号的话就不需要输入localhost:8080了,只需要输入localhost就可以发布正式项目的时候都是需要改为80端口号的
--><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
Tomcat配置虚拟目录:
作用:可以发布任意目录下的项目
- 通过在主配置文件中添加标签实现。
在server.xml的元素中加一个元素。
path:访问资源虚拟目录名称 。URL名称可以随便起,但是必须在前面加上一个/
docBase:项目真实存在的路径。
<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 配置了这个就可以发布指定路径下的项目,但是一般还是都放在webapps下 --><Context path=”” docBase=”/Users/itzhuzhu/Desktop/Java”/></Host>
- 通过写一个独立配置文件实现。
写一个独立的xml文件,该文件名可以随便起。在文件内写一个元素。该文件要放在Tomcat目录中的conf\Catalina\localhost\目录下。需要注意的是,在使用了独立的配置文件之后,访问资源URI就变成了/+文件的名称。而Context的path属性就失效了
Tomcat编辑虚拟主机:
编辑server.xml配置文件,找到在<Engine>
元素在元素中添加一个
<!-- 会在localhost访问的时候,会到webapps下找到webdemo这个项目 --><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"Context path ="" docBase="webdemo"></Host>
其中:
- name:指定主机的名称
- appBase:当前主机的应用发布目录
- unparkWARs:true启动时是否自动解压war包
- autoDeploy:是否自动发布
- docBase:项目的名称
改完server.xml后还要修改电脑的hosts文件,加上host中name的值,如果是配置域名的话就把name的值改为域名地址,然后下面绑定域名就可以了
127.0.0.1 localhost
Tomcat Server处理一个http请求的过程:
假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp
-
请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
-
Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
-
Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
-
Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
-
localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
-
Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
-
path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
-
Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
-
构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
-
Context把执行完了之后的HttpServletResponse对象返回给Host
-
Host把HttpServletResponse对象返回给Engine
-
Engine把HttpServletResponse对象返回给Connector
-
Connector把HttpServletResponse对象返回给客户browser
startup.bat详解:
if "%OS%" == "Windows_NT" setlocal //判断当前系统是否是window系统rem --------------------------------------------------------------------------- //rem 是注释(下同)rem Start script for the CATALINA Serverremrem $Id: startup.bat 302918 2004-05-27 18:25:11Z yoavs $rem ---------------------------------------------------------------------------rem Guess CATALINA_HOME if not definedset CURRENT_DIR=%cd% //设置当前目录if not "%CATALINA_HOME%" == "" gotogotHome //如果设置了CATALINA_HOME环境变量 ,就直接到下面的gotHome处set CATALINA_HOME=%CURRENT_DIR% //如果没有设置CATALINA_HOME,就设置CATALINA_HOME为当前目录(其实这里她假设你进入tomcat的安装目录)if exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome//判断一下catalina.bat是否找到了,找到了就直接到下面的gotHome处cd .. //这里他是假设你开始已经进入到了tomcat的bin目录,所以就退到上一级目录set CATALINA_HOME=%cd%//现在再设置CATALINA_HOME为tomcat的安装目录cd %CURRENT_DIR% //这里是进入dos的当前目录:gotHomeif exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome //再次判断catalina.bat是否找到了,找到了就直接到下面的okHome处,没有的话,就只能提示你啦!echo The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHomeset EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat //设置要执行的文件rem Check that target executable existsif exist "%EXECUTABLE%" gotookExec //再次判断catalina.bat是否找到了,找到了就直接到下面的okExec处,没有的话,就提示。echo Cannot find %EXECUTABLE%echo This file is needed to run this programgoto end:okExecrem Get remaining unshifted command line arguments and save them in theset CMD_LINE_ARGS= //这里是设置参数:setArgsif ""%1""=="""" gotodoneSetArgs //判断参数是否加入完成set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 //将参数组成一行,接在后面shiftgotosetArgs:doneSetArgscall "%EXECUTABLE%" start %CMD_LINE_ARGS% //执行catalina.bat,最好将这行改为:echo "%EXECUTABLE%" start %CMD_LINE_ARGS% 以便阅读、理解本文件的作用:end//这个批处理文件,主要是正确的找到catalina.bat,并且执行。当把tomcat解压到一个地方时,通常是设置一个CATALINA_HOME的环境变量,执行这个文件时,就很容易找到 catalina.bat
如果没有设置CATALINA_HOME的环境变量,那么你需要在dos中进入tomcat的安装目录,或者bin...子目录,再执行这个文件,如果在其他目录,将会出现提示找不到文件。修改startup.bat,使其不依赖JAVA_HOM和CATALINA_HOME变量的方法:SET JAVA_HOME=JDK目录
SET CATALINA_HOME=解压后Tomcat的目录例如:set JAVA_HOME=D:\Program Files\java\jdk1.6.0_21set CATALINA_HOME=D:\Program Files\apache-tomcat-6.0.29
web.xml详解:
<web-app>
<display-name></display-name>定义了WEB应用的名字 <description></description> 声明WEB应用的描述信息 <context-param></context-param> context-param元素声明应用范围内的初始化参数。 <filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。 <listener></listener>servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知.Listener元素指出事件监听程序类。 <servlet></servlet> 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。 <servlet-mapping></servlet-mapping> 服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName。 但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。 <session-config></session-config> 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。 可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。 <mime-mapping></mime-mapping>如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。<welcome-file-list></welcome-file-list> 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。 <error-page></error-page> 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。 <taglib></taglib> 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。 <resource-env-ref></resource-env-ref>声明与资源相关的一个管理对象。 <resource-ref></resource-ref> 声明一个资源工厂使用的外部资源。<security-constraint></security-constraint> 制定应该保护的URL。它与login-config元素联合使用 <login-config></login-config> 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。 <security-role></security-role>给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。 <env-entry></env-entry>声明Web应用的环境项。 <ejb-ref></ejb-ref>声明一个EJB的主目录的引用。 < ejb-local-ref></ ejb-local-ref>声明一个EJB的本地主目录的应用。 </web-app>