JFinal开发8个常见问题

  2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分。
 今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal。
 下面是8个最常见的问题总结,相关原始资料都给出了链接。
 
1.Can not create instance of class: demo.DemoConfig.
觉得应该是你的路径有问题, 打开你项目的java build path面板, 然后找到default output folder, 把这里的输出改为your_project/WebRoot/WEB-INF/classes。
参考资料:http://www.oschina.net/question/53137_124287

2.jfinal自带demo中如何在_layout.html加行<base href="${CONTEXT_PATH!}/"/>

按照如下步骤可解决问题:

在JFinalConfig中添加该ContextPathHandler,代码如下

public void configHandler(Handlers me) {
    me.add(new ContextPathHandler());
}
在_layout.html 的 head标记中添加 base 标记,代码如下
<base href="${CONTEXT_PATH}/" />
修改页面中的链接标签 a ,将最前面的 "/" 去掉,以下是要改的地方,可能有遗漏
比如:<link rel="stylesheet" type="text/css" href="static/framework/bootstrap/css/bootstrap.css" />

本质上来说context_path的问题仅与view有关,以上是JFinal提供的简单处理方案 :)

参考资料:http://www.oschina.net/question/260040_45773

3.如果更改JFinal的web.xml 拦截后缀名。
<filter-mapping>
      <filter-name>jfinal</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 “/*”不能正确出力“.html”这种后缀的动态请求。
 
 参考资料:
 新增一个HtmSkipHandler文件
 public class  HtmSkipHandler extends Handler {  
    public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {  
        int index = target.lastIndexOf(".htm");  
        if (index != -1)  
        target = target.substring(0, index);  
        nextHandler.handle(target, request, response, isHandled);  
    }  
}

再在JfinalConfig文件增加
/**
     * 配置处理器
     */
    public void configHandler(Handlers me) {
        me.add(new HtmSkipHandler());
    }

4. URL中的参数,没有在上下文中。
访问1个url,http://localhost/news/list.html?categoryId=2
Freemarker页面${categoryId}竟然报错。
必须在Controller的方法中,手动设置才行:
setAttr("categoryId",categoryId);

5.JFinal中restful拦截器如何实现。
jfinal中有restful拦截器,直接添加就是了。
/**
 * 配置全局拦截器
 */
public void configInterceptor(Interceptors me) {
 me.add(new Restful());
}

URL:http://localhost/news/2
获得参数:Integer id = getParaToInt(0);
但是,JFinal自带的Restful拦截器是写死的,比如"http://localhost/news/2"这个url只能这么写,
响应方法只能是show,而在SpringMVC中,可以很灵活,比如“/detail/{newsId}”,方法名随便取。

6.JFinal设置404和500等页面。
public void configConstant(Constants me) {
me.setError404View(TEMPLATE_PATH+"/error/404.html");
me.setError500View(TEMPLATE_PATH+"/error/500.html");
}

7.JFinal统一异常处理。
public class ExceptionInterceptor implements Interceptor 
  public void intercept(ActionInvocation ai) {
Controller controller = ai.getController();
HttpServletRequest request = controller.getRequest();

try {
ai.invoke();
} catch (Exception e) {
}
}

/**
 * 配置全局拦截器
 */
public void configInterceptor(Interceptors me) {
me.add(new GlobalInterceptor());
me.add(new Restful());
me.add(new ExceptionInterceptor());
}
8.JFinal中配置Log4j。
源代码src目录下放置log4j.properties或log4j.xml,都行,xml格式也不需要额外配置listener之类的。

小雷FansUnion
2015年2月8日
湖北-武汉-循礼门 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: 好的,我可以回答这个问题。使用jfinal框架可以很方便地实现ftp文件上传。首先需要在pom.xml文件中添加jfinal-ftp的依赖,然后在Controller中编写上传文件的方法,使用FTPKit工具类进行文件上传。具体实现可以参考jfinal官方文档或者相关的教程。 ### 回答2: JFinal是一个基于Java的轻量级、高性能的Web框架,它提供了简单易用的API,方便开发人员快速开发Web应用程序。虽然JFinal主要用于开发Web应用程序,但是我们还是可以利用其强大的API来实现FTP文件上传功能。 实现FTP文件上传功能需要借助于Apache Commons Net库。首先,我们需要在项目中引入相应的依赖。在pom.xml文件中添加以下内容: ```xml <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency> ``` 接下来,我们创建一个Controller类,在该类中编写上传文件的逻辑。首先,我们需要获取上传文件的相关信息,包括文件名、路径等。然后,利用FTPClient类实现与FTP服务器的连接和上传文件的功能。最后,根据上传结果返回相应的提示信息。 以下是一个简单的FTP文件上传的示例代码: ```java import com.jfinal.core.Controller; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileInputStream; import java.io.IOException; public class UploadController extends Controller { public void index() { // 获取上传文件的相关信息 String filename = getPara("filename"); String filepath = getPara("filepath"); // 创建FTPClient对象 FTPClient ftpClient = new FTPClient(); try { // 连接FTP服务器 ftpClient.connect("ftp.example.com", 21); ftpClient.login("username", "password"); // 设置文件传输类型为二进制 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置文件上传路径 ftpClient.changeWorkingDirectory(filepath); // 上传文件 FileInputStream fis = new FileInputStream(filename); ftpClient.storeFile(filename, fis); fis.close(); // 上传成功提示信息 renderText("文件上传成功"); } catch (IOException e) { e.printStackTrace(); // 上传失败提示信息 renderText("文件上传失败"); } finally { // 断开与FTP服务器的连接 try { ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 以上就是使用JFinal框架实现FTP文件上传的简单示例代码。我们可以通过访问URL来调用该接口并传递文件信息,从而实现文件的上传功能。当然,在实际开发中,我们还需要添加一些安全验证、错误处理等功能来完善这个上传文件的功能。 ### 回答3: 使用jfinal编写FTP文件上传功能非常简单。首先要添加jfinal的依赖包到项目中,并配置好jfinal的配置文件。 接着,在Controller类中创建一个方法用于处理文件上传请求。首先,我们需要获取到上传的文件,可以通过使用jfinal提供的方法`getRequest().getFile("file")`来实现。这个方法会返回一个UploadFile对象,其中包含了上传的文件信息。 接下来,我们需要将上传的文件保存到FTP服务器上。可以使用Apache Commons Net库中的FTPClient类来实现FTP文件上传功能。首先,我们需要连接到FTP服务器,可以通过调用FTPClient对象的`connect()`方法来连接。然后,使用`login()`方法进行登录。 接着,我们可以使用`changeWorkingDirectory()`方法切换到指定的目录。然后,使用`storeFile()`方法将上传的文件保存到FTP服务器上,其中需要传入服务器上保存的文件名和要上传的文件流。 上传完成后,记得要关闭FTP连接,可以使用`logout()`方法进行退出,然后调用`disconnect()`方法关闭连接。 最后,我们在Controller中处理上传结果,可以返回相应的消息给前端页面,告知上传是否成功。 总结一下,使用jfinal编写FTP文件上传功能主要包括以下步骤:获取上传的文件、连接到FTP服务器、上传文件、关闭FTP连接、处理上传结果。相比传统的socket编程方式,使用jfinal简化了很多操作,提高了开发效率。希望这个简单的回答能帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值