2
웹 컨텍스트로 Jetty 서버를 시작하려고합니다. 전달중인 web.xml
에는 아래 코드를 실행하는 코드의 클래스 경로에서 (다른 이유로) 사용자 지정 클래스가 포함되어 있습니다. 방파제가 web.xml
에 지정된 수업을 찾을 수 없기를 기대하지만, 그렇지 않습니다.WebAppContext를 별도로 시작하는 중
new Server
을 WebAppContext
과 같이 구성하면 이 아닌로드 컨텍스트의 현재 컨텍스트가 어떻게됩니까?
아래 코드는 Scala이지만, 내가 시도한 것을 알려줄 것입니다. 완벽하게 괜찮은 자바로 대답한다면.
// A reference to the root class loader, this one should not know
// about any of my custom classes
val rootLoader = {
// Recursive method to find the loader without parent
def parent(loader:ClassLoader):ClassLoader = {
val p = loader.getParent
if (p == null) loader else parent(p)
}
parent(getClass.getClassLoader)
}
// Check if the custom ClassFile is available from the rootLoader
val className = classOf[my.custom.servlet.ClassFile].getName
val classAvailable =
try {
rootLoader.loadClass(className)
true
} catch {
case e:ClassNotFoundException => false
}
// If I'm not insane no error is thrown
if (classAvailable) sys.error("Class should not be available")
// Create a WebAppContext using an empty WebAppClassLoader
// based on that rootLoader
val context = new WebAppContext()
context.setParentLoaderPriority(false)
//context.setClassLoader(new WebAppClassLoader(rootLoader, context))
context.setClassLoader(rootLoader)
context.setContextPath("/")
context.setDescriptor(webXmlFile)
context.setResourceBase(resourceBase)
// Create an start the server with the context
val server = new Server(port)
server.setHandler(context)
server.start()
나는 문제의 클래스를 찾을 수있는 컨텍스트를하지
을 기대했다.
질문이 명확하지 않습니다. 당신이 웹 클래스를 오버라이드하는 서버 클래스를 갖고 싶어하는 것처럼 보입니까? 그게 맞습니까? –
@JoakimErdfelt 결과적으로'webAppContext'가 클래스 로더를 사용하여'web.xml'에서 (문자열로) 클래스를로드하기를 원합니다. 그러나 클래스 (다른 버전)는 서버를 만드는 코드에도 있습니다.위의 코드는'WebAppContext'가 클래스 로더를 존중하지 않는 것처럼 보입니다 : 클래스를 찾습니다. 이것은 'WebAppContext'가 클래스를 찾으려고하는 다른 클래스 로더에 도달하고 있다는 것을 보여주는 간단한 예제입니다. 내가 뭘 잘못하고 있는지 궁금해. 그 수업을 찾을 수 없길 기대해. – EECOLOR
예제가 너무 많아서 클래스 로더 조작을 시도하고 있지만 더 나은 방법이 될 수 있지만 처음에는 목표에 도달했는지 이해해야합니다. 따라서 webapp의 web.xml에 정의 된 클래스이며 webapp 클래스 로더가 아닌 서버 클래스 로더 (특정 클래스가 필요함)에서 클래스를로드하려고합니다. 클래스는 이름이 같지만 기능이 없습니다.). 그 질문에 대한 올바른 진술입니까? –