12.17日记

一、一直觉得用户请求和struts处理请求之间有一些空白的知识点,所以,今天准备看看tomcat。

其实像struts这类的控制层框架都是实现了servlet api,然后对一些业务进行进一步封装后的产物,但是它也只是负责处理业务的,那么用户的请求怎么就到达控制层呢?这就是servlet容器的作用了,tomcat作为开源的servlet容器,也实现了servlet api,在用户请求到来时,会为处理请求的servlet创建request和response,然后调用servlet的生命周期函数,当servelt处理完请求后,仍然由容器接受response,然后返回给客户端。

我们先看看tomcat安装完成后,在server.xml中默认的配置:

 

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">
  
  <Service name="Catalina">
  
    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
        maxThreads="150" minSpareThreads="4"/>
    -->
    
    
   
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    -->           
    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the JSSE configuration, when using APR, the 
         connector should be using the OpenSSL style configuration
         described in the APR documentation -->
    <!--
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">         
    --> 
    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

      </Host>
    </Engine>
  </Service>
</Server>

 从配置上,我们对tomcat的结构就比较了解了,顶层的元素是server和service,一个server可以包含多个service,在service中,可以包含多个connector和一个engine,engine中又包含多个host,代表多个虚拟主机,在host中,我们可以配置多个context,代表一个虚拟主机中多个app,我们可以由此联想一个tomcat配置多个虚拟主机,或者一个虚拟主机中配置多个共存的应用。

 

二、session机制

在看tomcat时,涉及到了session的管理,所以顺便回顾了一下session的知识,session与cookie不同的是,它是服务器端的状态,但是底层是基于cookie实现的,在客户端第一次请求的时候,服务器会返回一个sessionId,然后客户端会把它存在cookie中,然后下一次请的时候会向服务器端发送这个id,然后服务器会根据这个id去取出相应的session。

由于session是基于cookie的,所以一旦客户端把cookie禁用之后,session的状态就无法维护了。这个时候我们就要用到response.encodeURL(url)了,它的实现机制是这样的:

(1)先判断页面是否禁用session,如果禁用,那么直接返回url

(2)如果没有禁用,那么继续判断是否禁用cookie,如果没有禁用,那么直接返回url,sessionId会在header的cookie中找到

(3)如果禁用,那么会在url后面自动加上sessionID,然后发送到服务器端,就保证了session状态不会受到是否禁用cookie的影响

 

三、发现tomcat的源码时ant项目,就顺便看了下ant的东西。

ant和maven都是项目项目管理工具,它的安装和maven类似,都是先去下载bin的zip包(如果你的操作系统是windows的话),然后解压,配置path,然后再命令行中测试ant -version,如果有版本输出,证明ant被正确安装了

具体的用法就没仔细看了,以后需要了再学习吧。

 

四、在做项目时一般是拷贝之前的log4j文件,今天了解了一下

 

###rootLogger是所有log的超类
###格式是:[日志级别]appender类型,appender类型
log4j.rootLogger=debug, console,file
log4j.logger.service=debug, service


### direct messages to file *.log ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c:%L] - %m%n

log4j.appender.service=org.apache.log4j.DailyRollingFileAppender
log4j.appender.service.File=${catalina.home}/logs/main.log
log4j.appender.service.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.service.Append=true
log4j.appender.service.layout=org.apache.log4j.PatternLayout
log4j.appender.service.layout.ConversionPattern=%d [%5p] [%F:%L] %M: %m%n

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值