Jfinal 为什么报类找不到,明明已经引入jar了。
buildpath:
继续刷新报错变为:
[ERROR] [2017-05-31 17:40:12,979] [qtp245565335-23:34761] [com.jfinal.core.ActionHandler handle] /blog
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.jfinal.aop.Invocation.invoke(Invocation.java:87)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)
at com.jfinal.ext.handler.ContextPathHandler.handle(ContextPathHandler.java:48)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:74)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.jfinal.aop.Invocation.invoke(Invocation.java:73)
... 26 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.jfinal.render.JspRender
at com.jfinal.render.RenderFactory.getJspRender(RenderFactory.java:79)
at com.jfinal.core.Controller.renderJsp(Controller.java:998)
at demo.controller.BlogController.index(BlogController.java:11)
... 31 more
project-clean,重启eclipse 重启电脑都试过了
而且奇怪的是使用JFinal.start启动就会报上面的错误。
public static void main(String[] args) {
JFinal.start("src/main/webapp",80, "/", 5);
}
使用eclipse配置的tomcat启动就没有这个问题。
而且这个错误都出现在包含render("add.jsp");的action中
已经设置:
constants.setViewType(ViewType.JSP);//设置render()的默认渲染类型
我的依赖:
我检查了和jfinal3.1的demo依赖包版本一样啊
2017年5月31日19:28:40
我重新建了一个maven工程,一步步重新手敲,还是一样的错误,下面我贴出完整代码:
目录结构:
POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yh</groupId>
<artifactId>jFinal2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>jFinal2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>-->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
<!-- 此处的 scope 值为 compile 仅为支持 IDEA 下启动项目 打 war 包时需要改成 provided,以免将一些无用的
jar 打进去 -->
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>jFinal2</finalName>
<plugins>
<!-- 指定maven编译方式为jdk1.8版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
/jFinal2/src/main/java/yh/jfinal/Config.java
package yh.jfinal;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.template.Engine;
import yh.jfinal.route.IndexRoute;
public class Config extends JFinalConfig {
@Override
public void configConstant(Constants me) {
me.setDevMode(true);
}
@Override
public void configRoute(Routes me) {
me.add(new IndexRoute());
}
@Override
public void configEngine(Engine me) {
// TODO Auto-generated method stub
}
@Override
public void configPlugin(Plugins me) {
// TODO Auto-generated method stub
}
@Override
public void configInterceptor(Interceptors me) {
// TODO Auto-generated method stub
}
@Override
public void configHandler(Handlers me) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
JFinal.start("src/main/webapp", 82, "/", 5);
}
}
/jFinal2/src/main/java/yh/jfinal/controller/IndexController.java
package yh.jfinal.controller;
import com.jfinal.core.Controller;
public class IndexController extends Controller {
public void index() {
//这里就有问题
renderJsp("index.jsp");
}
public void index2() {
renderText("字符串就没问题");
}
}
/jFinal2/src/main/java/yh/jfinal/route/IndexRoute.java
package yh.jfinal.route;
import com.jfinal.config.Routes;
import yh.jfinal.controller.IndexController;
public class IndexRoute extends Routes {
@Override
public void config() {
add("/", IndexController.class);
}
}
/jFinal2/src/main/webapp/WEB-INF/web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>yh.jfinal.Config</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
/jFinal2/src/main/webapp/index.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<body>
<h2>只想打开这个页面</h2>
</body>
</html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
这个是maven工程,依赖的包都在maven的本地仓库中,难道我还要一个个找到它们,在webapp下新建一个lib文件夹,再把jar包都拷贝到这个目录下面吗?
回复
@颖辉小居 : 我看看下,有可能我理解有误
回复
@绝对是路过 : 您好,我已经把代码都贴出来了,请你重新刷新一下上面的问题描述。
回复
@颖辉小居 : 刚刚看了下jfinal 已经在运行环境中加入了jar,你这个是撒原因就搞不懂了。。。
回复
@绝对是路过 : 你好已经找到原因了,是在jfinal作者的帮助下解决的,详情请看被采纳的答案,最后非常感谢您的热心帮助。
引用来自“绝对是路过”的评论
你要确定你的运行环境中有这个jar包,举个例子,你在tomcat中运行,配置的server.xml文件,你就要确定配置目录下面有这个jar。如果确定有,看下maven依赖是否冲突,存在多个不同版本的jar包
我确定有这个jar包,在maven 的library下可以看到这个jar包,展开也可以看到错误所找不到的类,pom中我没有加任何scop标签。我又跟着官方文档一步一步做还是一模一样的问题。
你要确定你的运行环境中有这个jar包,举个例子,你在tomcat中运行,配置的server.xml文件,你就要确定配置目录下面有这个jar。如果确定有,看下maven依赖是否冲突,存在多个不同版本的jar包
你好,我的buildpath中除了jre1.8 都在maven中了,我一个个对比了jar包的版本,和jfinal3.1的demo的依赖版本都一致。我尝试删除本地依赖库,重新下载,结果还是一样。
你好,我又一次新建项目还是一样的问题,里面的代码配置我都是手动敲或者复制官方文档,没有copy以前任何工程的源码。只要是renderJsp(XXX.jsp) 就会报这个错误,情况完全一样。使用tomcat启动就没有这个问题。
您好,我重新建了一个简易版的工程还是一样的问题,我已经把代码都贴出来了,请你重新刷新一下上面的问题描述,谢谢
注意一下是不是对老版本的 jfinal 仍然有未发现的依赖,删干净一下
非常感谢您的帮助,这个是正解。
如果是 jetty 下启动,添加 jetty 对 jsp 的支持:
注意上面这个配置中的 scope 为 provided 可以避免打 war 包时将 jsp 的 jar 打进去,部署时不需要这个包。如果是 IDEA 下开发,这个 scope 需要先改为 compile 才能启动项目,打包时记录再改成 provided