导读

作为中国优秀的开源项目之中的一个JFinal有着极速开发的优点,是中小型应用开发的首选。在导师的建议下。我使用了JFinal来开发一个Java服务端应用,官方教程非常easy。就几十页(当然是中文的),学起来非常快。

然而在开发过程中肯定会遇到这样那样“无厘头”的问题,怎样使用JFinal开发參考官方文档或网上某些人的教程就可以,我再重写一遍也无多大意义。我这篇文章仅记录自己在使用JFinal开发过程中遇到的问题及注意事项,这样更有參考价值,也希望大家在遇到相似的问题后能及时找到解决方式,提高开发效率。

JFinal开发问题集锦

1. 中文乱码问题

这是差点儿每一个进行Java web开发的程序猿都遇到过的问题。不同技术或框架处理的方式可能不太一样。对JFinal来说。有以下几个配置字符集的地方:

(1)Config配置:

  1. YourJFinalConfig.configConstant(Constants me) {me.setEncoding("utf-8")};

(2)数据库连接配置:

  1. jdbcUrl = jdbc:mysql://127.0.0.1/jfinal?characterEncoding=utf8

(3)假设是页面发送 GET 请求,中文字符须要 encoding,除非在 tomcat 的 server.xml 中的 Connector 标记中加入了 URIEncoding="UTF-8" 属性

(4)假设是 jsp 页面:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>

(5)假设是其他 html 页面:

  1. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

(6)另外 eclipse workspace 的字符编码最好也配置成 utf-8

2. “Illegal access”问题

出现这样的问题的解决办法非常多,比方我遇到的有以下3种:

  1. 情况1INFO: Illegal access: this web application instance has been stopped already.
  2. Could not load com.mysql.jdbc.authentication.MysqlOldPasswordPlugin. The eventual
  3. following stack trace is caused by an error thrown for debugging purposes as well
  4. as to attempt to terminate the thread which caused the illegal access, and has no
  5. functional impact.
  6.  
  7. 情况2INFO: Illegal access: this web application instance has been stopped already.
  8. Could not load com.mchange.v2.c3p0.ConnectionCustomizer. The eventual following
  9. stack trace is caused by an error thrown for debugging purposes as well as to
  10. attempt to terminate the thread which caused the illegal access, and has no
  11. functional impact.
  12.  
  13. 情况3INFO: Illegal access: this web application instance has been stopped already.
  14. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1. The eventual
  15. following stack trace is caused by an error thrown for debugging purposes as well
  16. as to attempt to terminate the thread which caused the illegal access, and has no
  17. functional impact.

解决方法: 查看上述日志,可能会非常明显的看到以下非常多的exception。都是this web application instance has been stopped already以及Could not load XX Class。

可是不要被这些异常迷惑,他们仅仅是结果而不是原因。那么假设查找原因,能够通过查找error-debug日志文件来解决。

error-debug日志文件日志文件默认是不生成的,我们须要通过log配置文件来设置让其生成,详细方法例如以下:
(1)在WEB-INF/classes文件夹下新建logging.properties,内容例如以下:

  1. handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
  2.  
  3. ############################################################
  4. # Handler specific properties.
  5. # Describes specific configuration info for Handlers.
  6. ############################################################
  7.  
  8. org.apache.juli.FileHandler.level = FINE
  9. org.apache.juli.FileHandler.directory = ${应用文件夹}/logs
  10. org.apache.juli.FileHandler.prefix = error-debug.
  11.  
  12. java.util.logging.ConsoleHandler.level = FINE
  13. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

(2)又一次启动应用。指定文件夹下会有一个error-debug.yyyy-mm-ss.log的错误日志。通过分析上述日志能够找到问题发生的真正原因。然后进行解决。

3. “Plugin start error”问题

  1. java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin.
  2. java.sql.SQLException: Connections could not be acquired from the underlying database!
  3. at com.jfinal.core.Config.startPlugins(Config.java:95)
  4. at com.jfinal.core.Config.configJFinal(Config.java:48)
  5. at com.jfinal.core.JFinal.init(JFinal.java:67)
  6. at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
  7. at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
  8. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
  9. at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
  10. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
  11. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4649)
  12. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5305)

解决方法: 删除跟jetty相关的jar包,由于我是在Tomcat下部署的。而JFinal自带的是jetty服务器。

4. 启动时老是出现“jfinal config it in web.xml”错误

解决方法: 删除web.xml中默认生成的以下这段:

  1. <welcome-file-list>
  2. <welcome-file>index.html</welcome-file>
  3. <welcome-file>index.htm</welcome-file>
  4. <welcome-file>index.jsp</welcome-file>
  5. <welcome-file>default.html</welcome-file>
  6. <welcome-file>default.htm</welcome-file>
  7. <welcome-file>default.jsp</welcome-file>
  8. </welcome-file-list>

