在上一节中,我们程序的起始位置还是Bootstrap,现在我们通过bat文件来启动这个类。

在分析catalina.bat之前,我们先看看几个简单的我们能用到的dos命令。

基础知识

1 rem 注释,解释器不会执行rem开始的命令

2 pause 用于暂停正在执行的批处理文件,按任意键后继续

3 echo 在控制台显示一段文本

     如果显示变量的值需要在变量前后加% 如echo %var% 如果要输出操作系统的名字 就是 echo %os%

4 echo off 可以将命令本身隐藏 如果要连echo off 本身也要隐藏 就是@echo off

5 set 设置一个变量

可以看下面的一个例子

@echo off

echo 你好呀?

pause

set a=15

echo %a%

echo 再按就退出

echo %os%

pause



6 label 使用:标识一个标签,和goto合起来使用

7 goto 跳转到相应的label处

看下面的例子

echo start

goto end

echo 你看不到我

:end

echo endss

pause

运行上面的命令后,控制台上只会出现

start

endss



8 if 执行条件测试

有三种用法

 测试变量的值

  set var=15

 if %var%=15 echo 是15

 测试文件是否存在

 if exist c:/file.text echo 存在文件



9 not 取反

  set var=15

 if not %var%=15 echo 不是15



10 接收参数

用%1表示第一个参数 %2表示第二个 以此类推

如果有一个ss.bat里面如下

echo %1

在控制台用下面的命令调用ss

ss hello

就会输出第一个参数hello



11 shift

将参数后移 等于是把%2复制给了%1;%3给了%2



12 call 调用另一条命令



13 setLocal 使得对变量的修改只在本bat文件内有效 bat文件结束后变量恢复原值



14 start 打开一个新的窗口

start name command

name是新的窗口的名字 后面带着的是在新窗口中要执行的命令

当然也可以没有命令





在tomcat的安装目录下有bin文件夹

cd进去后 在命令行形式下运行catalina 就可以运行bat文件了

不过在运行的时候 还需要一些参数





下来激动人心的时刻到了 看源码



我们就按照调用 catalina start 来看代码

我用//来做注释

