一.web环境搭建
1.1. Web服务器
(1) Web服务器主要用来接收客户端发送的请求和响应客户端请求。
(2) 作为JavaWeb程序来说,还需要有Servlet容器,容器的主要作用就是调用java程序处理用户发送的请求,并响应指定的资源,关于Servlet容器我们还需要一点一点学习。
(3) 开发JavaWeb项目Web服务器和Servlet容器是必须的,通常情况二者是合在一起的。
(4) 常见的JavaWeb服务器:
- Tomcat(Apache):当前应用最广的JavaWeb服务器;
- JBoss(Redhat红帽):支持JavaEE,应用比较广;
- GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广;
- Resin(Caucho):支持JavaEE,应用越来越广;
- Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
- Websphere(IBM):要钱的!支持JavaEE,适合大型项目;
1.2. Tomcat
1.2.1 Tomcat概述
(1). Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是9.0。
Tomcat服务器是一个免费的开源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
JSP全称Java Server Pages称为java服务器页面,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
(2) Tomcat6.0 支持Servlet 2.5
(3) Tomcat7.0 支持Servlet3.0
(4) Tomcat8.0 支持Servlet 3.1
1.2.2 安装、启动、配置Tomcat
1.2.2.1 下载
(1) Tomcat官方网站:http://tomcat.apache.org/
(2) 安装版:需要安装,一般不考虑使用。一个电脑只能安装一个!卸载也比较麻烦!
(3) 解压版: 直接解压缩使用,我们使用的版本。
(4) 版本:目前Tomcat的最新版本为8.0。我们使用的是7.0版本。
1.2.2.2 安装
(1) 直接把Tomcat的压缩包解压到安装目录,例如:D:\tomcat-7。卸载时删除这个文件夹即可。
(2) D:\tomcat-7,这个目录下直接包含Tomcat的bin目录,conf目录等,我们称之为Tomcat的安装目录或根目录。
卸载:删除目录就行了
1.2.2.3启动和停止
环境变量的配置:
① JAVA_HOME:jdk的安装目录,**Tomcat依赖于JDK,所以必须指定该环境变量。**Tomcat只需要这一个环节变量
② CATALINA_HOME:tomcat的安装目录,在终端(CMD)启用时,需要配置,不必须。
③PATH:安装jdk的bin目录,%JAVA_HOME%\bin
④启动:在Tomcat安装目录下的bin目录,双击startup.bat
⑤停止:在Tomcat安装目录下的bin目录,双击shutdown.bat或 ctrl+c
在windows和linux下都是差不多的,先配置好java的环境变量,然后解压到某个目录即可
问题解决
注意: startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。如果JAVA_HOME配置不正确,就会导致startup.bat一闪而过!
问题1:如果双击startup.bat后窗口一闪而过,请查看JAVA_HOME是否配置正确。不要一下全在path里写
问题2:启动报错。看日志报错修改,可能是端口冲突的问题。
netstat -ano查看端口,最后一列是pid,在任务管理器里面查看进程。点进程,查看中勾选 pid才显示pid
- 暴力:找到占用的端口号,并且找到对应的进程,杀死该进程
netstat -ano
- 温柔:修改自身的端口号,修改conf/server.xml
- 一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号。
- 好处:在访问时,就不用输入端口号
1.2.2.4访问Tomcat
不要关闭之前打开的cmd,然后打开浏览器地址栏输入:http://localhost:8080 (IE中不能省略http)
1.2.2.5 配置端口号
打开Tomcat安装目录下的conf/server.xml
(1) 端口:web服务器在启动时,实际上是监听了本机上的一个端口,当有客户端向该端口发送请求时,web服务器就会处理请求。但是如果不是向其所监听的端口发送请求,web服务器不会做任何响应。tomcat默认的端口是8080。例如:Tomcat启动监听了80端口,而访问的地址是http://localhost:8080,将不能正常访问。
(2)80端口:80端口是http协议默认的端口号,也就是说如果在url中不指定端口号那默认会向80端口发送请求。所以我们不想输入端口号时候可以改为80,而不是原来的8080
处理tomcat端口占用问题
(1)打开cmd输入命令:netstat -ano|findstr 8080
查看占用8080端口的进程pid
(2)输入命令:
taskkill /pid 8768 /f
,将占用端口号结束进程或者修改70行左右的<Connector port="",需要重启tomcat
1.2.2.6 Tomcat目录结构
(1) bin:该目录下存放的是二进制的可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;
如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
(2) conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
- server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;下面会详细介绍这个文件;
- tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
- web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
修改群殴自己拍卖行init-param中的参数可以看到Web下所有的工程。
- context.xml:对所有应用的统一配置,通常我们不会去配置它。
(3) lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的jar包了,所以建议只把Tomcat需要的jar包放到这个目录下;
(4) logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
(5) temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
(6) webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
(7) work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个work目录下。(存放由jsp翻译成的java,以及编辑成的class文件jsp ->java ->class)
(8) LICENSE:许可证。
(9) NOTICE:说明文件。
二 Eclipse、Tomcat、Web集合
IDEA版本的请参考https://blog.youkuaiyun.com/hancoder/article/details/102184703
2.1 Eclipse配置Tomcat
此时无需点击startup.bat
配置步骤:
思路:先创建Server,再把
前提:环境变量中必须有JAVA_HOME
,这是在配置sdk时进行的。
-
首次配置的时候,需要先把Tomcat导入Eclipse。 将 tomcat 的目录和 Myeclipse 集成起来,这样 eclipse在帮我们复制更改的代码的时候,就知道复制到哪个服务器中。进入Eclipse后在菜单栏中点击:Prefrence–Sercer–Runtime Environment—Add
选择Add后再Apache中选择对应的Tomcat版本,下一步。
点击Fiinish后的效果就是图1的效果。
此时eclipse其实赋值了一份tomcat到eclipse工作空间,所以我们后续创建的项目其实都在eclipse工作空间下,而不是第一步的tomcat安装目录下。
部署好的 项目,每次在 Myeclipse 中进行更 改后只要点击
ctrl+s 进行保存,eclipse 会自动重新复制文件到服务器,并覆盖原有在服务器中的文件。
发布项目:
在 eclipse 的 servers 窗口中选择集成的 tomcat 然后点击启动按钮启动即可:
2.2 创建一个Web项目(Web应用)
菜单栏点击:File—New–Ohter–Dynamic Web Project
注意下面这个Context root,是项目的新名称
2.3 创建Web Server,将创建好的Web项目部署到Tomcat中
打开Server视图
注在上步点击
No Server...
的意义与New的操作等价:在Eclipse的菜单File中选择New—Other—搜索到Server。如下图
返回下方的“Servers”面板,右键单击该面板中的“Tomcat v8.0 Server at localhost”节点,在弹出的快捷菜单中单击“Start”,即可启动指定的Web服务器。如果此时直接启动访问http://localhost:8080/day1 ,会发现会报404的错误。这是因为我们没有添加主页,在WebContent文件夹下面添加主页index.jsp
,内容为:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>123123</h1>
</body>
</html>
显示结果如下:
注意点:
- 为什么我们输入的是day1而不是WebTest1呢?因为我们在2.2的这张图中把项目映射了,如果之前没有修改的话,输入项目名可以访问,改了之后不能用项目名访问了。
- 上图还有一个细节是WebContent,不管你修改为什么,我们的文件都是放在修改后的文件中,才能访问到,不加文件的话默认访问的就是
index.jsp
- Tomcat修改xml文件后需要restart
部署项目的其他3种方式:
- 放到TOMCAT目录下:直接将项目放到webapps中,然后访问
loacalhost:8080/项目名/文件名.后缀
。也可以在别的地方把项目压缩成zip包,然后把包后缀改成war。war包传的笔记快,把war包放到webapps后,tomcat会自动解压缩包。卸载项目的时候删除war包后,tomcat会自动删除原来解压缩的内容。 - 修改server.xml(不好):修改150行左右的,在标签间加入:,此时我们访问项目必须写虚拟路径,原路径不可使用。但是这样会破坏tomcat环境让别的项目无法访问。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<!-- 配置方法<Context path="/访问目录名" docBase="e:/项目/WebRoot" debug="0" reloadable="true"/>-->
<!-- 第一个项目-->
<Context path="/struts" docBase="D:\Struts2\WebRoot" reloadable="true">
</Context>
<!--第二个项目-->
<!--
<Context path="/robot" docBase="D:\My Documents\MyEclipseWorkspace\robot\WebRoot" reloadable="true">
</Context>
-->
</Host>
path:浏览器访问时的路径名,如第一个项目,浏览器访问时路径名是(我的是80端口):localhost/struts/index.jsp
docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径。
debug:值为0的话,表示不打印日志
reloadble:设定项目有改动时,tomcat是否重新加载该项目
- 在
tomcat/conf/Catalina/localhost
目录下,创建任意名.xml
,写入<Context docBase="项目路径" />
,此时虚拟目录就是xml文件的名称。
2.4 Eclipse使用Tomcat的原理
(1) 当我们使用Eclipse将项目部署到Tomcat的时,我们发现,在Tomcat下的webapps目录下并没有我们创建好的项目,但是当通过Eclipse启动服务器后,项目却真的可以访问到,这是为什么呢?
(2) 实际上,Eclipse在使用Tomcat时,并没有将项目部署到Tomcat的目录下,而是在其工作空间中,创建了一个Tomcat的镜像,Eclipse启动的Tomcat是他自己配置的镜像。Eclipse会自己下载所需tomcat最简单结构。
(3) Eclipse镜像所在目录
Eclipse的工作空间目录\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
(4) 在这个目录下,我们会发现一个和Tomcat安装目录几乎一模一样的目录结构。项目在问题wtpwebapps文件夹中
(5) 在这里Eclipse中Tomcat镜像配置文件也是独立的,而我们所创建的项目是部署到wtpwebapps目录下的,这样做的好处是Eclipse中Tomcat和我们本机的Tomcat可以保持相互独立,不会影响彼此。
三 Web应用的目录结构
项目在 webapps目录
静态项目和动态项目目录结构
java动态项目的目录结构:
<webDemo动态项目项目名>
| WebContent项目内容
| - WEB-INF //Web容器会包含WEB-INF文件下的内容,但客户端浏览器无法访问WEB-INF下的内容
| | - classes //保存*.class文件
| | - lib //保存打包后的JAR文件
| | - web.xml //web项目的核心配置文件
| - <a.jsp>//这里存放任意多个JSP界面,与WEB-INF同级
四 深入Tomcat原理
4.1 Tomcat层次结构:
层次关系为:
Server
Service
Connector
Engine
Host
Context
在Tomcat的、CONF/server.xml中可以看到类似上面的组件关系。
(1)Server层
对应Server组件,逻辑上表示整个Tomcat,即整个Catalina Servlet容器。它处于Tomcat顶层,可以包含一个或多个Service层。Tomcat提供了该层接口的一个默认实现,所以通常不需要用户自己去实现。
(2)Service层
对应Service组件,是包含在Server层中的一个逻辑功能层。它包含一个Engine层,以及一个或多个连接器(Connector)。Service组件将一个或多个Connector组件绑定到Engine层上,Connector组件侦听端口,获得用户请求,并将请求交给Engine层处理,同时把处理结果发给用户,从而实现一个特定的实际功能。Tomcat提供了Service接口的默认实现,所以通常也不需要用户定制。
(3)Engine层
对应Engine组件,该层是请求分发处理层,可以连接多个Connector。它从Connector接收请求后,解析出可以完成用户请求的URL,根据该URL可以把请求匹配到正确的Host上,当Host处理完用户请求后,Engine层把结果返回给适合的连接器,再由连接器传输给用户。该层的接口一般不需要用户来定制,特殊情况下,用户可以通过实现该接口来提供自定义的引擎。
(4)Host层
对应Host组件,该层表示一个虚拟主机,一个Engine层可以包含多个Host层,每个Host层可以包含一个或多个Context层,对应不同的Web应用。因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能,所以用户通常不需要定制Host。
(5)Context层(重要)
对应Context组件,该层代表某个虚拟主机上的实际目录或一个WAR,即单个Web应用程序,它运行在特定的虚拟主机中,使用最为频繁。一个Host层包含多个Context层,每一个Context都有唯一的路径,Host层接到请求后,根据用户请求的URL,将请求定位到Context层。
项目部署的知识:
一个web容器可以运行多个web应用程序,每个web应用程序都有一个唯一的上下文根,上下文根如何部署是和具体的web容器相关的。
%CATALINA_HOME%\webapps
目录下的每一个子目录都是一个独立的Web应用,子目录的名字就是该Web应用的上下文根。
例如:应用程序A和应用程序B分别位于%CATALINA_HOME%\webapps\a
和%CATALINA_HOME%\webapps\b
,则a是A应用的,b是B应用的
当tomcat启动时,会自动加载webapps目录下的Web应用程序,所以在这个目录下的Web应用程序不需要进行其他的配置就可以直接访问了。
但是我们只在部署的时候才这么做,开发的适合在其他目录下开发,然后配置虚拟目录。配置可以在xml配置文件中通过元素完成。
Context元素属性 | 描述 | |
---|---|---|
backgroundProcessorDelay | 这个值代表在context及其子容器(包括所有的wrappers)上调用backgroundProcess方法的延时,以秒为单位。如果延时值非负,子容器不会被调用,也就是说子容器使用自己的处理线程。如果该值为正,会创建一个新的线程。在等待指定的时间以后,该线程在主机及其 子容器上调用backgroundProcess方法。context利用后台处理session过期,监测类的变化用于重新载入。如果没有指定,该属性的缺省值是-1,说明context依赖其所属的Host的后台处理。 | |
className | 实现的Java类名。该类必须实现org.apache.catalina.Context接口。如果没有指定,使用标准实现(在下面定义)。 | |
cookies | 如果想利用cookies来传递session identifier(需要客户端支持cookies),设为ture。否则为false,这种情况下只能依靠URL Rewriting传递session identifier。 | |
crossContext | 如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他web application的request dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。 | |
docBase | 该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。 | |
override | 如果想利用该Context元素中的设置覆盖DefaultContext中相应的设置,设为true。缺省情况下使用DefaultContext中的设置。 | |
privileged | 设为true,允许context使用container servlets,比如manager servlet。 | |
path | web应用的context路径。catalina将每个URL的起始和context path进行比较,选择合适的web应用处理该请求。特定Host下的context path必须是惟一的。如果context path为空字符串(""),这个context是所属Host的缺省web应用,用来处理不能匹配任何context path的请求。 | |
reloadable | 如果希望Catalina监视/WEB-INF/classes/和/WEB-INF/lib下面的类是否发生变化,在发生变化的时候自动重载web application,设为true。这个特征在开发阶段很有用,但也大大增加了服务器的开销。因此,在发布以后,不推荐使用。但是,你可以使用Manager应用在必要的时候触发应用的重载。 | |
wrapperClass | org.apache.catalina.Wrapper实现类的名称,用于该Context管理的servlets。如果没有指定,使用标准的缺省值。 |
元素是元素的子元素,可以在conf/server.xml中设置Context元素。还可以把放在下列位置的文件中
- conf/context.xml,将被所有的web应用程序加载
- conf/[enginename]/[hostname]/context.xml.default。该路径下的信息将被属于该虚拟主机的所有web应用程序所加载。
- enginename表示在server.xml文件中设置的元素name属性的值(一般Catalina)
- hostname表示在server.xml文件中设置的元素name属性的值(一般localhost)
- conf/[enginename]/[hostname]/xxx.xml文件,在这个文件中,元素的docBase属性通常是web应用程序的绝对路径名,或者是web应用程序归档文件的绝对路径名
- 在web应用程序的目录下增加META-INF/context.xml文件。
在tomcat5.5开始,在conf/[enginename]/[hostname]/xxx.xml中配置,tomcat将以xml文件名作为web应用程序的上下文路径,而不管你再元素中配置的path是什么,
webapps目录下的web应用程序,如果没有在任何文件中配置元素,那么Tomcat将为这个web应用程序自动生成元素。自动生成的元素的上下文路径将以/开始,后面紧跟web应用程序所在目录的名字。如果目录的名字是ROOT,那么上下文路径僵尸一个空字符串""(将作为虚拟主机的默认web应用程序)。所以webapps目录下的web应用程序可以不经配置而直接使用
如果想将开发的目录直接配置成web应用程序运行的目录,而不是放在webapps下。可以在两个地方配置。可以编辑conf/server.xml、设置元素。
<Host>
<Context path="虚拟" docBase="绝对路径" reloadable="true"/>
reloadable代表更改后tomcat会重新加载。就不需要频繁重启tomcat了。
也可以在conf/Catalina/localhost下创建虚拟路径.xml
,编辑内容为
<Context path="虚拟" docBase="绝对路径" reloadable="true"/>
此时注意把server.xml中之前配置的删去。
server.xml配置详解
/conf/server.xml 如果修改了conf/server.xml,就必须重新启动Tomcat。
<Server port="8005" shutdown="SHUTDOWN">
<!-- 属性说明
port:指定一个端口,这个端口负责监听关闭Tomcat的请求
shutdown:向以上端口发送的关闭服务器的命令字符串
-->
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!--
每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求
-->
<Service name="Catalina">
<!-- 属性说明
name:Service的名称
-->
<!--
Connector元素:
由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.
-->
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<!-- 属性说明
port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求。
enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;
若为false则不进行DNS查询,而是返回其ip地址。
redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。
acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。
connectionTimeout:等待超时的时间数(以毫秒为单位)。
maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。
protocol:必须设定为AJP/1.3协议。
address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址。
minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责。
maxProcessors:最多可以创建的处理请求的线程数。
minSpareThreads:最小备用线程 。
maxSpareThreads:最大备用线程。
debug:日志等级。
disableUploadTimeout:禁用上传超时,主要用于大数据上传时。
-->
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<!-- 负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。 -->
<Engine name="Catalina" defaultHost="localhost">
<!-- 属性说明
name:对应$CATALINA_HOME/config/Catalina中的Catalina
defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost
缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的
debug:日志等级
-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<!--
由Host接口定义.一个Engine元素可以包含多个<Host>元素.
每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<!-- 属性说明
name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名
debug:是日志的调试等级
appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/ (web applications的基本目录)
unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件.
如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
-->
<Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >
</Context>
<!-- 属性说明
path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须,
表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/*
docBase:WEB应用的目录,此目录必须符合Java WEB应用的规范,web application的文件存放路径或者是WAR文件存放路径。
debug:日志等级
reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件,
如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,
自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application
-->
</Host>
</Engine>
</Service>
</Server>
context.xml配置
\1. 在tomcat 5.5之前:
---------------------------------------------------------------
Context体现在/conf/server.xml中的Host里的元素,它由Context接口定义。每个<Context元素代表了运行在虚拟主机上的单个Web应用
<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true">
1>path:即要建立的虚拟目录,,注意是/kaka,它指定访问Web应用的URL入口,如http://localhost:8080/kaka/
- 在tomcat 5.5之后
不推荐在server.xml中进行配置,而是在/conf/context.xml中进行独立的配置。因为 server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而 context.xml 文件则不然, tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。
<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/kaka.xml</WatchedResource> 监控资源文件,如果web.xml || kaka.xml改变了,则自动重新加载改应用。
<Resource name="jdbc/testSiteds" 表示指定的jndi名称
auth="Container" 表示认证方式,一般为Container
type="javax.sql.DataSource"
maxActive="100" 连接池支持的最大连接数
maxIdle="30" 连接池中最多可空闲maxIdle个连接
maxWait="10000" 连接池中连接用完时,新的请求等待时间,毫秒
username="root" 表示数据库用户名
password="root" 表示数据库用户的密码
driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER
url="jdbc:mysql://localhost:3306/testSite" /> 表示数据库URL地址
</Context>
conf/Context.xml是Tomcat公用的环境配置;若在server.xml中增加的话,则myApp/META-INF/Context.xml就没用了(被server.xml中的Context替代),
context.xml的三个作用范围
\1. tomcat server级别:
在/conf/context.xml里配置
\2. Host级别:
在/conf/Catalina/${hostName}里添加context.xml,继而进行配置
\3. web app 级别:
在/conf/Catalina/ h o s t N a m e 里 添 加 {hostName}里添加 hostName里添加{webAppName}.xml,继而进行配置
Tomcat端点设置含义:
tomcat启动后会默认占用8080,8009和8005三个端口,占用的这三个端口的意义如下:
8080端口负责建立HTTP连接在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
8009端口负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。
8005端口用来向Tomcat发布shutdown命令的。
web.xml
conf/web.xml为运行在同一个tomcat实例中高端所以web应用程序定义了默认值。当tomcat加载一个web应用程序的时候,首先读取conf/web.xml,在读取web应用程序目录下的WEB-INF/web.xml文件
WAR文件
压缩起来然后指定扩展名为.war
打包:
jar -cvf 名字.war webapps/hello/*
如果不想包含src目录及其下的java文件(发布时不应该把java源文件包含到WAR文件中),执行命令为
jar -cvf 名字.war webapps/hello/*.html WEB-INF/
把war包放到webapps下,tomcat启动时会自动解压war文件,生产同名文件
文件结构
WEB-INF/下有classes和lib。spring中的classpath就是对应这两个文件
Servlet类文件在WEB-INF/classes下,java库文件在WEB-INF/lib下。
web.xml在WEB-INF下。
根据WEB应用程序的需求,将JSP页面或静态HTML页面放到上下文根路径下或其子目录下。
如果有需要,可以META-INF/context.xml
Servlet元素
为Servlet指定一个文本描述
为Servlet指定一个简短的名字,可以被某些工具显示
为Servlet指定一个图标,该图标可以在某些图形界面工具中表示该Servlet
指定Servlet的名字,在同一Web应用中,该名字唯一
指定Servlet类的完整限定名
指定web应用中jsp文件的完整路径,以’/ '开头
定义Servlet的初始化参数 必须包含
指定web应用启动时Servlet的加载次序。元素内容必须为整数 如果没有设定该元素或设定为负数,Servlet容器将在客户端首次请求这个Servlet时加载它;如果该值为正数或0,容器将在Web应用部署时加载和初始化这个Servlet。并且先加载数值小的Servlet
指定用于执行组件的角色。必须包含元素指定角色名
声明在组件或部署组件的代码中安全角色的引用,必须包含元素 0或1个指定到一个安全角色的引用。
元素及其子元素
在Servlet和URL样式之间定义一个映射。包含两个子元素(必须和元素中的名字一致)和(指定对应于Servlet的URL路径,是相对于Web应用上下文根的路径)。Servlet 2.5规范允许子元素出现多次(配置错误会出现404找不到资源)
web相关概念回顾
1. 软件架构
1. C/S:客户端/服务器端
2. B/S:浏览器/服务器端
2. 资源分类
1. 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析
* 如: html,css,JavaScript
2. 动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器
* 如:servlet/jsp,php,asp....
需要遵守一定的规则(接口),才能被tomcat所识别。