• Tomcat闲聊


    上面是Tomcat的执行过程。

    下面说几个概念:

    1、JSP:这个就是在html文件中嵌入Java代码之后重新生成的一个文件(.jsp的文件)

    2、servlet:就是一个处理动态资源的小程序,一般位于Tomcat这个容器中

    3、Tomcat:JSP和servlet的容器,以及web服务器

    4、.jar:就是类库,类的仓库(java archive档案)

    5、mime:说明消息或者文件的类型的一种标准

    6、JDBC:Java数据库连接,Java DataBase Connection

    再来看看Tomcat的目录结构:

    1、bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;

    2、conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

    • server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;
    • tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
    • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
    • 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文件都会存放到这个目录下。

    8、LICENSE:许可证。

    9、NOTICE:说明文件。

    注:WEB-INF/classes/下有个application.properties文件,记录着数据库等重要的配置信息。

    java程序的执行过程:

    .java-->.javac-->.class-->执行

    常用端口说明:

    8005:这个是用来监听关闭服务器的请求

    8009:当Tomcat与其他web服务器集成时会用到

    8080:这个是监听来自浏览器的请求

    配置文件详细说明:

    server.xml:

     

    server:          
              1、port 指定一个端口,这个端口负责监听关闭tomcat的请求
              2、shutdown 指定向端口发送的命令字符串
        service:          
              1、name 指定service的名字
        Connector (表示客户端和service之间的连接):
              1、port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
              2、minProcessors 服务器启动时创建的处理请求的线程数
              3、maxProcessors 最大可以创建的处理请求的线程数
              4、enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查
    
    询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
              5、redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
              6、acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理
    
    队列中的请求数,超过这个数的请求将不予处理
              7、connectionTimeout 指定超时的时间数(以毫秒为单位)
        Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求):
              1、defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
        Context (表示一个web应用程序):
              1、docBase 应用程序的路径或者是WAR文件存放的路径
              2、path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
              3、reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
        host (表示一个虚拟主机):
              1、name 指定主机名
              2、appBase 应用程序基本目录,即存放应用程序的目录
              3、unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接
    
    从WAR文件中运行应用程序
        Logger (表示日志,调试和错误信息):
              1、className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
              2、prefix 指定log文件的前缀
              3、suffix 指定log文件的后缀
              4、timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
      Realm (表示存放用户名,密码及role的数据库):
              1、className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
       Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
              1、className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
        directory(指定log文件存放的位置):
        1、pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多     
    
     附:Tomcat服务器执行详细过程
    
    http://localhost:8080/wsota/wsota_index.jsp
    
    1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
    2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
    3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
    4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
    5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
    6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
    7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
    8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
    9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    10)Context把执行完了之后的HttpServletResponse对象返回给Host
    11)Host把HttpServletResponse对象返回给Engine
    12)Engine把HttpServletResponse对象返回给Connector
    13)Connector把HttpServletResponse对象返回给客户browser

     通俗的说:.do是一个映射,它可以是html文件、jsp文件或者其他文件的映射,可以是一个也可以是多个。这样会导致如下情况:有时候一个.do 包含了好几个.jsp,同一个url可能因操作和状态不同而出现不同的界面。所以在使用时应该考虑到这点。

  • 相关阅读:
    关于博客
    latex句首缩进空格
    javable 之Iterable
    javable之Comparable
    常量池与Integer和String的“==”
    静态多态与动态多态
    String和StringBuilder效率不同的原理
    equals和hashcode
    Eclipse里面使用checkstyle(Google style)
    矩阵链乘问题
  • 原文地址:https://www.cnblogs.com/leomei91/p/7109968.html
Copyright © 2020-2023  润新知