tomcat为什么不加载extclassloader

tomcat为什么不加载extclassloader,第1张

Tomcat是基于Java Servlet和JSP规范的Web服务器,使用Java类库进行开发和运行。它自带了多个类加载器,包括Bootstrap ClassLoader、Common ClassLoader、Webapp ClassLoader等,用于加载不同位置的类。

其中,ExtClassLoader是Java虚拟毁局机内置的一个系统级别橘余者的类加载器,用于从jre/lib/ext目录中圆薯加载类或jar包。但是,Tomcat默认情况下不会加载ExtClassLoader,这是因为:

安全性考虑:如果允许加载ExtClassLoader,可能会出现安全漏洞,因为该类加载器加载的类可以访问系统级别的资源和功能。

可移植性考虑:如果Tomcat加载了ExtClassLoader,会导致应用程序依赖于Java运行时环境(JRE),降低了应用程序的可移植性。

因此,在默认情况下,Tomcat不会从jre/lib/ext目录加载类或jar包。如果需要加载这些类或jar包,可以将它们放在共享库(shared)目录下,并配置Common ClassLoader或Webapp ClassLoader来加载它们。

如果web.xml中配置无误的话,

你看看WEB-INF/classes下有没有web.xml中所映射的类,

注意你所写的Servlet如果带有包声明,

在WEB-INF/classes下的类路径要带上完整的包结构路径.

你把你放置代码的路径贴出来我看看,

404就是找不到资源,

不是版本兼容的问题,如果是版本兼容的问题,

那应该是500错误.

孙鑫的代码我看过,

http://localhost:8888/ch06/hello访问的应该是这个映射:

<servlet>

<servlet-name>helloworld</servlet-name>

<servlet-class>SimpleHello</servlet-class>

</servlet>

你的目录结构是这样的吗?

├—webapps

│ │

│ ├—ch06

│ │ │ login.html

│ │ │ success.html

│ │ │ welcome.html

│ │ │

│ │ ├—src

│ │ │ CounterServlet.java

│ │ │ LoginServlet.java

│ │ │ LoginServlet2.java

│ │ │ OutputInfo.java

│ │ │ PortalServlet.java

│ │ │ SimpleHello.java

│ │ │ WelcomeYou.java

│ │ │

│ │ └—WEB-INF

│ │ │ web.xml

│ │ │

│ │ └—classes

│ │ CounterServlet.class

│ │ LoginServlet.class

│ │ LoginServlet2.class

│ │ OutputInfo.class

│ │ PortalServlet.class

│ │ SimpleHello.class

│ │ WelcomeYou.class

如果是这样的结构,web.xml也没问题的话,

不可带好能访问出404错误的.

如果你自己没把ch06放置于Tomcat的webapps目录下,

而是在别的地方,

注意你的server.xml配置是否正确,

如果你改动了server.xml,

贴出来看看.

一般来说,在Tomcat中webapps下的每个文件夹都是一个独立的Web应用,

ROOT文件夹是Tomcat的一个默认的Web应用,你输入http://localhost:8888

的时候,默认的访问就是ROOT文件夹下的index.html

ch06算是一个简单的Web应用,你不能在ROOT这个Web应用嵌套另一个Web应用,

对于静态页面来说,只要URL路径与真实的Web应用的目录结构路径一致,就能访问,但如果要访问Servlet,其class类文件必须放于Web应用(不要嵌套)的蠢睁铅WEB-INF/classes目早饥录下.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12238393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存