记录一篇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真的太老旧了
源码奉上!
阅读全文
0 0
- 记录一篇IDEA环境搭建JFinal框架的demo
- JFinal框架环境搭建
- idea+maven+jetty+jfinal环境搭建
- idea+maven+jetty+jfinal环境搭建
- IntelliJ IDEA 14.1上JFinal开发环境搭建手册
- IntelliJ IDEA 14.1上JFinal开发环境搭建手册
- IntelliJ IDEA 14.1上JFinal开发环境搭建手册
- Jfinal学习和环境的搭建
- JFinal及Jetty环境的搭建
- JFinal框架搭建
- jfinal开发环境搭建
- IDE搭建JFinal环境
- struts2的框架解析第一篇环境的搭建
- JFinal开发环境搭建,JFinal开发案例
- IDEA搭建SSM框架 以及环境配置
- IntelliJ IDEA搭建SpringBoot的小Demo
- IntelliJ IDEA搭建SpringBoot的小Demo
- IntelliJ IDEA搭建SpringBoot的小Demo
- ARM 下常见调试手段
- 错误:仅当显示请求注释处理时才接受类名称
- seaborn 可视化包
- 全是套路的招聘
- 学习Js(1)-使用Jquery实现滑动切换效果
- 记录一篇IDEA环境搭建JFinal框架的demo
- Range Sum Query 2D
- JSON的简单介绍以及C语言的JSON库使用
- 综合练习之--2、MainActivity | Fragment 显示XLV 和 侧滑 vp效果的代码
- Webpack noParse参数
- Android使用ZXing扫描二维码,并返回二维码结果
- 如何为nginx配置https(免费证书)
- 命名规范
- c:if标签的判断