📄 mod_jk2.c
字号:
void *overridesv){ jk_uriEnv_t *base = (jk_uriEnv_t *) basev; jk_uriEnv_t *overrides = (jk_uriEnv_t *)overridesv; fprintf(stderr, "Merging workerEnv \n" ); /* The 'mountcopy' option should be implemented in common. */ return overrides;}/** Standard apache callback, initialize jk. This is called after all the settings took place. */static int jk2_init(server_rec *s, ap_pool *pconf){ jk_uriEnv_t *serverEnv=(jk_uriEnv_t *) ap_get_module_config(s->module_config, &jk2_module); jk_env_t *env=workerEnv->globalEnv; ap_pool *gPool=NULL; void *data=NULL; int rc=JK_OK; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk child init\n" ); if(s->is_virtual) return OK; if(!workerEnv->was_initialized) { workerEnv->was_initialized = JK_TRUE; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.post_config() init worker env\n"); workerEnv->parentInit(env, workerEnv ); workerEnv->init(env, workerEnv ); workerEnv->server_name = (char *)ap_get_server_version();#if MODULE_MAGIC_NUMBER >= 19980527 /* Tell apache we're here */ ap_add_version_component(JK_EXPOSED_VERSION);#endif } return OK;}/* ========================================================================= *//* The JK module handlers *//* ========================================================================= *//** Main service method, called to forward a request to tomcat */static int jk2_handler(request_rec *r){ jk_logger_t *l=NULL; int rc; jk_worker_t *worker=NULL; jk_endpoint_t *end = NULL; jk_uriEnv_t *uriEnv; jk_env_t *env; uriEnv=ap_get_module_config( r->request_config, &jk2_module ); /* If this is a proxy request, we'll notify an error */ if(r->proxyreq) { return HTTP_INTERNAL_SERVER_ERROR; } /* not for me, try next handler */ if(uriEnv==NULL || strcmp(r->handler,JK_HANDLER)!= 0 ) return DECLINED; /* Get an env instance */ env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv ); /* Set up r->read_chunked flags for chunked encoding, if present */ if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) { env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() Can't setup client block %d\n", rc); workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return rc; } if( uriEnv == NULL ) { /* SetHandler case - per_dir config should have the worker*/ worker = workerEnv->defaultWorker; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() Default worker for %s %s\n", r->uri, worker->mbean->name); } else { worker=uriEnv->worker; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() per dir worker for %#lx %#lx\n", worker, uriEnv ); if( worker==NULL && uriEnv->workerName != NULL ) { worker=env->getByName( env,uriEnv->workerName); env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() finding worker for %s %#lx %#lx\n", uriEnv->workerName, worker, uriEnv ); uriEnv->worker=worker; } } if(worker==NULL ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, "mod_jk.handle() No worker for %s\n", r->uri); workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return 500; } { jk_ws_service_t sOnStack; jk_ws_service_t *s=&sOnStack; jk_pool_t *rPool=NULL; int rc1; /* Get a pool for the request XXX move it in workerEnv to be shared with other server adapters */ rPool= worker->rPoolCache->get( env, worker->rPoolCache ); if( rPool == NULL ) { rPool=worker->mbean->pool->create( env, worker->mbean->pool, HUGE_POOL_SIZE ); env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler(): new rpool\n"); } jk2_service_apache13_init(env, s); s->pool = rPool; s->init( env, s, worker, r ); s->is_recoverable_error = JK_FALSE; s->uriEnv = uriEnv; env->l->jkLog(env, env->l, JK_LOG_INFO, "modjk.handler() Calling %s %#lx\n", worker->mbean->name, uriEnv); rc = worker->service(env, worker, s); s->afterRequest(env, s); rPool->reset(env, rPool); rc1=worker->rPoolCache->put( env, worker->rPoolCache, rPool ); if( rc1 == JK_OK ) { rPool=NULL; } else { rPool->close(env, rPool); } } if(rc==JK_OK) { workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return OK; /* NOT r->status, even if it has changed. */ } env->l->jkLog(env, env->l, JK_LOG_ERROR, "mod_jk.handler() Error connecting to tomcat %d\n", rc); workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return 500;}/** Use the internal mod_jk mappings to find if this is a request for * tomcat and what worker to use. */static int jk2_translate(request_rec *r){ jk_uriEnv_t *uriEnv; jk_env_t *env; if(r->proxyreq) { return DECLINED; } /* Check JkMount directives, if any *//* if( workerEnv->uriMap->size == 0 ) *//* return DECLINED; */ /* get_env() */ env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv ); uriEnv = workerEnv->uriMap->mapUri(env, workerEnv->uriMap, ap_get_server_name(r), ap_get_server_port(r), r->uri); if(uriEnv==NULL || uriEnv->workerName==NULL) { workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return DECLINED; } ap_set_module_config( r->request_config, &jk2_module, uriEnv ); r->handler=JK_HANDLER; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.translate(): uriMap %s %s\n", r->uri, uriEnv->workerName); workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); return OK;}static const handler_rec jk2_handlers[] ={ { JK_MAGIC_TYPE, jk2_handler }, { JK_HANDLER, jk2_handler }, NULL};module MODULE_VAR_EXPORT jk2_module = { STANDARD_MODULE_STUFF, jk2_init, /* module initializer */ NULL, /* per-directory config creator */ NULL, /* dir config merger */ jk2_create_config, /* server config creator */ jk2_merge_config, /* server config merger */ jk2_cmds, /* command table */ jk2_handlers, /* [7] list of handlers */ jk2_translate, /* [2] filename-to-URI translation */ NULL, /* [5] check/validate user_id */ NULL, /* [6] check user_id is valid *here* */ NULL, /* [4] check access by host address */ NULL, /* XXX [7] MIME type checker/setter */ NULL, /* [8] fixups */ NULL, /* [10] logger */ NULL, /* [3] header parser */ NULL, /* apache child process initializer */ NULL, /* exit_handler, */ /* apache child process exit/cleanup */ NULL /* [1] post read_request handling */#ifdef X_EAPI /* * Extended module APIs, needed when using SSL. * STDC say that we do not have to have them as NULL but * why take a chance */ ,NULL, /* add_module */ NULL, /* remove_module */ NULL, /* rewrite_command */ NULL, /* new_connection */ NULL /* close_connection */#endif /* EAPI */};#ifdef WIN32BOOL WINAPI DllMain(HINSTANCE hInst, // Instance Handle of the DLL ULONG ulReason, // Reason why NT called this DLL LPVOID lpReserved) // Reserved parameter for future use{ GetModuleFileName( hInst, file_name, sizeof(file_name)); return TRUE;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -