因而,放弃了.....但是个人认为,对1些比较大型的项目,可以试用SSM框架来实现接口。好了,下面我来介绍1种10分酸爽的EE框架,对EE小白来讲真的是不错的东西,配置上面最少很少,几近到达0配置,实现上面也很简单,对数据库的连接上也已进行了封装,这个框架就是JFinal,不能不说这框架太牛逼了。
本文合适的对象:
l 对Java EE有1定了解的小白
l 熟习tomcat服务器的
l 熟习MysqL数据库和SQL语句的
甚么是Jfinal框架?
援用下官方的介绍:
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩大、Restful。在具有Java语言所有优势的同时再具有ruby、python、PHP等动态语言的开发效力!为您节俭更多时间,去陪恋人、家人和朋友 :)
Jfinal的特点有甚么?
l MVC架构,设计精致,使用简单
l 遵守COC原则,零配置,无xml
l 独创Db + Record模式,灵活便利
l ActiveRecord支持,使数据库开发极致快速
l 自动加载修改后的java文件,开发进程中无需重启web server
l AOP支持,拦截器配置灵活,功能强大
l Plugin体系结构,扩大性强
l 多视图支持,支持FreeMarker、JsP、VeLocity
l 强大的ValIDator后端校验功能
l 功能齐全,具有struts2的绝大部份功能
l 体积小仅339K,且无第3方依赖
Jfinal的官方网站:
http://www.jfinal.com/
开始实践
说了那末多,我们开始实践下这个框架,来验证下是有多爽,下面会以用户登录这个简单的例子来展现如何试用Jfinal框架,使用的要求方式为GET。
准备工作:
1.编写数据库,来支持后台
这里我使用的是MySql数据库,可视化工具用的是Navicat
这里我创建了1个叫做coderbase的数据库,创建时候注意编码格式1律设置为UFT⑻
创建1个用户表tb_user
字段以下:
字段 | 类型 | 含义 |
ID | int | ID自动递增 |
username | varchar | 用户名 |
password | 密码 | |
nickname | 昵称 | |
sex | 性别 | |
usertype | 用户权限类型 | |
邮箱 | ||
mobile | char | 手机号 |
score | 用户积分 | |
token | varchar | Token验证 |
base | 备用字段 | |
备用字段 |
贴下我的sql
DROP table IF EXISTS `tb_user`;CREATE table `tb_user` ( `ID` int(40) NOT NulL auto_INCREMENT COMMENT '用户ID',`username` varchar(100) CHaraCTER SET utf8 DEFAulT NulL COMMENT '用户名',`password` varchar(100) CHaraCTER SET utf8 DEFAulT NulL,`nickname` varchar(100) CHaraCTER SET utf8 DEFAulT NulL COMMENT '昵称',`sex` int(2) DEFAulT NulL,`usertype` int(10) DEFAulT NulL COMMENT '用户类型',`email` varchar(50) CHaraCTER SET utf8 DEFAulT NulL,`mobile` char(11) CHaraCTER SET utf8 DEFAulT NulL,`score` int(255) DEFAulT NulL,`base` varchar(100) CHaraCTER SET utf8 DEFAulT NulL,`base2` varchar(100) CHaraCTER SET utf8 DEFAulT NulL,`base3` varchar(100) CHaraCTER SET utf8 DEFAulT NulL,`base4` varchar(100) CHaraCTER SET utf8 DEFAulT NulL,PRIMARY KEY (`ID`)) ENGINE=InnoDB auto_INCREMENT=3 DEFAulT CHARSET=latin1;
插入测试数据
<span style="Font-family:Simsun;">INSERT INTO `tb_user` VALUES ('1','张3','123','3','1','1028940102@qq.com','1812345678','12',null,null);INSERT INTO `tb_user` VALUES ('2','2',null);</span>
2.设置tomcat编码
编辑下你的tomcat目录下conf/server.xml,添加编码如果没有,注意自己添加下
<!-- A "Connector" represents an endpoint by which requests are received and responses are returned. documentation at : Java http Connector: /docs/config/http.HTML (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.HTML APR (http/AJP) Connector: /docs/apr.HTML define a non-SSL http/1.1 Connector on port 8080 --> <Connector port="8080" protocol="http/1.1" connectionTimeout="20000" <strong>URIEnCoding="UTF⑻"</strong> redirectPort="8443" />
3.创建新工程,并添加需要的jar包
新建web工程(Dynamic Web project)
所需的jar包以下,注意粘贴到WebContent/WEB-INF/lib下:
commons-beanutils⑴.7.0.jarcommons-collections⑶.1.jarcommons-lang⑵.3.jarcommons-logging.jardruID⑴.0.5.jarezmorph⑴.0.6.jarfastJson⑴.1.25.jarjfinal⑵.2-bin-with-src.jarJson-lib⑵.1.jarmchange-commons-java-0.2.3.4.jarmysql-connector-java⑸.1.6-bin.jarservlet-API.jar上述jar下载地址:
http://download.csdn.net/detail/u011539882/9632973
有了这些就能够开始敲代码了。
1.建立入口类MyAppConfig
新建config包,并新建MyAppConfig类且继承JFinalConfig
<span style="Font-family:Simsun;">import com.jfinal.config.Constants;import com.jfinal.config.Handlers;import com.jfinal.config.Interceptors;import com.jfinal.config.JFinalConfig;import com.jfinal.config.Plugins;import com.jfinal.config.Routes; public class MyAppConfig extends JFinalConfig{ @OverrIDepublic voID configConstant(Constants me) {// Todo auto-generated method stub} @OverrIDepublic voID configRoute(Routes me) {// Todo auto-generated method stub} @OverrIDepublic voID configPlugin(Plugins me) {// Todo auto-generated method stub} @OverrIDepublic voID configInterceptor(Interceptors me) {// Todo auto-generated method stub} @OverrIDepublic voID configHandler(Handlers me) {// Todo auto-generated method stub} } </span>
其中:
public voID configConstant(Constantsme)
用于设置全局的设置如编码等
voID configRoute(Routesme)
用于设置路由地址,访问地址
voID configPlugin(Pluginsplugins)
用于配置1些插件,如连接数据的插件
configInterceptor(Interceptorsme)
用于配置拦截器
voID configHandler(Handlersme)
用于配置全局拦截器
基本配置以下:
<span style="Font-family:Simsun;">import com.jfinal.config.Constants;import com.jfinal.config.Handlers;import com.jfinal.config.Interceptors;import com.jfinal.config.JFinalConfig;import com.jfinal.config.Plugins;import com.jfinal.config.Routes;import com.jfinal.ext.handler.contextpathHandler;import com.jfinal.kit.PropKit;import com.jfinal.plugin.activerecord.ActiveRecordplugin;import com.jfinal.plugin.druID.Druidplugin;import com.jfinal.render.VIEwType;import com.myapp.controller.LoginController;import com.myapp.controller.RegisterController;import com.myapp.module.User;/** * 配置类 * * @author zhang * */public class MyAppConfig extends JFinalConfig { @OverrIDe public voID configConstant(Constants me) { // 设置为开发模式 me.setDevMode(true); // 设置编码为UTF⑻ me.setEnCoding("utf⑻"); // 设置VIEw类型为JsP me.setVIEwType(VIEwType.JsP); } @OverrIDe public voID configRoute(Routes me) { } @OverrIDe public voID configPlugin(Plugins plugins) { } @OverrIDe public voID configInterceptor(Interceptors me) { } @OverrIDe public voID configHandler(Handlers me) { me.add(new contextpathHandler("basePath")); }}</span>
配置web.xml文件,路径在WebContent/WEB-INF/,注意如果没有web.xml新建1个,配置以下:
<span style="Font-family:Simsun;"><?xml version="1.0" enCoding="UTF⑻"?><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>API</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> <!-- 过滤器 --> <filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>com.myapp.config.MyAppConfig</param-value> </init-param> </filter> <filter-mapPing> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapPing> <!-- 过滤器配置终了 --></web-app></span>
配置log4j日志系统,新建log4j.propertIEs:
<span style="Font-family:Simsun;">log4j.rootLogger=INFO,stdout,filelog4j.appender.stdout.Target=System.outlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Output to the filelog4j.appender.file=org.apache.log4j.fileAppenderlog4j.appender.file.file=./web.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # DruIDlog4j.logger.druID.sql=warn,stdoutlog4j.logger.druID.sql.DataSource=warn,stdoutlog4j.logger.druID.sql.Connection=warn,stdoutlog4j.logger.druID.sql.Statement=deBUG,stdoutlog4j.logger.druID.sql.ResultSet=warn,stdout </span>
配置JDBC,新建Config.propertIEs,并加入以下内容,注意修改:
<span style="Font-family:Simsun;">driver =com.MysqL.jdbc.DriverjdbcUrl=jdbc:MysqL://你的数据库地址:3306/数据库名字?characterEnCoding=utf⑻user=root //用户名password=123456 //密码initialSize=1 minIDle=1maxActivee=20</span>
除此以外,还需要在MyAppConfig.java文件中对JDBC进行配置,配置的代码需要放在configPlugin方法中,有两个插件可以快速连接数据库,分别为C3P0,还有DruID,个人比较偏向于使用DruID,以DruID为例来进行JDBC连接配置,配置的代码以下:
// 配置JDBC连接PropKit.use("Config.propertIEs");final String URL = PropKit.get("jdbcUrl");final String USERname = PropKit.get("user");final String PASSWORD = PropKit.get("password");final Integer INITIALSIZE = PropKit.getInt("initialSize");final Integer MIDIDLE = PropKit.getInt("minIDle");final Integer MAXACTIVEE = PropKit.getInt("maxActivee");// DruID插件Druidplugin druidplugin = new Druidplugin(URL,USERname,PASSWORD);druidplugin.set(INITIALSIZE,MIDIDLE,MAXACTIVEE);druidplugin.setFilters("stat,wall");plugins.add(druidplugin); ActiveRecordplugin activeRecordplugin = new ActiveRecordplugin(druidplugin);plugins.add(activeRecordplugin);
下1步进行分包
l 新建1个controller包,用于寄存主要逻辑
l 新建1个module包,用于寄存实体类
l 新建1个service包,用于寄存数据库的 *** 作
l 新建1个utils包,用于寄存工具类
2.编写接口
以登录为例子来展现如何编写接口:
1.加入路由配置
l 首先新建LoginController.java文件在Controller包中,并实现com.jfinal.core.Controller类;
l 在MyAppConfig中的configRoute方法中加入路由配置,me.add("/",LoginController.class);第1个参数制定的值访问时候的1个分类1样的东西,例如你写成/login和/时候访问时候就会变成以下情势:
http://localhost:8080/项目名称/login/......(/login)
http://localhost:8080/项目名称/......(/)
第2个参数指的是哪一个类来实现这个逻辑。
3.实现LoginController类
例如你要实现登录的动作,可以新建1个方法,访问时候直接访问该方法便可,例如我新建的方法名字叫做LoginAction,所以我在访问时候就能够这样来调用这个登录动作:
http://localhost:8080/项目名称/LoginAction
所以这是方法名称的含义;其次就是获得get要求参数的方法为
this.getPara(String param)方法,里面的参数就是get要求时候的参数,当用户登录成功或失败时候,需要使用this.renderjson(Object obj)方法来实现Json数据的反馈,其中User userModule = LoginService.getUserInfo(user,pwd);这1句的意思我们拿到后面来讲,LoginController的具体代码以下:
package com.myapp.controller;import com.alibaba.fastJson.JsONArray;import com.alibaba.fastJson.JsONObject;import com.jfinal.core.Controller;import com.myapp.module.User;import com.myapp.service.LoginService;/** * 登录动作 * http://localhost:8080/API/login/LoginAction?username=zhangsan&password=123 * * @author zhang * */public class LoginController extends Controller { /** * 登录动作 */ public voID LoginAction() { String user = this.getPara("username"); String pwd = this.getPara("password"); User userModule = LoginService.getUserInfo(user,pwd); JsONObject object = new JsONObject();// 外层Json JsONObject infos = new JsONObject();// 成功以后的用户信息 JsONArray data = new JsONArray();// 承载用户信息的array if (userModule == null) {// 用户名或密码毛病 object.put("errorCode",0); object.put("msg","用户名或密码毛病"); object.put("data",data); this.renderjson(object); } else if (userModule != null && !userModule.get("password").equals(pwd)) {// 密码毛病,请核对 object.put("errorCode","密码毛病,请核对"); object.put("data",data); this.renderjson(object); } else {// 登录成功,返回成功登录信息 object.put("errorCode",1); object.put("msg","登录成功"); // 用户信息 infos.put("username",userModule.get("username")); infos.put("nickname",userModule.get("nickname")); infos.put("sex",userModule.getInt("sex")); infos.put("usertype",userModule.getInt("usertype")); infos.put("nickname",userModule.get("nickname")); infos.put("mobile",userModule.get("mobile")); infos.put("score",userModule.getInt("score")); infos.put("token",LoginService.insertTOKEN(user)); // 添加值data数组中 data.add(infos); object.put("data",data); this.renderjson(object); } }}
4.实现实体类
Jfinal在实体类上面我觉得应当是最爽的了,首先在module类中新建1个User.java类,并继承Model,在泛型中加入User类本身,这样1个实体类就写好了,至于为何要继承Model这个类,应当做过开发的同学很清楚,实体类中1般会有数据库表对应的字段或getset方法,但是在Jfinal中完全可以不写这些东西,在MyAppConfig类中设置表映照关系便可实现getset方法,而且这个进程是自动实现的!下面给出User类的实现代码:
package com.myapp.module; import com.jfinal.plugin.activerecord.Model;/** * 用户表 * @author zhang * */@SuppressWarnings("serial")public class User extends Model<User>{}
编写好User以后来实现下映照关系,到MyAppconfig的configPlugin方法中在添加插件之前的这句话上面(plugins.add(activeRecordplugin);),添加映照关系
activeRecordplugin.addMapPing("tb_user","ID",User.class);
这3个参数分别是,表名,主键,和对应的实体类是哪个,这样实体类就配置好了。
5.实现LoginService逻辑
在上面说到
User userModule = LoginService.getUserInfo(user,pwd)
这句话,这句话的意思是需要获得到指定用户名密码的用户的用户信息,如果存在的话,就会返回数据库表中的信息;如果不存在的话就会返回空null给User,所以后面的判断都是根据的这个实体类来实现的,首先需要判断数据库中这个用户信息是不是存在,存在的话再返回给User来使用,所以来看下LoginService.getUserInfo该类下的该方法是如何实现的;
首先新建1个LoginService在service包下,并创建getUserInfo方法,具体代码和说明以下:
package com.myapp.service;import com.jfinal.plugin.activerecord.Db;import com.myapp.module.User;import com.myapp.utils.TokenUtil;/** * 登录的动作 * */public class LoginService { /** * 获得用户信息 * * @return */ public static User getUserInfo(String username,String pwd) { String sql = "SELECT * FROM tb_user WHERE username=?";// SQL语句中?可以避免sql注入,多参数多? User user = new User().findFirst(sql,username);// 使用findFirst来实现指定查找,并且查找到的数据会以反射的情势来给User实体类 return user;// 返回User实体类 } /** * 插入token验证 * * @return */ public static String insertTOKEN(String username) { String key = TokenUtil.generalKey(); String sql = " UPDATE tb_user SET token=? WHERE username=?"; Db.update(sql,key,username);//不关联任何实体类的方法,其中有增删改查方法,可以自己来实现下看看 return key; }}
到次,就编写终了了,可以运行下试试看了,运行结果以下:
项目Demo下载地址:
http://download.csdn.net/detail/u011539882/9633407
推荐的文章,可以1起深入学习:
http://www.open-open.com/lib/vIEw/open1429844976073.HTML
http://www.zuIDaima.com/share/2307668580043776.htm
以上是内存溢出为你收集整理的【JAVAEE】用最快最酸爽最简单的方式开发Android接口全部内容,希望文章能够帮你解决【JAVAEE】用最快最酸爽最简单的方式开发Android接口所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)