Catalina.bat

  1. @echo off //隐藏命令
  2. rem Licensed to the Apache Software Foundation (ASF) under one or more
  3. rem contributor license agreements. See the NOTICE file distributed with
  4. rem this work for additional information regarding copyright ownership.
  5. rem The ASF licenses this file to You under the Apache License, Version 2.0
  6. rem (the "License"); you may not use this file except in compliance with
  7. rem the License. You may obtain a copy of the License at
  8. rem
  9. rem http://www.apache.org/licenses/LICENSE-2.0
  10. rem
  11. rem Unless required by applicable law or agreed to in writing, software
  12. rem distributed under the License is distributed on an "AS IS" BASIS,
  13. rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. rem See the License for the specific language governing permissions and
  15. rem limitations under the License.
  16.  
  17. //上面的是注释 不管 os就是windows_NT setlocal上面有
  18. if "%OS%" == "Windows_NT" setlocal
  19. rem ---------------------------------------------------------------------------
  20. rem Start/Stop Script for the CATALINA Server
  21. rem
  22. rem Environment Variable Prerequisites
  23. rem
  24. rem Do not set the variables in this script. Instead put them into a script
  25. rem setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
  26. rem
  27. rem CATALINA_HOME May point at your Catalina "build" directory.
  28. rem
  29. rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
  30. rem of a Catalina installation. If not present, resolves to
  31. rem the same directory that CATALINA_HOME points to.
  32. rem
  33. rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
  34. rem "run" or "debug" command is executed.
  35. rem Include here and not in JAVA_OPTS all options, that should
  36. rem only be used by Tomcat itself, not by the stop process,
  37. rem the version command etc.
  38. rem Examples are heap size, GC logging, JMX ports etc.
  39. rem
  40. rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
  41. rem the JVM should use (java.io.tmpdir). Defaults to
  42. rem %CATALINA_BASE%\temp.
  43. rem
  44. rem JAVA_HOME Must point at your Java Development Kit installation.
  45. rem Required to run the with the "debug" argument.
  46. rem
  47. rem JRE_HOME Must point at your Java Runtime installation.
  48. rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
  49. rem are both set, JRE_HOME is used.
  50. rem
  51. rem JAVA_OPTS (Optional) Java runtime options used when any command
  52. rem is executed.
  53. rem Include here and not in CATALINA_OPTS all options, that
  54. rem should be used by Tomcat and also by the stop process,
  55. rem the version command etc.
  56. rem Most options should go into CATALINA_OPTS.
  57. rem
  58. rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
  59. rem containing some jars in order to allow replacement of APIs
  60. rem created outside of the JCP (i.e. DOM and SAX from W3C).
  61. rem It can also be used to update the XML parser implementation.
  62. rem Defaults to $CATALINA_HOME/endorsed.
  63. rem
  64. rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
  65. rem command is executed. The default is "dt_socket".
  66. rem
  67. rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
  68. rem command is executed. The default is 8000.
  69. rem
  70. rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
  71. rem command is executed. Specifies whether JVM should suspend
  72. rem execution immediately after startup. Default is "n".
  73. rem
  74. rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
  75. rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
  76. rem and JPDA_SUSPEND are ignored. Thus, all required jpda
  77. rem options MUST be specified. The default is:
  78. rem
  79. rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
  80. rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
  81. rem
  82. rem LOGGING_CONFIG (Optional) Override Tomcat's logging config file
  83. rem Example (all one line)
  84. rem set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
  85. rem
  86. rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager
  87. rem Example (all one line)
  88. rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  89. rem
  90. rem TITLE (Optional) Specify the title of Tomcat window. The default
  91. rem TITLE is Tomcat if it's not specified.
  92. rem Example (all one line)
  93. rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
  94. rem
  95. rem
  96. rem
  97. rem $Id: catalina.bat 1344732 2012-05-31 14:08:02Z kkolinko $
  98. rem ---------------------------------------------------------------------------
  99.  
  100. rem Suppress Terminate batch job on CTRL+C
  101. if not ""%1"" == ""run"" goto mainEntry //如果第一个参数不是run 去mainEntry标签 11行后
  102. if "%TEMP%" == "" goto mainEntry
  103. if exist "%TEMP%\%~nx0.run" goto mainEntry
  104. echo Y>"%TEMP%\%~nx0.run"
  105. if not exist "%TEMP%\%~nx0.run" goto mainEntry
  106. echo Y>"%TEMP%\%~nx0.Y"
  107. call "%~f0" %* <"%TEMP%\%~nx0.Y"
  108. rem Use provided errorlevel
  109. set RETVAL=%ERRORLEVEL%
  110. del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
  111. exit /B %RETVAL%
  112. :mainEntry //看不懂
  113. del /Q "%TEMP%\%~nx0.run" >NUL 2>&1
  114.  
  115. rem Guess CATALINA_HOME if not defined
  116. set "CURRENT_DIR=%cd%" //cd就是当前路径
  117. if not "%CATALINA_HOME%" == "" goto gotHome //不等于空 就去gotHome
  118. set "CATALINA_HOME=%CURRENT_DIR%" //要是等于空 就认为catalina.bat所在的文件夹就是 //CATALINA_HOME
  119. if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
  120. cd .. //判定CATALINA_HOME里是不是存在bin\catalina.bat
  121. //如果不存在 返回上一级目录
  122. //要记得正常情况下 catalina.bat本来就在bin目录下
  123. set "CATALINA_HOME=%cd%"
  124. cd "%CURRENT_DIR%"
  125. :gotHome
  126.  
  127. if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome //到这里就好了 存在这个bat文件 去okhome //看看
  128. echo The CATALINA_HOME environment variable is not defined correctly
  129. echo This environment variable is needed to run this program
  130. goto end
  131. :okHome
  132.  
  133. rem Copy CATALINA_BASE from CATALINA_HOME if not defined
  134. if not "%CATALINA_BASE%" == "" goto gotBase //英文注释说的很清楚了
  135. set "CATALINA_BASE=%CATALINA_HOME%"
  136. :gotBase
  137.  
  138. rem Ensure that any user defined CLASSPATH variables are not used on startup,
  139. rem but allow them to be specified in setenv.bat, in rare case when it is needed.
  140. set CLASSPATH=
  141.  
  142. rem Get standard environment variables //就是调用setenv.bat
  143. if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
  144. call "%CATALINA_BASE%\bin\setenv.bat"
  145. goto setenvDone
  146. :checkSetenvHome
  147. if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
  148. :setenvDone
  149.  
  150. rem Get standard Java environment variables //调用setclasspath
  151. if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
  152. echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
  153. echo This file is needed to run this program
  154. goto end
  155. :okSetclasspath
  156. set BASEDIR=%CATALINA_HOME%
  157. call "%CATALINA_HOME%\bin\setclasspath.bat"
  158. //setclasspath.bat 会检查环境变量java_home
  159. //并且会设置以下的变量
  160. //set JAVA_ENDORSED_DIRS=%BASEDIR%\common\endorsed
  161. //set CLASSPATH=%JAVA_HOME%\lib\tools.jar
  162. //set _RUNJAVA="%JAVA_HOME%\bin\java"
  163. //set _RUNJAVAW="%JAVA_HOME%\bin\javaw"
  164. //set _RUNJDB="%JAVA_HOME%\bin\jdb"
  165. //set _RUNJAVAC="%JAVA_HOME%\bin\javac"
  166.  
  167. rem Add on extra jar files to CLASSPATH
  168. if "%JSSE_HOME%" == "" goto noJsse //看英文注释
  169. set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar
  170. :noJsse
  171. set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar
  172.  
  173. if not "%CATALINA_BASE%" == "" goto gotBase
  174. set CATALINA_BASE=%CATALINA_HOME%
  175. :gotBase
  176.  
  177. if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
  178. set CATALINA_TMPDIR=%CATALINA_BASE%\temp
  179. :gotTmpdir
  180.  
  181. rem ----- Execute The Requested Command ---------------------------------------
  182.  
  183. echo Using CATALINA_BASE: "%CATALINA_BASE%"
  184. echo Using CATALINA_HOME: "%CATALINA_HOME%"
  185. echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
  186. if ""%1"" == ""debug"" goto use_jdk
  187. echo Using JRE_HOME: "%JRE_HOME%"
  188. goto java_dir_displayed
  189. :use_jdk
  190. echo Using JAVA_HOME: "%JAVA_HOME%"
  191. :java_dir_displayed
  192. echo Using CLASSPATH: "%CLASSPATH%"
  193.  
  194. set _EXECJAVA=%_RUNJAVA%
  195. set MAINCLASS=org.apache.catalina.startup.Bootstrap
  196. set ACTION=start
  197. set SECURITY_POLICY_FILE=
  198. set DEBUG_OPTS=
  199. set JPDA=
  200.  
  201. if not ""%1"" == ""jpda"" goto noJpda //第一个参数是start 去看nojpda 15行后
  202. set JPDA=jpda
  203. if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
  204. set JPDA_TRANSPORT=dt_socket
  205. :gotJpdaTransport
  206. if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
  207. set JPDA_ADDRESS=8000
  208. :gotJpdaAddress
  209. if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
  210. set JPDA_SUSPEND=n
  211. :gotJpdaSuspend
  212. if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
  213. set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
  214. :gotJpdaOpts
  215. shift
  216. :noJpda
  217.  
  218. if ""%1"" == ""debug"" goto doDebug
  219. if ""%1"" == ""run"" goto doRun
  220. if ""%1"" == ""start"" goto doStart //呵呵
  221. if ""%1"" == ""stop"" goto doStop
  222. if ""%1"" == ""configtest"" goto doConfigTest
  223. if ""%1"" == ""version"" goto doVersion
  224.  
  225. echo Usage: catalina ( commands ... )
  226. echo commands:
  227. echo debug Start Catalina in a debugger
  228. echo debug -security Debug Catalina with a security manager
  229. echo jpda start Start Catalina under JPDA debugger
  230. echo run Start Catalina in the current window
  231. echo run -security Start in the current window with security manager
  232. echo start Start Catalina in a separate window
  233. echo start -security Start in a separate window with security manager
  234. echo stop Stop Catalina
  235. echo configtest Run a basic syntax check on server.xml
  236. echo version What version of tomcat are you running?
  237. goto end
  238.  
  239. :doDebug
  240. shift
  241. set _EXECJAVA=%_RUNJDB%
  242. set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
  243. if not ""%1"" == ""-security"" goto execCmd
  244. shift
  245. echo Using Security Manager
  246. set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
  247. goto execCmd
  248.  
  249. :doRun
  250. shift
  251. if not ""%1"" == ""-security"" goto execCmd
  252. shift
  253. echo Using Security Manager
  254. set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
  255. goto execCmd
  256.  
  257. :doStart
  258. shift //移动参数
  259. if not "%OS%" == "Windows_NT" goto noTitle //刚才已经说了 os就是Windows_NT
  260. if "%TITLE%" == "" set TITLE=Tomcat
  261. set _EXECJAVA=start "%TITLE%" %_RUNJAVA% //title是tomcat
  262. goto gotTitle //_EXECJAVA这就是以后的命令
  263. :noTitle
  264. set _EXECJAVA=start %_RUNJAVA%
  265. :gotTitle //之前移动了参数了 但是我们确实没有第二个参数 去看execCmd 24行后
  266. if not ""%1"" == ""-security"" goto execCmd
  267. shift
  268. echo Using Security Manager
  269. set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
  270. goto execCmd
  271.  
  272. :doStop
  273. shift
  274. set ACTION=stop
  275. set CATALINA_OPTS=
  276. goto execCmd
  277.  
  278. :doConfigTest
  279. shift
  280. set ACTION=configtest
  281. set CATALINA_OPTS=
  282. goto execCmd
  283.  
  284. :doVersion
  285. %_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
  286. goto end
  287.  
  288. :execCmd
  289. rem Get remaining unshifted command line arguments and save them in the
  290. set CMD_LINE_ARGS=
  291. :setArgs //此时的第一个参数为空 所以去看doneSetArgs
  292. if ""%1""=="""" goto doneSetArgs
  293. set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
  294. shift
  295. goto setArgs
  296. :doneSetArgs
  297.  
  298. rem Execute Java with the applicable properties
  299. if not "%JPDA%" == "" goto doJpda //两个变量都为空
  300. if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
  301.  
  302. %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
  303. // 在我的电脑上将上面的变量赋值后就是
  304. //start "Tomcat" "C:\j2sdk1.4.2_02\bin\java" -
  305. //Djava.endorsed.dirs="..\common\endorsed" -classpath
  306. //"C:\j2sdk1.4.2_02\lib\tools.jar;..\bin\bootstrap.jar" -
  307. //Dcatalina.base=".." -Dcatalina,home=".." -Djava.io.tmpdir="..\temp"
  308. //org.apache.catalina.startup.Bootstrap start
  309. //解释一下
  310. //启动一个新的窗口叫tomcat 然后就调用java命令 从-Djava到/temp都是参数
  311. //运行的是org.apache.catalina.startup.Bootstrap 参数是start
  312. //我累个去 重要写完啦
  313. //感谢glt
  314. goto end //去看end
  315. :doSecurity
  316. %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
  317. goto end
  318. :doJpda
  319. if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
  320. %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
  321. goto end
  322. :doSecurityJpda
  323. %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
  324. goto end
  325.  
  326. :end //对end在这

其实还没有到最开始的那个类

当当当当~~~

Startup.bat

  1. @echo off
  2. if "%OS%" == "Windows_NT" setlocal
  3. rem ---------------------------------------------------------------------------
  4. rem Start script for the CATALINA Server
  5. rem
  6. rem $Id: startup.bat,v 1.4 2002/01/15 02:55:38 patrickl Exp $
  7. rem ---------------------------------------------------------------------------
  8.  
  9. rem Guess CATALINA_HOME if not defined
  10. if not "%CATALINA_HOME%" == "" goto gotHome
  11. set CATALINA_HOME=. // 一个点是当前目录
  12.  
  13. if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
  14. set CATALINA_HOME=.. //两个点事上级目录 哎 今天涨姿势了
  15. :gotHome
  16. //上一级目录里面是有bin文件夹的 所以去okhome
  17. if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
  18. echo The CATALINA_HOME environment variable is not defined correctly
  19. echo This environment variable is needed to run this program
  20. goto end
  21. :okHome
  22.  
  23. set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat
  24.  
  25. rem Check that target executable exists
  26. if exist "%EXECUTABLE%" goto okExec //EXECUTABLE肯定有呀 去看okExec
  27. echo Cannot find %EXECUTABLE%
  28. echo This file is needed to run this program
  29. goto end
  30. :okExec
  31.  
  32. rem Get remaining unshifted command line arguments and save them in the
  33. set CMD_LINE_ARGS=
  34. :setArgs
  35. if ""%1""=="""" goto doneSetArgs //这里没有参数 所以去doneSetArgs
  36. set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
  37. shift
  38. goto setArgs
  39. :doneSetArgs
  40.  
  41. call "%EXECUTABLE%" start %CMD_LINE_ARGS% //调用bin\catalina.bat并且参数为start
  42.  
  43. :end

