The method getJspApplicationContext(ServletContext

The method getJspApplicationContext(ServletContext) is undefined for the typ

搜索了半天,原来是类加载机制的问题,在tomcat的conf下的context.xml里面加上一句

<Loader delegate="true" />

原因很简单,就是加载先后的问题,一般没什么特殊原因这个配置还是要写的

具体就是:

首先,你需要了解一下JVM的Classloader机制(详细请自行google之)。
简而言之,JVM的classloader加载继承关系分为BootstarpClassLoader --> ExtClassLoader --> SystemClassLoader,应用的WebAppClassLoader继承自SystemClassLoader,在加载具体某个类时,一般会先委托给父类ClassLoader,当父类ClassLoader无法加载成功时,才会再由子类ClassLoader尝试加载,这就是所谓的delegate机制。

其次,Tomcat在jvm的ClassLoader机制上增加了几个继承层次。
SystemClassLoader --> CommonClassLoader -->(ServerClassLoader | SharedClassLoader --> WebAppClassLoader)。
CommonClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中common.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/lib下的文件。该loader加载的类为tomcat服务器和tomcat下面的所有webApp所共享。
ServerClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中server.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/server下的文件。该loader加载的类为tomcat服务器所独有核心类,tomcat下面的WebApp无法访问。
SharedClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中shared.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/shared下的文件。该loader加载的类为tomcat下面的所有webApp所共享。
WebAppClassLoader用来加载${CATALINA_HOME}/webapps/目录下每个WebApp应用的/WEB-INF/class,/WEB-INF/lib的类文件,每个WebApp对应一个WebAppClassLoader,用来加载其所需要的类文件。

最后,说一下delegate配置的意义。
True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

在此说一下配置为False需要注意的问题:一旦配置为False,如果你在WebApp中自己定义了一个java.lang.String,则这个String类会有可能覆盖掉jdk中的String类,这也许不是你想要的结果。另外对于多个WebApp公用jar包,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题。

出自:http://segmentfault.com/q/1010000000155690

时间: 2024-11-05 22:33:24

The method getJspApplicationContext(ServletContext的相关文章

The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

An error occurred at line: 23 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.a

报错:An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 加入Myeclipse自带的java EE 6 library即可解决:

Maven常见异常解决《二》

下面是一些Maven工程的常见异常:   1.ReasonPhrase: Forbidden: |--- 1.注意用户的权限以及角色role的设置,通常是没有权限才会被禁止的. 2.Failed to collect dependencies: |--- 1.须要把parentproject,也就是package是pom的那个project先install一下.或者deploy |--- 2.须要注意在设置的<profile>工厂里面能否够訪问,假设直接訪问public分组,那么就要检查pub

Tomcat中部署后JspFactory报异常的解决方案

The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory的异常的原因及解决办法原因: 是由于工程的WEB-INF/lib下存在jsp-api.jar.servlet-api.jar,与Tomcat自带的jar包冲突造成的. 解决办法: 删除WEB工程Lib目录中的jsp-api.jar.servlet-api.jar,重新启动Tomcat服务问题解决. 在创建工程时,jsp-a

Maven常见异常及解决方法(本篇停更至16-4-12)

本篇文章记录了老猫在学习整合Maven和SSH过程中遇到的问题,有的问题可以解决.有的问题还不能解决. 方法不一定适合全部的环境.但绝对是本人常遇到的常见异常.在这里做一个笔记和记录,也分享给大家,希望大家多多给出见解. 假设有不同的见解,请依照编号写出自己的见解吧,老猫愿闻其详! 此文老猫原创.转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/46633287 很多其它有关老猫的文章:http://blog.csdn.net/nt

Unable to compile class for JSP 错误的解决过程。

刚配置好Tomcat.启动项目没问题.然后一访问就报错了. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012-8-18 19:17:40 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception org.apac

cms-幻灯片的实现

1.其实幻灯片的后台代码和之前的最新动态和推荐是一样的,只是前台遍历的时候不一样罢了 2.代码: 2.1:帖子mapper查询出幻灯片图片: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.d

cms-最近更新

在这一讲中有几个很重要的地方需要注意: 1.在查询帖子的时候需要把帖子类型id带到帖子类型表中把类型查询出来 2.在字帖子查询语句中用limt限制查询那个阶段的帖子 3.在界面显示的时候需要用到字符串截取标签和日期时间标签 2.代码实现 2.1创建帖子类: package com.open1111.entity; import java.util.Date; /** * 帖子实体类 * @author user * */public class Article { private Integer

cms-静态化组件

1.要让我们的网站性能更好,那么有的东西是需要做静态化的.做静态化步骤: 1.1在web.xml中配置监听器 1.2.创建一个bean用来实现静态化 web.xml <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/