How tomcat works 读书笔记十七 启动tomcat 下
在上一节中,我们程序的起始位置还是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
- @echo off //隐藏命令
- rem Licensed to the Apache Software Foundation (ASF) under one or more
- rem contributor license agreements. See the NOTICE file distributed with
- rem this work for additional information regarding copyright ownership.
- rem The ASF licenses this file to You under the Apache License, Version 2.0
- rem (the "License"); you may not use this file except in compliance with
- rem the License. You may obtain a copy of the License at
- rem
- rem http://www.apache.org/licenses/LICENSE-2.0
- rem
- rem Unless required by applicable law or agreed to in writing, software
- rem distributed under the License is distributed on an "AS IS" BASIS,
- rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- rem See the License for the specific language governing permissions and
- rem limitations under the License.
- //上面的是注释 不管 os就是windows_NT setlocal上面有
- if "%OS%" == "Windows_NT" setlocal
- rem ---------------------------------------------------------------------------
- rem Start/Stop Script for the CATALINA Server
- rem
- rem Environment Variable Prerequisites
- rem
- rem Do not set the variables in this script. Instead put them into a script
- rem setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
- rem
- rem CATALINA_HOME May point at your Catalina "build" directory.
- rem
- rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
- rem of a Catalina installation. If not present, resolves to
- rem the same directory that CATALINA_HOME points to.
- rem
- rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
- rem "run" or "debug" command is executed.
- rem Include here and not in JAVA_OPTS all options, that should
- rem only be used by Tomcat itself, not by the stop process,
- rem the version command etc.
- rem Examples are heap size, GC logging, JMX ports etc.
- rem
- rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
- rem the JVM should use (java.io.tmpdir). Defaults to
- rem %CATALINA_BASE%\temp.
- rem
- rem JAVA_HOME Must point at your Java Development Kit installation.
- rem Required to run the with the "debug" argument.
- rem
- rem JRE_HOME Must point at your Java Runtime installation.
- rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
- rem are both set, JRE_HOME is used.
- rem
- rem JAVA_OPTS (Optional) Java runtime options used when any command
- rem is executed.
- rem Include here and not in CATALINA_OPTS all options, that
- rem should be used by Tomcat and also by the stop process,
- rem the version command etc.
- rem Most options should go into CATALINA_OPTS.
- rem
- rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
- rem containing some jars in order to allow replacement of APIs
- rem created outside of the JCP (i.e. DOM and SAX from W3C).
- rem It can also be used to update the XML parser implementation.
- rem Defaults to $CATALINA_HOME/endorsed.
- rem
- rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
- rem command is executed. The default is "dt_socket".
- rem
- rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
- rem command is executed. The default is 8000.
- rem
- rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
- rem command is executed. Specifies whether JVM should suspend
- rem execution immediately after startup. Default is "n".
- rem
- rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
- rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
- rem and JPDA_SUSPEND are ignored. Thus, all required jpda
- rem options MUST be specified. The default is:
- rem
- rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
- rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
- rem
- rem LOGGING_CONFIG (Optional) Override Tomcat's logging config file
- rem Example (all one line)
- rem set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
- rem
- rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager
- rem Example (all one line)
- rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
- rem
- rem TITLE (Optional) Specify the title of Tomcat window. The default
- rem TITLE is Tomcat if it's not specified.
- rem Example (all one line)
- rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
- rem
- rem
- rem
- rem $Id: catalina.bat 1344732 2012-05-31 14:08:02Z kkolinko $
- rem ---------------------------------------------------------------------------
- rem Suppress Terminate batch job on CTRL+C
- if not ""%1"" == ""run"" goto mainEntry //如果第一个参数不是run 去mainEntry标签 11行后
- if "%TEMP%" == "" goto mainEntry
- if exist "%TEMP%\%~nx0.run" goto mainEntry
- echo Y>"%TEMP%\%~nx0.run"
- if not exist "%TEMP%\%~nx0.run" goto mainEntry
- echo Y>"%TEMP%\%~nx0.Y"
- call "%~f0" %* <"%TEMP%\%~nx0.Y"
- rem Use provided errorlevel
- set RETVAL=%ERRORLEVEL%
- del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
- exit /B %RETVAL%
- :mainEntry //看不懂
- del /Q "%TEMP%\%~nx0.run" >NUL 2>&1
- rem Guess CATALINA_HOME if not defined
- set "CURRENT_DIR=%cd%" //cd就是当前路径
- if not "%CATALINA_HOME%" == "" goto gotHome //不等于空 就去gotHome
- set "CATALINA_HOME=%CURRENT_DIR%" //要是等于空 就认为catalina.bat所在的文件夹就是 //CATALINA_HOME
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
- cd .. //判定CATALINA_HOME里是不是存在bin\catalina.bat
- //如果不存在 返回上一级目录
- //要记得正常情况下 catalina.bat本来就在bin目录下
- set "CATALINA_HOME=%cd%"
- cd "%CURRENT_DIR%"
- :gotHome
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome //到这里就好了 存在这个bat文件 去okhome //看看
- echo The CATALINA_HOME environment variable is not defined correctly
- echo This environment variable is needed to run this program
- goto end
- :okHome
- rem Copy CATALINA_BASE from CATALINA_HOME if not defined
- if not "%CATALINA_BASE%" == "" goto gotBase //英文注释说的很清楚了
- set "CATALINA_BASE=%CATALINA_HOME%"
- :gotBase
- rem Ensure that any user defined CLASSPATH variables are not used on startup,
- rem but allow them to be specified in setenv.bat, in rare case when it is needed.
- set CLASSPATH=
- rem Get standard environment variables //就是调用setenv.bat
- if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
- call "%CATALINA_BASE%\bin\setenv.bat"
- goto setenvDone
- :checkSetenvHome
- if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
- :setenvDone
- rem Get standard Java environment variables //调用setclasspath
- if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
- echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
- echo This file is needed to run this program
- goto end
- :okSetclasspath
- set BASEDIR=%CATALINA_HOME%
- call "%CATALINA_HOME%\bin\setclasspath.bat"
- //setclasspath.bat 会检查环境变量java_home
- //并且会设置以下的变量
- //set JAVA_ENDORSED_DIRS=%BASEDIR%\common\endorsed
- //set CLASSPATH=%JAVA_HOME%\lib\tools.jar
- //set _RUNJAVA="%JAVA_HOME%\bin\java"
- //set _RUNJAVAW="%JAVA_HOME%\bin\javaw"
- //set _RUNJDB="%JAVA_HOME%\bin\jdb"
- //set _RUNJAVAC="%JAVA_HOME%\bin\javac"
- rem Add on extra jar files to CLASSPATH
- if "%JSSE_HOME%" == "" goto noJsse //看英文注释
- set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar
- :noJsse
- set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar
- if not "%CATALINA_BASE%" == "" goto gotBase
- set CATALINA_BASE=%CATALINA_HOME%
- :gotBase
- if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
- set CATALINA_TMPDIR=%CATALINA_BASE%\temp
- :gotTmpdir
- rem ----- Execute The Requested Command ---------------------------------------
- echo Using CATALINA_BASE: "%CATALINA_BASE%"
- echo Using CATALINA_HOME: "%CATALINA_HOME%"
- echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
- if ""%1"" == ""debug"" goto use_jdk
- echo Using JRE_HOME: "%JRE_HOME%"
- goto java_dir_displayed
- :use_jdk
- echo Using JAVA_HOME: "%JAVA_HOME%"
- :java_dir_displayed
- echo Using CLASSPATH: "%CLASSPATH%"
- set _EXECJAVA=%_RUNJAVA%
- set MAINCLASS=org.apache.catalina.startup.Bootstrap
- set ACTION=start
- set SECURITY_POLICY_FILE=
- set DEBUG_OPTS=
- set JPDA=
- if not ""%1"" == ""jpda"" goto noJpda //第一个参数是start 去看nojpda 15行后
- set JPDA=jpda
- if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
- set JPDA_TRANSPORT=dt_socket
- :gotJpdaTransport
- if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
- set JPDA_ADDRESS=8000
- :gotJpdaAddress
- if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
- set JPDA_SUSPEND=n
- :gotJpdaSuspend
- if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
- set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
- :gotJpdaOpts
- shift
- :noJpda
- if ""%1"" == ""debug"" goto doDebug
- if ""%1"" == ""run"" goto doRun
- if ""%1"" == ""start"" goto doStart //呵呵
- if ""%1"" == ""stop"" goto doStop
- if ""%1"" == ""configtest"" goto doConfigTest
- if ""%1"" == ""version"" goto doVersion
- echo Usage: catalina ( commands ... )
- echo commands:
- echo debug Start Catalina in a debugger
- echo debug -security Debug Catalina with a security manager
- echo jpda start Start Catalina under JPDA debugger
- echo run Start Catalina in the current window
- echo run -security Start in the current window with security manager
- echo start Start Catalina in a separate window
- echo start -security Start in a separate window with security manager
- echo stop Stop Catalina
- echo configtest Run a basic syntax check on server.xml
- echo version What version of tomcat are you running?
- goto end
- :doDebug
- shift
- set _EXECJAVA=%_RUNJDB%
- set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
- if not ""%1"" == ""-security"" goto execCmd
- shift
- echo Using Security Manager
- set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
- goto execCmd
- :doRun
- shift
- if not ""%1"" == ""-security"" goto execCmd
- shift
- echo Using Security Manager
- set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
- goto execCmd
- :doStart
- shift //移动参数
- if not "%OS%" == "Windows_NT" goto noTitle //刚才已经说了 os就是Windows_NT
- if "%TITLE%" == "" set TITLE=Tomcat
- set _EXECJAVA=start "%TITLE%" %_RUNJAVA% //title是tomcat
- goto gotTitle //_EXECJAVA这就是以后的命令
- :noTitle
- set _EXECJAVA=start %_RUNJAVA%
- :gotTitle //之前移动了参数了 但是我们确实没有第二个参数 去看execCmd 24行后
- if not ""%1"" == ""-security"" goto execCmd
- shift
- echo Using Security Manager
- set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
- goto execCmd
- :doStop
- shift
- set ACTION=stop
- set CATALINA_OPTS=
- goto execCmd
- :doConfigTest
- shift
- set ACTION=configtest
- set CATALINA_OPTS=
- goto execCmd
- :doVersion
- %_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
- goto end
- :execCmd
- rem Get remaining unshifted command line arguments and save them in the
- set CMD_LINE_ARGS=
- :setArgs //此时的第一个参数为空 所以去看doneSetArgs
- if ""%1""=="""" goto doneSetArgs
- set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
- shift
- goto setArgs
- :doneSetArgs
- rem Execute Java with the applicable properties
- if not "%JPDA%" == "" goto doJpda //两个变量都为空
- if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
- %_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%
- // 在我的电脑上将上面的变量赋值后就是
- //start "Tomcat" "C:\j2sdk1.4.2_02\bin\java" -
- //Djava.endorsed.dirs="..\common\endorsed" -classpath
- //"C:\j2sdk1.4.2_02\lib\tools.jar;..\bin\bootstrap.jar" -
- //Dcatalina.base=".." -Dcatalina,home=".." -Djava.io.tmpdir="..\temp"
- //org.apache.catalina.startup.Bootstrap start
- //解释一下
- //启动一个新的窗口叫tomcat 然后就调用java命令 从-Djava到/temp都是参数
- //运行的是org.apache.catalina.startup.Bootstrap 参数是start
- //我累个去 重要写完啦
- //感谢glt
- goto end //去看end
- :doSecurity
- %_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%
- goto end
- :doJpda
- if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
- %_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%
- goto end
- :doSecurityJpda
- %_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%
- goto end
- :end //对end在这
其实还没有到最开始的那个类
当当当当~~~
Startup.bat
- @echo off
- if "%OS%" == "Windows_NT" setlocal
- rem ---------------------------------------------------------------------------
- rem Start script for the CATALINA Server
- rem
- rem $Id: startup.bat,v 1.4 2002/01/15 02:55:38 patrickl Exp $
- rem ---------------------------------------------------------------------------
- rem Guess CATALINA_HOME if not defined
- if not "%CATALINA_HOME%" == "" goto gotHome
- set CATALINA_HOME=. // 一个点是当前目录
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
- set CATALINA_HOME=.. //两个点事上级目录 哎 今天涨姿势了
- :gotHome
- //上一级目录里面是有bin文件夹的 所以去okhome
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
- echo The CATALINA_HOME environment variable is not defined correctly
- echo This environment variable is needed to run this program
- goto end
- :okHome
- set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat
- rem Check that target executable exists
- if exist "%EXECUTABLE%" goto okExec //EXECUTABLE肯定有呀 去看okExec
- echo Cannot find %EXECUTABLE%
- echo This file is needed to run this program
- goto end
- :okExec
- rem Get remaining unshifted command line arguments and save them in the
- set CMD_LINE_ARGS=
- :setArgs
- if ""%1""=="""" goto doneSetArgs //这里没有参数 所以去doneSetArgs
- set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
- shift
- goto setArgs
- :doneSetArgs
- call "%EXECUTABLE%" start %CMD_LINE_ARGS% //调用bin\catalina.bat并且参数为start
- :end
tomcat终于结束了 感谢glt
How tomcat works 读书笔记十七 启动tomcat 下的更多相关文章
- How tomcat works 读书笔记十七 启动tomcat 上
一路跋山涉水,这是最后一章了. 关于tomcat的启动,有两个类,一个是Catalina类,一个是Bootstrap类. 理论上,两个类可以和到一起,但是为了支持多种运行模式,又把他们分开了. 为了让 ...
- How tomcat works 读书笔记十二 StandardContext 下
对重载的支持 tomcat里容器对重载功能的支持是依靠Load的(在目前就是WebLoader).当在绑定载入器的容器时 public void setContainer(Container cont ...
- how tomcat works 读书笔记 八 载入器下
载入类 我们看看之前的文章,这一节就从SimpleWrapper的loadServlet讲起. SimpleWrapper.java如下(省略了try catch及其他部分代码) public Ser ...
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
- how tomcat works 读书笔记四 tomcat的默认连接器
事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache ...
- how tomcat works 读书笔记(一)----------一个简单的webserver
http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...
- how tomcat works 读书笔记(一)----------一个简单的web服务器
http协议 若是两个人能正常的说话交流,那么他们间必定有一套统一的语言规则<在网络上服务器与客户端能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertext tran ...
- how tomcat works读书笔记 七 日志记录器
大家可以松一口气了,这个组件比较简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. packag ...
- How Tomcat Works 读书笔记 八 载入器 上
Java的类载入器 详细资料见 http://blog.csdn.net/dlf123321/article/details/39957175 http://blog.csdn.net/dlf1233 ...
随机推荐
- github pages + Hexo + 域名绑定搭建个人博客
环境 Windows 10(64 位) Git-2.7.4-64-bit node-v4.4.7-x64 如果上述软件已经安装的,跳过,没有安装的下载安装. 1,git下载安装(https://git ...
- Linux之read命令使用
read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个 ...
- 5.0、Android Studio调试你的应用
Android Studio包含了一个调试器,允许你调试运行在Android虚拟机或连接的Android设备的应用.通过Android Studio的调试器,你可以: 1. 选择你调试设备的app 2 ...
- [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan ------------------ ...
- UNIX网络编程——客户/服务器程序设计示范(总结)
(1)当系统负载较轻是,每来一个客户请求现场派生一个子进程为之服务的传统并发服务器程序模型就足够了.这个模型甚至可以与inetd结合使用,也就是inetd处理每个连接的接收.我们的其他意见是就重负荷运 ...
- EBS开发技术之Patch安装
Contents Document Control........................................................................ ...
- 手把手教你轻松实现listview上拉加载
上篇讲了如何简单快速的的实现listview下拉刷新,那么本篇将讲解如何简单快速的实现上拉加载更多.其实,如果你已经理解了下拉刷新的实现过程,那么实现上拉加载更多将变得轻松起来,原理完全一致,甚至实现 ...
- 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 ...
- 【一天一道LeetCode】#112. Path Sum
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 刀片服务器和磁盘阵列卡(RAID)技术---永和维护
近期客户需要更换服务器,客户把买好的服务器送来了,原本感觉很小的一个服务器,可当我看到的时候是一个大个的又长又宽,类似机房服务器的那种,后来米老师给大致讲解一番:这个是刀片服务器. 刀片服务器是指在标 ...