菜鸟程序猿之TOMCAT使用

一.Servlet容器,web容器,服务器
    Servlet容器: 能够运行Servlet的环境叫做Servlet容器
    web容器: 能够运行web应用的环境就叫做web容器

    weblogic
    websphere
    tomcat

二.TOMCAT的安装和配置
    http://tomcat.apache.org/

    有解压版 和 安装版 还分windows 和 linux版,选择自己想要的版本下载
    
    tomcat5 jdk4以上
    tomcat6 jdk5以上
    tomcat7 jdk6以上
    tomcat8 jdk7以上
    
    解压后还需要配置JAVA_HOME环境变量,指向jdk的根目录,指定tomcat启动时使用哪个jdk

    通过bin/startup.bat启动tomcat
    通过bin/shutdown.bat关闭tomcat

    通过访问 http://localhost:8080 如果能够看到tomcat的首页就证明tomcat安装配置成功

    可以通过 conf/server.xml 来指定tomcat监听的端口,我们可以改为监听80端口

    可选的环境变量:Catalina_home 指定启动哪个位置的tomcat,tomcat在启动时首先检查Catalina_home是否存在,如果存在就启动这个环境变量指向的tomcat,如果不存在就启动当前tomcat,推荐不要配置。

    在启动tomcat时可能出现的问题:
        安装位置路径中一定不能有中文和空格,可能一时半会没问题,但是不知道什么时候就可能出现意外。
        如果在启动时报端口占用的错误,可以通过 netstat -ano 命令查看哪个程序占用了端口,停止后再重启tomcat即可。

三.tomcat的目录结构
    bin--tomcat批处理文件的存放目录
    conf--tomcat配置文件所在的目录, 其中server.xml是tomcat的核心配置文件
    lib--tomcat运行时所依赖的jar包存放的目录.
    logs--tomcat日志文件所在的目录
    temp--tomcat运行时产生的临时文件存放的目录
    webapps--是localhost虚拟主机管理的目录, 放在这个目录下的web应用可以通过浏览器访问localhost主机来访问
    work--tomcat运行时产生的工作文件存放目录. 是tomcat的工作目录

四.web应用
    将为了实现某一功能而准备好的所有的web资源按照一定的目录结构组织起来的就是一个web应用
    虚拟主机不能直接管理web资源, web资源必须组织成web应用才可以交给虚拟主机去管理
    1.web应用的目录结构
        game
        |
        |--静态web资源, jsp 直接放在web应用的根目录下, 可以通过浏览器直接访问
        |--WEB-INF web应用中特殊的目录, 这个目录可以没有, 一旦有了必须按照规定的结构
            |    (放在这个目录中的资源将被保护起来, 通过浏览器不能直接访问)
            |--classes 用来存放动态web资源的class文件
            |--lib 用来存放动态web资源所依赖的一些jar包
            |--web.xml 当前web应用中核心的配置文件, 当前web应用所有的配置操作都需要在这个文件中进行

    2.部署web应用到虚拟主机中 -- web应用的虚拟路径映射
        方式一:
            在tomcat/conf/server.xml文件中<Engine>标签下<Host>标签内部添加一个<Context path="web应用的虚拟路径" docBase="web应用的真实路径"/>
            这种配置方式每次都要重启服务器, 所以不推荐!!
            只要将path的值设置为空, 当前web应用就是缺省的web应用.
        方式二:
            在[tomcat]/conf/[Engine]/[host]/xxx.xml 其中文件名表示web应用的虚拟路径, 在文件的内部编写<Context docbase="web应用的真实路径">
            这种配置方式不需要重启服务器就可以起作用
            如果虚拟路径想用多级路径表示, 可以在文件名中用#代替/
            只要将文件的名称设置ROOT, 当前web应用就是缺省的web应用
        方式三:
            虚拟主机在配置的时候可以指定一个默认管理的目录, 只需要将web应用放在这个默认管理的目录中既可
            这种配置方式不需要重启服务器就可以起作用
            如果虚拟路径想用多级路径表示, 可以在文件名中用#代替/
            只要将web应用的文件夹的名称设置为ROOT, 当前web应用就是缺省的web应用
        
            **可以通过修改web.xml为当前web应用配置主页!
        
五.虚拟主机
    所谓的虚拟主机就是tomcat服务器中配置的一个站点,在访问时就好像访问一台真实的主机一样
    tomcat服务器中可以配置多个站点, 一个站点就是一台虚拟主机

    在[tomcat]/conf/server.xml文件中<Engine>标签内添加一个<Host>就可以配置一台虚拟主机.<Host name="虚拟主机的名字" appBase="虚拟主机的管理目录"> 其中name属性是必须存在的, appBase属性可以没有, 如果没有表示该虚拟主机不管理任何目录.

    配置后还需要到DNS服务器里做域名和IP地址的映射, 但DNS一般不能随便改动, 可以通过hosts文件来模拟DNS的功能, 完成实验

    配置缺省虚拟主机: 在<Engine>标签上的defaultHost属性可以指定缺省虚拟主机. 当用户通过IP地址来访问无法确定访问哪个虚拟主机时, 将会访问缺省的虚拟主机.
    
    **练习: 配置为www.163.com虚拟主机, 以三种方式配置web应用,并选择一种配置为缺省web应用, 并且配置web应用的主页, 最终实现直接访问www.163.com能够显示主页的内容.
    

六.其他相关
    1.打war包
        方式一: 进入应用的目录, 用 jar -cvf xxx.war * 命令, 就可以将当前目录下的所有内容打成war包
        方式二: 用压缩工具打成 xxx.zip包, 然后把后缀名zip改为war即可
    2.通过的web.xml 和 context.xml 文件
        [tomcat]/conf/web.xml 这个文件是通用的web.xml文件, tomcat服务器中的所有web应用中的web.xml文件都"继承"自这个文件
        [tomcat]/conf/context.xml 这个文件是通用的<Context>配置, tomcat服务器中的所有web应用中的<Context>配置默认都"继承"自这个<Context>

七.HTTP协议
    1.http概述
        规定了客户端和服务器端之间进行通信的协议。
        基于TCP/IP协议的应用层协议    物理层/数据链路层/网络层/传输层/会话层/表示层/应用层
    2.基本原则
        基于请求响应模型
        一次请求对应一次响应
        请求只能由客户端发出, 服务器端被动的等待请求做出响应。
    3.http详解
        **工具: httpwatch 浏览器自带的检测工具
        (1)http请求
            一个请求行
                GET /movie/rgqwl.html HTTP/1.1
                GET:
                    请求方式. 请求方式一共有7种, GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE, 但是我们只用两种 GET 和POST请求.

                /movie/rgqwl.html: 请求资源的路径

                HTTP/1.1:
                    ~~http协议的版本, 一共有1.0和1.1两个版本. 这两个版本最大的一个区别在于: 1.0版本的http在每次请求响应结束之后都要断开和服务器之间的通道, 下次再次请求时还得再次建立通道. 而1.1版则会在每次请求响应结束之后, 在一定的时间内会保持通道, 如果在这段时间内再次请求则无需建立通道, 做到了通道的复用. 目前使用的是1.1版本
                    
            若干请求头
                Accept: text/html,image/* -- 通知服务器当前浏览器可以接受哪些格式的数据
                Accept-Charset: ISO-8859-1 -- 通知服务器当前浏览器可以接受的字符集编码
                Accept-Encoding: gzip,compress -- 浏览器可以接受的压缩格式
                Accept-Language: en-us,zh-cn -- 浏览器可以接受的语言环境, 和国际化相关的头
                Host: www.it315.org:80 -- 访问的虚拟主机的名称
                If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT -- 这是和缓存相关的头
                Referer: http://www.it315.org/index.jsp -- 这是和防盗链相关的头,对当前资源的访问来自哪个页面的超链接
                User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)    -- 客户端的基本信息
                Cookie -- 和cookie相关的头
                Connection: close/Keep-Alive -- 是否继续保持连接  
                Date: Tue, 11 Jul 2000 18:23:51 GMT -- 当前发送请求的时间

            (一个空行)
            
            实体内容

        (2)http响应    
            一个状态行
                HTTP/1.1 200 OK
                HTTP/1.1: 当前所遵循的协议版本
                200: 响应码 -- 一个3位的数字, 100~999, 表示服务器处理请求的结果
                    200~299 表示服务器正确的处理了请求
                    300~399 表示服务器正确的处理了本次请求, 但是如果想要继续执行, 还需要更多的额外信息
                    400~499 表示客户端的请求有问题
                    500~599 表示服务器端发生了问题

                    200 表示服务器处理成功
                    302 表示请求重定向
                    304/307 通知浏览器使用缓存资源
                    404 表示客户端请求的资源不存在
                    500 表示服务器端处理请求出错
                OK: 描述字符    
            若干响应头
                Location: http://www.it315.org/index.jsp  -- 配合302使用实现请求重定向
                Server:apache tomcat  -- 服务器的基本信息
                Content-Encoding: gzip -- 服务器发送的数据使用的压缩格式
                Content-Length: 80 -- 服务器发送的数据的大小
                Content-Language: zh-cn  --服务器发送的数据使用的语言环境 国际化相关的头
                Content-Type: text/html; charset=GB2312  -- 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据
                Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  -- 和缓存相关的头
                Refresh: 1;url=http://www.it315.org  -- 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址
                Content-Disposition: attachment;filename=aaa.zip -- 通知浏览器以附件的形式打开发送过去的数据,是和文件下载相关的头
                Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 和Cookie相关的头
                Expires: -1  -- 通知浏览器是否缓存
                Cache-Control: no-cache   -- 通知浏览器是否缓存
                Pragma: no-cache  -- 通知浏览器是否缓存
                --之所以一个功能有三个头,是因为历史原因.所以为了网页的兼容性考虑,通常这三个头要一起使用
                Connection: close/Keep-Alive  -- 是否保持连接
                Date: Tue, 11 Jul 2000 18:23:51 GMT  -- 响应时的时间

            一个空行

            实体内容

猜你喜欢

转载自blog.csdn.net/yxh13521338301/article/details/80640810