5. 缺少c3p0的jar包会出现以下错误:

  1. java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource
  2. at com.jfinal.plugin.c3p0.C3p0Plugin.start(C3p0Plugin.java:145)
  3. at com.jfinal.core.Config.startPlugins(Config.java:85)
  4. at com.jfinal.core.Config.configJFinal(Config.java:48)
  5. at com.jfinal.core.JFinal.init(JFinal.java:67)
  6. at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
  7. at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
  8. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
  9. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
  10. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
  11. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
  12. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  13. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
  14. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
  15. at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  16. at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  17. at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  18. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  19. at java.lang.Thread.run(Thread.java:662)
  20. Caused by: java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource
  21. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
  22. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
  23. ... 18 more

而缺少与c3p0一起的mchange-commons-java-0.2.7.jar包。会出现以下错误:

  1. java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
  2. at com.jfinal.plugin.c3p0.C3p0Plugin.start(C3p0Plugin.java:145)
  3. at com.jfinal.core.Config.startPlugins(Config.java:85)
  4. at com.jfinal.core.Config.configJFinal(Config.java:48)
  5. at com.jfinal.core.JFinal.init(JFinal.java:67)
  6. at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
  7. at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
  8. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
  9. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
  10. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
  11. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
  12. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  13. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
  14. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
  15. at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  16. at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  17. at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  18. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  19. at java.lang.Thread.run(Thread.java:662)
  20. Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
  21. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
  22. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
  23. ... 18 more

6. freemarker相关的jar包缺乏问题:

  1. java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
  2. at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:61)
  3. at com.jfinal.core.ActionHandler.handle(ActionHandler.java:77)
  4. at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
  5. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  6. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  7. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
  8. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
  9. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
  10. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  11. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  12. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
  13. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
  14. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
  15. at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
  16. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
  17. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
  18. at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  19. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  20. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  21. at java.lang.Thread.run(Thread.java:662)
  22. Caused by: java.lang.reflect.InvocationTargetException
  23. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  24. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  25. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  26. at java.lang.reflect.Method.invoke(Method.java:597)
  27. at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55)
  28. ... 19 more
  29. Caused by: java.lang.NoClassDefFoundError: freemarker/template/TemplateException
  30. at com.jfinal.render.RenderFactory$FreeMarkerRenderFactory.getRender(RenderFactory.java:233)
  31. at com.jfinal.render.RenderFactory.getRender(RenderFactory.java:127)
  32. at com.jfinal.core.Controller.render(Controller.java:892)
  33. at com.demo.controller.StudentController.index(StudentController.java:16)
  34. ... 24 more
  35. Caused by: java.lang.ClassNotFoundException: freemarker.template.TemplateException
  36. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
  37. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
  38. ... 28 more

解决方法: JFinal 默认使用 FreeMarker作为 View,故需freemarker的jar包

參考资料

JFinal开发web项目出现故障小记的更多相关文章

  1. eclipse集成jetty开发web项目(不采用maven方式)

    以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/ ...

  2. 使用Eclipse EE开发web项目

    最近使用EclipseEE开发web项目,遇到了以下几个问题: 1. 通过tomcat启动web应用的时候,总是提示找不到包或者class. 经过排查,发现所有的jar包并没有放到WEB-INF/li ...

  3. MyEclipse+Tomcat开发Web项目时修改内容不能及时显示问题解决方法

    问题描述:MyEclipse+Tomcat开发Web项目时,修改的内容不能从浏览器即时显示 原因:缓存问题 解决方法:开启Tomcat的Debug模式 点击如下图红色标记中的图标(Restart th ...

  4. Spring Boot 的Maven多模块开发web项目使用外部容器进行部署

    Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...

  5. SSM框架开发web项目系列(二) MyBatis真正的力量

    前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...

  6. SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射

    前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...

  7. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

  8. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

  9. 使用Spring Boot开发Web项目(二)之添加HTTPS支持

    上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...

随机推荐

  1. Inno Setup 安装前卸载原程序(转)

    很多時候我們需要在安裝文件之前卸載原有的程序而不是覆盖安装,本文的code就是实现了这样的功能. 实现原理是:從注冊表'UninstallString'項中读取卸载信息,用Exec进行静默卸载. 下面 ...

  2. [置顶] mkdir函数-linux

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial">

  3. intro

    懒得自己折腾wordpress又很想写博客. 作为一名把自己当成programmer的data scientist,毅然选择了博客园. 这里我想内容就是平时学到/使用的各种心得,更新频率不定. 兴趣范 ...

  4. block的一点知识

    一个block的笔记: http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html http://segmentfault.com/q/1 ...

  5. linux系统关机与重新启动命令

    在linux下关机和重新启动系统有shutdown.halt.reboot.init,对于他们来说他们的内部工作过程是不同样的. 1.shutdown命令 使用它能够安全地关闭系统.然而在关闭系统时. ...

  6. UVA10869 - Brownie Points II(线段树)

    UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...

  7. android xUtils的使用

    gethub地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的ht ...

  8. Centos升级gcc4.4.7升级gcc4.8手记

    本博客来自:http://www.mudbest.com/centos%E5%8D%87%E7%BA%A7gcc4-4-7%E5%8D%87%E7%BA%A7gcc4-8%E6%89%8B%E8%AE ...

  9. python正则表达式基础篇

    1.正则表达式基础 1.1简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...

  10. phpstorm 设置多项目并存

    phpstorm 或 webstorm 设置多个项目可以并存: File -> settings -> Directories -> Add Content Root 中添加你当前的 ...