[置顶] JFinal 3分钟入门

JFinal是什么?

   JFinal 是国产的、基于 Java 语言的极速 WEB MVC + ORM 框架,由 Handler、Interceptor、Controller、Render、Plugin 五大部分组成。其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。

JFinal架构

 JFinal架构以Action为参照,Handler处在扩展的外围,Interceptor处在更贴近Action的范围,Controller承载Action处在扩展的中心,Render处于Action后端,Plugin处于Action右侧。

开发原理

简单总结为:零配置、代码量少、开发体验连续、无第三方依赖、概念最少化。

JFinal特点

1、它是国产的MVC架构
2、惯例优于配置原则,零配置无xml
3、使用DB+Record实现ORM
4、支持多种视图
5、强大的validator后端校验功能
… …

对JFinal有了一个宏观了解后,接下来通过一个入门demo跟大家一起学习下JFinal在项目中的使用。

项目实战

1、在开始建项之前,先打开eclipse的Perferences窗口,将项目编码和JSP编码格式统一设置为UTF-8。

[置顶] JFinal 3分钟入门_第1张图片

2、下载JFinal依赖的jar包,官网地址: http://www.jfinal.com/

3、创建web应用。新建Dynamic Web工程

4、创建配置文件类MyAppConfig并继承JFinalConfig类

[置顶] JFinal 3分钟入门_第2张图片

5、修改web.xml文件,通过初始化参数将MyAppConfig设置为filter过滤器的入口。

6、创建controller类。JFinal的controller需要继承controller类。

7、创建JSP页面。在WebContent中新建hello.jsp和index.jsp。

[置顶] JFinal 3分钟入门_第3张图片

8、注册controller路由。在MyAppConfig.java中将准备好的jsp和controller关联起来。

到此,一个简单的JFinal项目框架已经建好了。接下来我们看一下各个部分的具体实现和调用关系。

首先MyAppConfig.java类

public class MyAppConfig extends JFinalConfig {

    /* * 一些默认通用设置 */
    @Override
    public void configConstant(Constants me) {
        me.setDevMode(true);
        me.setEncoding("utf-8");
        me.setViewType(ViewType.JSP);

    }

    /* * 注册路由,将jsp访问和controller关联在一起 */
    @Override
    public void configRoute(Routes me) {
        //----"/"访问到IndexController这个类的index()方法,这是约定
        me.add("/", IndexController.class);

        //----"/user"访问到UserController这类
        //----/user/login,默认访问UserController的login()方法
        // me.add("/user",UserController.class);

    }


    @Override
    public void configPlugin(Plugins me) {
    // -------------这里启用JFinal插件------下篇介绍---------------
            }

    /* * 说明:这里用于配置全局的拦截器,对所有请求进行拦截 */
    @Override
    public void configInterceptor(Interceptors me) {
    // -------------这里是拦截器的配置------下篇介绍---------------

    }

    @Override
    public void configHandler(Handlers me) {
        /* * ContextPathHandler,在每次请求时将ContextPath (这里指"/MyJFinalApp") * 设置到HttpServletRequest的属性"basePath"中 */
        me.add(new ContextPathHandler("basePath"));
    }

}

讲解:根据我们以前掌握的知识,bathPath必须设置到HttpServletRequest中才能在页面中使用。这里configHandler就只做了这么一件事,即在每次请求时将ContextPath设置到HttpServletRequest的属性”basePath”中。这样在jsp页面可以直接使用${basePath}了。

[置顶] JFinal 3分钟入门_第4张图片

web.xml。既然MyAppConfig.java是入口,那么,在Tomcat这个容器中,就需要配置这个入口,使得Tomcat启动的同时加载这个入口类。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

    <display-name>JFinalApp</display-name>

    <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>



    <!-- jfinal核心filter -->

    <filter>
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>cn.tgb.config.MyAppConfig</param-value>
        </init-param>

    </filter>

    <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

controller类。

public class IndexController extends Controller {

    // Controller默认调用的方法
    public void index() {
        // 渲染视图并返回给浏览器
        this.render("index.jsp");
    }

    public void sayHello() {
        String userName = this.getPara("userName");
        String sayHello = "Hello" + userName + ",welcome to JFinal world!";
        this.setAttr("sayHello", sayHello);
        this.render("/hello.jsp");
    }

}

讲解:this.render(“index.jsp”),渲染并返回index页面。这里用的render而不是return。这里即为JFinal的特点之一:支持多种视图。渲染页面不仅仅JSP、VELOCITY等几种类型。将来如有新的类型出现,则只需要扩展Render就可轻松支持。

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="${basePath}/sayHello" method="post">

        请输入您的名字: <input type="text" name="userName" /> 
                       <input type="submit" value="确定" />

    </form>
</body>
</html>

hello.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <p>${sayHello}</p><p><a href="${basePath}/"></a></p>

</body>
</html>

到这里,一个简单的工程就完了。主要实现的是一个问候功能。部署并启动运行。首先访问index页面。在地址栏输入 localhost:8080/JFinalApp/ ,返回index 页面。

[置顶] JFinal 3分钟入门_第5张图片

请求访问关系

在index页面输入“大美女”,确定。跳转到hello页面。

[置顶] JFinal 3分钟入门_第6张图片

请求访问关系

本篇文章介绍了JFinal的特性和访问关系,并介绍了config的两个核心方法configRoute()和configHandler()的作用。下篇文章将继续通过一个demo介绍另外两个核心方法configPlugin()和configInterceptor()的使用和作用。

你可能感兴趣的:(java,Web,mvc,orm,Interceptor)