JFinal开发web项目出现故障小记
导读
作为中国优秀的开源项目之中的一个JFinal有着极速开发的优点,是中小型应用开发的首选。在导师的建议下。我使用了JFinal来开发一个Java服务端应用,官方教程非常easy。就几十页(当然是中文的),学起来非常快。
然而在开发过程中肯定会遇到这样那样“无厘头”的问题,怎样使用JFinal开发參考官方文档或网上某些人的教程就可以,我再重写一遍也无多大意义。我这篇文章仅记录自己在使用JFinal开发过程中遇到的问题及注意事项,这样更有參考价值,也希望大家在遇到相似的问题后能及时找到解决方式,提高开发效率。
JFinal开发问题集锦
1. 中文乱码问题
这是差点儿每一个进行Java web开发的程序猿都遇到过的问题。不同技术或框架处理的方式可能不太一样。对JFinal来说。有以下几个配置字符集的地方:
(1)Config配置:
- YourJFinalConfig.configConstant(Constants me) {me.setEncoding("utf-8")};
(2)数据库连接配置:
- jdbcUrl = jdbc:mysql://127.0.0.1/jfinal?characterEncoding=utf8
(3)假设是页面发送 GET 请求,中文字符须要 encoding,除非在 tomcat 的 server.xml 中的 Connector 标记中加入了 URIEncoding="UTF-8" 属性
(4)假设是 jsp 页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
(5)假设是其他 html 页面:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
(6)另外 eclipse workspace 的字符编码最好也配置成 utf-8
2. “Illegal access”问题
出现这样的问题的解决办法非常多,比方我遇到的有以下3种:
- 情况1:INFO: Illegal access: this web application instance has been stopped already.
- Could not load com.mysql.jdbc.authentication.MysqlOldPasswordPlugin. The eventual
- following stack trace is caused by an error thrown for debugging purposes as well
- as to attempt to terminate the thread which caused the illegal access, and has no
- functional impact.
- 情况2:INFO: Illegal access: this web application instance has been stopped already.
- Could not load com.mchange.v2.c3p0.ConnectionCustomizer. The eventual following
- stack trace is caused by an error thrown for debugging purposes as well as to
- attempt to terminate the thread which caused the illegal access, and has no
- functional impact.
- 情况3:INFO: Illegal access: this web application instance has been stopped already.
- Could not load com.mchange.v2.resourcepool.BasicResourcePool$1. The eventual
- following stack trace is caused by an error thrown for debugging purposes as well
- as to attempt to terminate the thread which caused the illegal access, and has no
- 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,内容例如以下:
- handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
- ############################################################
- # Handler specific properties.
- # Describes specific configuration info for Handlers.
- ############################################################
- org.apache.juli.FileHandler.level = FINE
- org.apache.juli.FileHandler.directory = ${应用文件夹}/logs
- org.apache.juli.FileHandler.prefix = error-debug.
- java.util.logging.ConsoleHandler.level = FINE
- java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
(2)又一次启动应用。指定文件夹下会有一个error-debug.yyyy-mm-ss.log的错误日志。通过分析上述日志能够找到问题发生的真正原因。然后进行解决。
3. “Plugin start error”问题
- java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin.
- java.sql.SQLException: Connections could not be acquired from the underlying database!
- at com.jfinal.core.Config.startPlugins(Config.java:95)
- at com.jfinal.core.Config.configJFinal(Config.java:48)
- at com.jfinal.core.JFinal.init(JFinal.java:67)
- at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
- at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
- at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
- at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
- at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
- at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4649)
- at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5305)
解决方法: 删除跟jetty相关的jar包,由于我是在Tomcat下部署的。而JFinal自带的是jetty服务器。
4. 启动时老是出现“jfinal config it in web.xml”错误
解决方法: 删除web.xml中默认生成的以下这段:
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
5. 缺少c3p0的jar包会出现以下错误:
- java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource
- at com.jfinal.plugin.c3p0.C3p0Plugin.start(C3p0Plugin.java:145)
- at com.jfinal.core.Config.startPlugins(Config.java:85)
- at com.jfinal.core.Config.configJFinal(Config.java:48)
- at com.jfinal.core.JFinal.init(JFinal.java:67)
- at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
- at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
- at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
- at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
- at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
- at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
- at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
- at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
- at java.util.concurrent.FutureTask.run(FutureTask.java:138)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:662)
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
- ... 18 more
而缺少与c3p0一起的mchange-commons-java-0.2.7.jar包。会出现以下错误:
- java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
- at com.jfinal.plugin.c3p0.C3p0Plugin.start(C3p0Plugin.java:145)
- at com.jfinal.core.Config.startPlugins(Config.java:85)
- at com.jfinal.core.Config.configJFinal(Config.java:48)
- at com.jfinal.core.JFinal.init(JFinal.java:67)
- at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
- at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
- at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
- at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
- at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
- at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
- at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
- at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
- at java.util.concurrent.FutureTask.run(FutureTask.java:138)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:662)
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
- ... 18 more
6. freemarker相关的jar包缺乏问题:
- java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:61)
- at com.jfinal.core.ActionHandler.handle(ActionHandler.java:77)
- at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
- at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
- at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
- at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
- at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
- at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
- at java.lang.Thread.run(Thread.java:662)
- Caused by: java.lang.reflect.InvocationTargetException
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55)
- ... 19 more
- Caused by: java.lang.NoClassDefFoundError: freemarker/template/TemplateException
- at com.jfinal.render.RenderFactory$FreeMarkerRenderFactory.getRender(RenderFactory.java:233)
- at com.jfinal.render.RenderFactory.getRender(RenderFactory.java:127)
- at com.jfinal.core.Controller.render(Controller.java:892)
- at com.demo.controller.StudentController.index(StudentController.java:16)
- ... 24 more
- Caused by: java.lang.ClassNotFoundException: freemarker.template.TemplateException
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
- ... 28 more
解决方法: JFinal 默认使用 FreeMarker作为 View,故需freemarker的jar包
參考资料
JFinal开发web项目出现故障小记的更多相关文章
- eclipse集成jetty开发web项目(不采用maven方式)
以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/ ...
- 使用Eclipse EE开发web项目
最近使用EclipseEE开发web项目,遇到了以下几个问题: 1. 通过tomcat启动web应用的时候,总是提示找不到包或者class. 经过排查,发现所有的jar包并没有放到WEB-INF/li ...
- MyEclipse+Tomcat开发Web项目时修改内容不能及时显示问题解决方法
问题描述:MyEclipse+Tomcat开发Web项目时,修改的内容不能从浏览器即时显示 原因:缓存问题 解决方法:开启Tomcat的Debug模式 点击如下图红色标记中的图标(Restart th ...
- Spring Boot 的Maven多模块开发web项目使用外部容器进行部署
Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- spring boot + Thymeleaf开发web项目
"Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- 使用Spring Boot开发Web项目(二)之添加HTTPS支持
上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...
随机推荐
- Inno Setup 安装前卸载原程序(转)
很多時候我們需要在安裝文件之前卸載原有的程序而不是覆盖安装,本文的code就是实现了这样的功能. 实现原理是:從注冊表'UninstallString'項中读取卸载信息,用Exec进行静默卸载. 下面 ...
- [置顶] mkdir函数-linux
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial">
- intro
懒得自己折腾wordpress又很想写博客. 作为一名把自己当成programmer的data scientist,毅然选择了博客园. 这里我想内容就是平时学到/使用的各种心得,更新频率不定. 兴趣范 ...
- block的一点知识
一个block的笔记: http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html http://segmentfault.com/q/1 ...
- linux系统关机与重新启动命令
在linux下关机和重新启动系统有shutdown.halt.reboot.init,对于他们来说他们的内部工作过程是不同样的. 1.shutdown命令 使用它能够安全地关闭系统.然而在关闭系统时. ...
- UVA10869 - Brownie Points II(线段树)
UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...
- android xUtils的使用
gethub地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的ht ...
- 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 ...
- python正则表达式基础篇
1.正则表达式基础 1.1简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...
- phpstorm 设置多项目并存
phpstorm 或 webstorm 设置多个项目可以并存: File -> settings -> Directories -> Add Content Root 中添加你当前的 ...