Tomcat 시리즈 4 - Tomcat 내장
10853 단어 tomcat
1.Tomcat7RunnerCli
tomcat 를 내장 한 입 구 는 Tomcat 7 RunnerCli 입 니 다. main 방법 을 보 세 요.
public static void main( String[] args )
throws Exception
{
CommandLineParser parser = new GnuParser();
CommandLine line = null;
try
{
line = parser.parse( Tomcat7RunnerCli.options, args );
}
catch ( ParseException e )
{
...//
}
...//
Tomcat7Runner tomcat7Runner = new Tomcat7Runner();
tomcat7Runner.runtimeProperties = buildStandaloneProperties();
if ( line.hasOption( serverXmlPath.getOpt() ) )
{
tomcat7Runner.serverXmlPath = line.getOptionValue( serverXmlPath.getOpt() );
}
String port = tomcat7Runner.runtimeProperties.getProperty( Tomcat7Runner.HTTP_PORT_KEY );
if ( port != null)
{
tomcat7Runner.httpPort = Integer.parseInt( port );
}
// cli win for the port
if ( line.hasOption( httpPort.getOpt() ) )
{
tomcat7Runner.httpPort = Integer.parseInt( line.getOptionValue( httpPort.getOpt() ) );
}
if ( line.hasOption( httpsPort.getOpt() ) )
{
tomcat7Runner.httpsPort = Integer.parseInt( line.getOptionValue( httpsPort.getOpt() ) );
}
if ( line.hasOption( ajpPort.getOpt() ) )
{
tomcat7Runner.ajpPort = Integer.parseInt( line.getOptionValue( ajpPort.getOpt() ) );
}
if ( line.hasOption( resetExtract.getOpt() ) )
{
tomcat7Runner.resetExtract = true;
}
if ( line.hasOption( debug.getOpt() ) )
{
tomcat7Runner.debug = true;
}
if ( line.hasOption( httpProtocol.getOpt() ) )
{
tomcat7Runner.httpProtocol = line.getOptionValue( httpProtocol.getOpt() );
}
...//
// here we go
tomcat7Runner.run();
}
이 중 Tomcat 7 Runner 대상 을 만 들 고 속성 을 설정 해 run 방법 을 호출 했다.
2.Tomcat7Runner
public void run()
throws Exception
{
...//
// create tomcat various paths
// tomcat 4
new File( extractDirectory, "conf" ).mkdirs();
new File( extractDirectory, "logs" ).mkdirs();
new File( extractDirectory, "webapps" ).mkdirs();
new File( extractDirectory, "work" ).mkdirs();
File tmpDir = new File( extractDirectory, "temp" );
tmpDir.mkdirs();
...//
// start with a server.xml
// server.xml , Catalina , start
if ( serverXmlPath != null || useServerXml() )
{
container = new Catalina();
container.setUseNaming( this.enableNaming() );
if ( serverXmlPath != null && new File( serverXmlPath ).exists() )
{
container.setConfig( serverXmlPath );
}
else
{
container.setConfig( new File( extractDirectory, "conf/server.xml" ).getAbsolutePath() );
}
container.start();
}
else
{
// server.xml , Tomcat
tomcat = new Tomcat()
{
public Context addWebapp( Host host, String url, String name, String path )
{
// Context
Context ctx = new StandardContext();
ctx.setName( name );
ctx.setPath( url );
ctx.setDocBase( path );
ContextConfig ctxCfg = new ContextConfig();
ctx.addLifecycleListener( ctxCfg );
ctxCfg.setDefaultWebXml( new File( extractDirectory, "conf/web.xml" ).getAbsolutePath() );
if ( host == null )
{
// Host
getHost().addChild( ctx );
}
else
{
host.addChild( ctx );
}
return ctx;
}
};
if ( this.enableNaming() )
{
System.setProperty( "catalina.useNaming", "true" );
tomcat.enableNaming();
}
// ,
tomcat.getHost().setAppBase( new File( extractDirectory, "webapps" ).getAbsolutePath() );
String connectorHttpProtocol = runtimeProperties.getProperty( HTTP_PROTOCOL_KEY );
if ( httpProtocol != null && httpProtocol.trim().length() > 0 )
{
connectorHttpProtocol = httpProtocol;
}
debugMessage( "use connectorHttpProtocol:" + connectorHttpProtocol );
// Connector
if ( httpPort > 0 )
{
Connector connector = new Connector( connectorHttpProtocol );
connector.setPort( httpPort );
if ( httpsPort > 0 )
{
connector.setRedirectPort( httpsPort );
}
connector.setURIEncoding( uriEncoding );
tomcat.getService().addConnector( connector );
tomcat.setConnector( connector );
}
// add a default acces log valve
AccessLogValve alv = new AccessLogValve();
alv.setDirectory( new File( extractDirectory, "logs" ).getAbsolutePath() );
alv.setPattern( runtimeProperties.getProperty( Tomcat7Runner.ACCESS_LOG_VALVE_FORMAT_KEY ) );
tomcat.getHost().getPipeline().addValve( alv );
// create https connector
if ( httpsPort > 0 )
{
Connector httpsConnector = new Connector( connectorHttpProtocol );
httpsConnector.setPort( httpsPort );
httpsConnector.setSecure( true );
httpsConnector.setProperty( "SSLEnabled", "true" );
httpsConnector.setProperty( "sslProtocol", "TLS" );
httpsConnector.setURIEncoding( uriEncoding );
String keystoreFile = System.getProperty( "javax.net.ssl.keyStore" );
String keystorePass = System.getProperty( "javax.net.ssl.keyStorePassword" );
String keystoreType = System.getProperty( "javax.net.ssl.keyStoreType", "jks" );
if ( keystoreFile != null )
{
httpsConnector.setAttribute( "keystoreFile", keystoreFile );
}
if ( keystorePass != null )
{
httpsConnector.setAttribute( "keystorePass", keystorePass );
}
httpsConnector.setAttribute( "keystoreType", keystoreType );
String truststoreFile = System.getProperty( "javax.net.ssl.trustStore" );
String truststorePass = System.getProperty( "javax.net.ssl.trustStorePassword" );
String truststoreType = System.getProperty( "javax.net.ssl.trustStoreType", "jks" );
if ( truststoreFile != null )
{
httpsConnector.setAttribute( "truststoreFile", truststoreFile );
}
if ( truststorePass != null )
{
httpsConnector.setAttribute( "truststorePass", truststorePass );
}
httpsConnector.setAttribute( "truststoreType", truststoreType );
httpsConnector.setAttribute( "clientAuth", clientAuth );
httpsConnector.setAttribute( "keyAlias", keyAlias );
tomcat.getService().addConnector( httpsConnector );
if ( httpPort <= 0 )
{
tomcat.setConnector( httpsConnector );
}
}
// create ajp connector
if ( ajpPort > 0 )
{
Connector ajpConnector = new Connector( "org.apache.coyote.ajp.AjpProtocol" );
ajpConnector.setPort( ajpPort );
ajpConnector.setURIEncoding( uriEncoding );
tomcat.getService().addConnector( ajpConnector );
}
// add webapps
for ( Map.Entry entry : this.webappWarPerContext.entrySet() )
{
String baseDir = null;
Context context = null;
if ( entry.getKey().equals( "/" ) )
{
baseDir = new File( extractDirectory, "webapps/ROOT.war" ).getAbsolutePath();
context = tomcat.addWebapp( "", baseDir );
}
else
{
baseDir = new File( extractDirectory, "webapps/" + entry.getValue() ).getAbsolutePath();
context = tomcat.addWebapp( entry.getKey(), baseDir );
}
URL contextFileUrl = getContextXml( baseDir );
if ( contextFileUrl != null )
{
context.setConfigFile( contextFileUrl );
}
}
if ( codeSourceWar != null )
{
String baseDir = new File( extractDirectory, "webapps/" + codeSourceWar.getName() ).getAbsolutePath();
Context context = tomcat.addWebapp( codeSourceContextPath, baseDir );
URL contextFileUrl = getContextXml( baseDir );
if ( contextFileUrl != null )
{
context.setConfigFile( contextFileUrl );
}
}
// tomcat
tomcat.start();
Runtime.getRuntime().addShutdownHook( new TomcatShutdownHook() );
}
waitIndefinitely();
}
3.Tomcat
public void start() throws LifecycleException {
getServer();
getConnector();
server.start();
}
여기 서 잘 알 고 있 습 니 다. 앞에서 말 한 start 방법 을 사용 하 였 습 니 다.
4. 총화
내 장 된 tomcat 는 본질 적 으로 마지막 으로 tomcat 자체 가 시작 하 는 api 를 호출 했다.단지 앞에서 초기 화 되 고 디 렉 터 리 를 만 드 는 다른 작업 을 많이 했 을 뿐이다.또 하나의 재 미 있 는 점 은 server. xml 파일 이 있 으 면 Catalina 대상 을 직접 만 들 고 start 방법 을 호출 하 는 것 입 니 다. 이것 도 우리 앞의 몇 편의 글 분석의 시작 방식 입 니 다.이 파일 이 없 으 면 tomcat 각 용 기 를 만 들 고 시작 합 니 다. 이때 tomcat 도 적용 되 지 않 았 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EC2 인스턴스에 Tomcat 설치전제 조건: Amazon 계정이 있어야 합니다. Amazon 계정에 로그인하고 EC2 인스턴스를 시작합니다. 여기에서 프리 티어를 선택했고 Amazon Linux 2를 실행하는 EC2 인스턴스를 시작했습니다. 시작 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.