JFinal开发web项目出现问题小记

导读

作为中国优秀的开源项目之一JFinal有着极速开发的好处,是中小型应用开发的首选。在导师的建议下,我使用了JFinal来开发一个Java服务端应用,官方教程非常简单,就几十页(当然是中文的),学起来很快。然而在开发过程中肯定会遇到这样那样“无厘头”的问题,如何使用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包

参考资料

时间: 2024-10-07 04:19:33

JFinal开发web项目出现问题小记的相关文章

Eclipse开发Web项目

http://blog.csdn.net/wozaifeiyang0/article/details/6888197#_Toc281559669 1.    开发环境的搭建... - 1 - 1.1.     开发工具... - 1 - 1.2.     搭建开发环境... - 1 - 2.    开发Web项目... - 1 - 2.1.     新建Web项目... - 1 - 2.2.     开发Servlet - 3 - 2.3.     发布Web项目... - 5 - 2.4.  

jsp+servlet+javabean开发web项目

一.介绍: 项目依赖包:jdbc数据库包 jsp+servlet+javabean开发web项目,是最接近web项目原生运行原理的. 但是,jsp内容混乱,项目结构复杂时,代码会混乱 二.运行原理: jsp发出请求到web-- web接收请求并匹配请求对应的servlet-- servlet调用数据库dao层操作数据库-- 如果有数据传递,放到request或者session中 重点:servlet会执行doService()方法来判断调用doGet()或者doPost() 三.开发步骤: 1.

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

以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/jetty/ 2.下载完成后,解压缩,cd到jetty路径下,运行命令: java -jar start.jar 3.默认端口号8080,访问http://localhost:8080,出现jetty welcome界面 到此,说明jetty已经安装成功! 关于eclipse集成jetty开发web

使用IDEA社区版开发Web项目

IDEA + Maven + Jetty来开发Web项目,主要演示下如何调试代码. 1. 首先我们来创建一个Maven项目,项目类型选择"Maven Module",输入项目名称"demo". 2. 选择项目使用的Archetype为"maven-archetype-webapp",这里也可以随便修改下GroupId等信息. 3. 这一步直接点击"Finish". 4. 打开Maven的配置文件pom.xml,在build节点

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

前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBatis的基础内容,包括基本概念.开发步骤.使用实例等.说起MyBatis,工作中做过SSH/SSM相关Web开发的或者正在学习MyBatis的人或多或少都会接触到类似“MyBatis和Hibernate有什么区别?”,“MyBatis和Hibernate哪个更好?”,“为什么Mybatis用的人越来

使用Eclipse开发Web项目(JSP)——简单登录、无sql

1.使用Eclipse开发Web项目(JSP) tomcat 2.在Eclipse中创建的Web项目: 浏览器可以直接访问webContent中的文件 例如http://localhost:8080/MyJspProject/index1.jsp 其中的index1.jsp就在WebContent目录中: 但是WEB-INF中的文件 无法通过客户端(浏览器)直接访问,只能通过请求转发来访问 注意:并不是任何的内部跳转都能访问WEB-INF:原因是跳转有两种方式:请求转发.重定向 3.配置tomc

eclipse+tomcat开发web项目

也许正在使用的人会觉得这个过程谁不知道啊? 但是对于一个混迹各种语言编程有些年头的我来讲,却必须记录下来! 因为今天以前,我都通过配置[eclipse的tomcat插件]+编写[ant脚本,build.xml]的方法开发我的WEB项目 (这是几年前不想用盗版的MyEclipse辛苦摸索在Eclipse下完成的Web开发配置,配置比较繁琐,还老觉得自己是个“专家”). 殊不知道,Eclipse早就把我费劲巴拉搭建的东西内置了! 如果认为自己“懂了”而不继续学习,真的蛮可笑的,好在,今天,开始进步.

用pycharm+django开发web项目

pycharm是python的一个商业的集成开发工具,本人感觉做python开发还是很好用的,django是一个很流行的python web开源框架,本文就是使用pycharm+django来开发python web项目,下面直接开始 1.安装pytcharm和django,关于安装没有什么好说的,在windows环境中跟安装一般的软件没有什么大的区别,主要有一点需要注意的就是在安装完django以后需要设置一下path环境变量,保证在任何目录下都能使用django. 2.一切编程语言不从hel

【转】MyEclipse开发Web项目发布到Tomcat下的Root目录

通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 .以至于我们访问的时候: 例如:Web应用项目名称为:webManager,则部署到tomcat后,是部署在tomcat/webapps/webManager中,网址为:http://localhost:8080/webManager. 然而 ,每当我们访问一个网站页面时,地址栏就是:http://www.1234.com/login.html.所以一般我们实际使用是不带webManager(也就是所谓的项目名称)的. 具