tomcat终于结束了 感谢glt

How tomcat works 读书笔记十七 启动tomcat 下的更多相关文章

  1. How tomcat works 读书笔记十七 启动tomcat 上

    一路跋山涉水,这是最后一章了. 关于tomcat的启动,有两个类,一个是Catalina类,一个是Bootstrap类. 理论上,两个类可以和到一起,但是为了支持多种运行模式,又把他们分开了. 为了让 ...

  2. How tomcat works 读书笔记十二 StandardContext 下

    对重载的支持 tomcat里容器对重载功能的支持是依靠Load的(在目前就是WebLoader).当在绑定载入器的容器时 public void setContainer(Container cont ...

  3. how tomcat works 读书笔记 八 载入器下

    载入类 我们看看之前的文章,这一节就从SimpleWrapper的loadServlet讲起. SimpleWrapper.java如下(省略了try catch及其他部分代码) public Ser ...

  4. how tomcat works 读书笔记(二)----------一个简单的servlet容器

    app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...

  5. how tomcat works 读书笔记四 tomcat的默认连接器

    事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache ...

  6. how tomcat works 读书笔记(一)----------一个简单的webserver

    http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...

  7. how tomcat works 读书笔记(一)----------一个简单的web服务器

    http协议 若是两个人能正常的说话交流,那么他们间必定有一套统一的语言规则<在网络上服务器与客户端能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertext tran ...

  8. how tomcat works读书笔记 七 日志记录器

    大家可以松一口气了,这个组件比较简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. packag ...

  9. How Tomcat Works 读书笔记 八 载入器 上

    Java的类载入器 详细资料见 http://blog.csdn.net/dlf123321/article/details/39957175 http://blog.csdn.net/dlf1233 ...

随机推荐

  1. github pages + Hexo + 域名绑定搭建个人博客

    环境 Windows 10(64 位) Git-2.7.4-64-bit node-v4.4.7-x64 如果上述软件已经安装的,跳过,没有安装的下载安装. 1,git下载安装(https://git ...

  2. Linux之read命令使用

    read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个 ...

  3. 5.0、Android Studio调试你的应用

    Android Studio包含了一个调试器,允许你调试运行在Android虚拟机或连接的Android设备的应用.通过Android Studio的调试器,你可以: 1. 选择你调试设备的app 2 ...

  4. [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan ------------------ ...

  5. UNIX网络编程——客户/服务器程序设计示范(总结)

    (1)当系统负载较轻是,每来一个客户请求现场派生一个子进程为之服务的传统并发服务器程序模型就足够了.这个模型甚至可以与inetd结合使用,也就是inetd处理每个连接的接收.我们的其他意见是就重负荷运 ...

  6. EBS开发技术之Patch安装

     Contents Document Control........................................................................ ...

  7. 手把手教你轻松实现listview上拉加载

    上篇讲了如何简单快速的的实现listview下拉刷新,那么本篇将讲解如何简单快速的实现上拉加载更多.其实,如果你已经理解了下拉刷新的实现过程,那么实现上拉加载更多将变得轻松起来,原理完全一致,甚至实现 ...

  8. J2EE Exception:WELD-001408 Unsatisfied dependencies for type [SelectModelFactory] with qualifiers [@

    Issue: When you inject some resources using @Inject, you may encounter following exception after app ...

  9. 【一天一道LeetCode】#112. Path Sum

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  10. 刀片服务器和磁盘阵列卡(RAID)技术---永和维护

    近期客户需要更换服务器,客户把买好的服务器送来了,原本感觉很小的一个服务器,可当我看到的时候是一个大个的又长又宽,类似机房服务器的那种,后来米老师给大致讲解一番:这个是刀片服务器. 刀片服务器是指在标 ...