如何更改默认java方法

如何更改默认java方法,java,tomcat,Java,Tomcat,我的项目面临一些问题(可能是因为windows、防病毒软件或两者兼而有之) 发生了以下错误: SEVERE: Exception Processing ErrorPage[errorCode=404, location=/404.jsp] org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP at org.apache.jasper

我的项目面临一些问题(可能是因为windows、防病毒软件或两者兼而有之)

发生了以下错误:

SEVERE: Exception Processing ErrorPage[errorCode=404, location=/404.jsp]
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP
        at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
        at org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:386)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:40001)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:472)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
        at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395)
        at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.jasper.JasperException: Unable to compile class for JSP
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:610)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)
        ... 26 more
Caused by: java.io.IOException: classFile.delete() failed
        at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:204)
        at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:166)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:510)
        at org.apache.jasper.compiler.Compiler.__compile(Compiler.java:379)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:41002)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:351)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
        ... 27 more
看起来classFile.delete()尝试删除的文件正在使用中

我们无法在防病毒程序中添加异常

我发现2006年的一篇帖子说:“我的解决方法是修改SmapUtil类。如果重命名在第一次尝试时失败,它会等待50毫秒,然后重试(根据需要循环)。到目前为止,它总是在50毫秒延迟后的第二次尝试中起作用。”

我的问题是,SmapUtil类位于何处,如何编辑delete(和rename)方法

我在任何地方都找不到这个信息


谢谢

确保您已配置Tomcat和Jasper,以便在生产中运行

要解决您的特定问题,您可以将Jasper选项
suppressMap
设置为
true
预编译JSP文件,或两者兼而有之

SMAP为Jasper提供JSR-045支持;它创建从生成的字节码到源JSP文件的映射,以帮助调试


有关Jasper配置的信息,请参阅。

确保已将Tomcat和Jasper配置为在生产中运行

要解决您的特定问题,您可以将Jasper选项
suppressMap
设置为
true
预编译JSP文件,或两者兼而有之

SMAP为Jasper提供JSR-045支持;它创建从生成的字节码到源JSP文件的映射,以帮助调试

有关Jasper配置的信息,请参阅。

我可以通过更改Tomcat方法(删除并重命名)来“修复”它

看起来它试图删除/重命名的文件正被另一个进程(可能是防病毒程序)访问

所以我从Tomcat的Github克隆了源代码,更改了类,瞧,它现在可以工作了

该方法类似于:

if(!classPath.delete(..)
抛出异常。。。
然后,我换了一些类似的东西:

while(!classPath.delete(..)和&count<10){
线程。等待(50);
计数++
}
如果(计数=10)
抛出异常
我可以通过更改Tomcat方法(删除并重命名)来“修复”它

看起来它试图删除/重命名的文件正被另一个进程(可能是防病毒程序)访问

所以我从Tomcat的Github克隆了源代码,更改了类,瞧,它现在可以工作了

该方法类似于:

if(!classPath.delete(..)
抛出异常。。。
然后,我换了一些类似的东西:

while(!classPath.delete(..)和&count<10){
线程。等待(50);
计数++
}
如果(计数=10)
抛出异常


这与windows、防病毒软件或其他任何软件无关。您不会得到运行时异常,这是compiletime。您的代码未编译,因此无法执行。@Stultuske据我所知,“无法为JSP编译类”和“classFile.delete()失败”意味着编译器无法编译JSP,因为它无法先删除旧版本。因此,代码本身不一定有问题。请清理您的工作区。这可能是另一个进程临时访问其中一个文件。无需通过重新编译compiler@TanmayNaik最好在注释中标记OP。@Stultuske它实际上处于运行时。代码可以编译,服务器可以完美地启动,但是当我试图打开一个页面时,它会告诉我错误这与windows、防病毒软件或其他软件无关。您不会得到运行时异常,这是compiletime。您的代码未编译,因此无法执行。@Stultuske据我所知,“无法为JSP编译类”和“classFile.delete()失败”意味着编译器无法编译JSP,因为它无法先删除旧版本。因此,代码本身不一定有问题。请清理您的工作区。这可能是另一个进程临时访问其中一个文件。无需通过重新编译compiler@TanmayNaik最好在注释中标记OP。@Stultuske它实际上处于运行时。代码可以编译,服务器可以完美地启动,但是当我试图打开一个页面时,它给出了一个错误。我在tomcat/conf下编辑了web.xml,superssmap init param设置为true,但效果不好。与以前一样,无法删除()这完全没有意义,因为如果您抑制了Smap,那么将不会调用
org.apache.jasper.compiler.SmapUtil.installSmap
(它是异常的根)。
JDTCompiler.java
中的代码是
/*JSR45 Support*/if(!options.issmapsupprested()){SmapUtil.installSmap(smap);}
这使用的是什么版本的Jasper?你确定配置正确吗?我在
jsp org.apache.jasper.servlet.JspServlet下添加了
superssmap true
,我在tomcat/conf下编辑了web.xml,superssmap init参数设置为true,但效果不太好。与以前一样,删除()失败这完全没有意义,因为如果您抑制了Smap,那么将不会调用
org.apache.jasper.compiler.SmapUtil.installSmap
(它是异常的根)。
JDTCompiler.java
中的代码是
/*JSR45 Support*/if(!options.issmapsupprested()){SmapUtil.installSmap(smap);}
这使用的是什么版本的Jasper?您确定配置正确吗?我在
jsp org.apache.jasper.servlet.JspServlet
下添加了
supersmap true
是否值得创建一个bug报告?