记录一篇IDEA环境搭建JFinal框架的demo

来源:互联网 发布:淘宝店铺保证金在哪交 编辑:程序博客网 时间:2024/06/05 00:25

**
选用JFinal的原因非常简单,我喜欢java代码,而不是弱智标签语言(不喜欢繁琐的xml配置,搞来搞去完全不知道框架是怎么运作的!)

再次奉劝大家赶快转战IDEA,因为真的非常好用,不过对于不怎么接触IDEA的同学来说,上手有些困难。
我用IDEA编辑器已经有2年多了,从一开始非常容易出错到现在的上天入地,爱不释手

**

JFinal框架需要一个入口函数:

/** * shift + F9 启动(我的说的IDEA中) */public class App {    public static void main(String[] args){        /**         * 第一个参数填写web.xml所在路径的名字         * 第二个参数是端口号         * 第三个参数是url_basePath         */        JFinal.start("src/main/webapp", 80, "/");    }}

JFinal框架是围绕JFinalConfig这个类展开的,JFinalConfig作用就是做一些app的配置
贴出代码和注释说明:

public class AppConfig extends JFinalConfig {    /**     * 配置一些常量,常数,基础之类的     * @param constants     */    public void configConstant(Constants constants) {        constants.setDevMode(true);//        constants.setError404View();//        constants.setErrorView();//        constants.setEncoding();    }    /**     * 写好的controller从这里开始添加     * @param routes     */    public void configRoute(Routes routes) {        /**         * routes.add("/路径(默认访问class.index()方法);/路径/函数名(访问class.函数名)",class);         * 如果在Controller的函数中注明 @ActionKey("/login"),则会打破这里的配置规则(level_up)         */        routes.add("/", HelloController.class);        /**         * 设置view的默认路径         * Controller.render(basePath + view)         *///        routes.setBaseViewPath("/view");        /**         * 如果实际开发中,规则不能满足业务,可以考虑自定义Routes         *///        routes.add(new Routes());    }    /**     * 配置引擎模板     * @param engine     */    public void configEngine(Engine engine) {//        engine.addSharedFunction()    }    /**     * 数据库的配置     * @param plugins     */    public void configPlugin(Plugins plugins) {        /**         * 默认是连接mysql的         * file info:         * -------------start------------------------         * jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull         * user = root         * password =         * devMode = true         *///        loadPropertyFile(file or file_name)        DruidPlugin druidPlugin = new DruidPlugin(                getProperty("jdbcUrl"),                getProperty("user"),                getProperty("password"));//从文件中获取参数值        /**         * 或者完全不用这么麻烦         * DruidPlugin plugin = new DruidPlugin("jdbc_url","root","123456");         */        plugins.add(druidPlugin);        /**         * ActiveRecordPlugin读取配置并连接数据库         */        ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);        plugins.add(activeRecordPlugin);//        activeRecordPlugin.addMapping(“user”,UserBean.class);这个函数的作用是,建立数据库与Model的映射关系,所以变量名一定要与数据库一致//        activeRecordPlugin.addMapping("user","user_id", UserBean.class);//          中间这个参数是手动指定主键,默认是:id,Bean类一定要继承Model<classNameOfBean>    }    /**     * 配置全局拦截器     * @param interceptors     */    public void configInterceptor(Interceptors interceptors) {        interceptors.add(new Interceptor() {            public void intercept(Invocation invocation) {//                invocation可以对方法进行拦截,并提供机会在方法的前后添加切面代码//                invocation.getMethod()//                invocation.getController()//                invocation.invoke();必须调用这个函数,传递本次调用,调用剩下的拦截器与目标方法            }        });//        interceptors.addGlobalActionInterceptor()//添加全局拦截器//        interceptors.addGlobalServiceInterceptor()//添加service层拦截器//        interceptors.add()兼容老版本而保留的方法,与addGlobalActionInterceptor功能一致    }    /**     * 可以添加自定义的handler,handler对所有的web请求有着完全的控制权     * @param handlers     */    public void configHandler(Handlers handlers) {        handlers.add(new Handler() {            @Override            public void handle(String s,                               HttpServletRequest httpServletRequest,                               HttpServletResponse httpServletResponse,                               boolean[] booleans) {            }        });    }    /**     * init     */    @Override    public void afterJFinalStart() {    }    /**     * destroy     */    @Override    public void beforeJFinalStop() {    }}

示例Controller:

public abstract class AbsController extends Controller{    public abstract void index();}//@Before(className.class)//before注解可声明对类、函数的拦截器,多个拦截器{className.class1,className.class2}public class HelloController extends AbsController {    /**     * 在config中不配置指定访问函数时,默认访问index()函数     */    @ActionKey("/hello")//    @Clear 清除当前声明的拦截器,也可添加参数声明清除指定的拦截器    public void index(){        renderText("hellohellohello");//        renderJson("jsontxt");返回json字符串//        render("viewpath");返回view路径//        redirect301("url");跳转//        renderError(code,"viewpath");自定义的状态码和view 如果不想程序继续执行,使用return//        renderFile(file);发送文件//        renderJsp("jsp_path");//        getRequest()//        getResponse()//        getPara("name") 事实上是对 HttpServletRequest.getParameter(String name)的封装//        getPara(index)//        xxxService service = enhance(xxxService.class)        /**         * AOP         * 使用Duang.duang方法在任何地方对目标进行增强         * OrderService service = Duang.duang(OrderService.class);         * 调用payment方法时将会触发拦截器         * service.payment(…);         * 使用Enhancer.enhance方法在任何地方对目标进行增强         * OrderService service = Enhancer.enhance(OrderService.class);         *         * 为enhance方法传入的拦截器称为Inject拦截器,下面代码中的Tx称为Inject拦截器         * OrderService service = Enhancer.enhance(OrderService.class, Tx.class);         * service.payment(…);         */    }}

JDBC的使用:

public class UserBean extends Model<UserBean>{    /**     * Model提供了很多封装的API,自行研究     *      */    public static final UserBean dao = new UserBean().dao();    public String name;    public int age;    public String sex;    public UserBean(){    }}

pom清单:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>jfinal_demo</groupId>  <artifactId>jfinal_demo</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>jfinal_demo Maven Webapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>      <groupId>com.jfinal</groupId>      <artifactId>jfinal</artifactId>      <version>3.2</version>    </dependency>    <dependency>      <groupId>com.jfinal</groupId>      <artifactId>jetty-server</artifactId>      <version>8.1.8</version>    </dependency>  </dependencies>  <build>    <finalName>jfinal_demo</finalName>  </build></project>

web.xml清单:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app>  <display-name>Archetype Created Web Application</display-name>  <filter>    <filter-name>jfinal</filter-name>    <filter-class>com.jfinal.core.JFinalFilter</filter-class>    <init-param>      <param-name>configClass</param-name>      <param-value>com.zzyd.jfinal.config.AppConfig</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>jfinal</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

看完在对比一下SpringMVC,你发现你还会爱他吗?

话说回来,每一个框架的适用场景都不一样, SpringMVC 也好 SpringBoot也好,都是开发web项目的一个工具,选择适合自己的工具才是最重要的!

转战IDEA吧,Eclipse真的太老旧了

源码奉上!

原创粉丝点击