zoukankan      html  css  js  c++  java
  • 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可能因操作和状态不同而出现不同的界面。所以在使用时应该考虑到这点。

  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/leomei91/p/7109968.html
Copyright © 2011-2022 走看看