日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > 【JAVAEE】用最快最酸爽最簡單的方式開發Android接口

【JAVAEE】用最快最酸爽最簡單的方式開發Android接口

來源:程序員人生   發布時間:2016-12-08 16:45:14 閱讀次數:4077次

之前有個哥們給我1個SSM(Spring+SpringMVC+MyBatis)框架的工程,讓我研究研究android接口的快速開發,得知這個很爽的SSM框架后,我開始研究這個工程,后來實驗了半天,作為1個EE小白得到的感受是:

  • SSM里面的配置很多;
  • 雖然已是很簡單很快速的幾個方法幾個接口就KO接口了,但是配置還是很復雜

因而,放棄了.....但是個人認為,對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

varchar

密碼

nickname

varchar

昵稱

sex

int

性別

usertype

int

用戶權限類型

email

varchar

郵箱

mobile

char

手機號

score

int

用戶積分

token

varchar

Token驗證

base

varchar

備用字段

base

varchar

備用字段

base

varchar

備用字段

貼下我的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', '1', '1028940102@qq.com', '1812345678', '12', null, null, null, null); INSERT INTO `tb_user` VALUES ('2', '2', '2', '2', '2', '2', '2', '2', '2', null, null, null, 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.jar
  • commons-collections⑶.1.jar
  • commons-lang⑵.3.jar
  • commons-logging.jar
  • druid⑴.0.5.jar
  • ezmorph⑴.0.6.jar
  • fastjson⑴.1.25.jar
  • jfinal⑵.2-bin-with-src.jar
  • json-lib⑵.1.jar
  • mchange-commons-java-0.2.3.4.jar
  • mysql-connector-java⑸.1.6-bin.jar
  • servlet-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{ @Override public void configConstant(Constants me) { // TODO Auto-generated method stub } @Override public void configRoute(Routes me) { // TODO Auto-generated method stub } @Override public void configPlugin(Plugins me) { // TODO Auto-generated method stub } @Override public void configInterceptor(Interceptors me) { // TODO Auto-generated method stub } @Override public void configHandler(Handlers me) { // TODO Auto-generated method stub } } </span>


其中:

public void configConstant(Constants me)

用于設置全局的設置如編碼等

public void configRoute(Routes me)

用于設置路由地址,訪問地址

public void configPlugin(Plugins plugins)

用于配置1些插件,如連接數據的插件

public void configInterceptor(Interceptors me)

用于配置攔截器

public void configHandler(Handlers me)

用于配置全局攔截器

 

基本配置以下:


<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, file log4j.appender.stdout.Target=System.out log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Output to the File log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=./web.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Druid log4j.logger.druid.sql=warn,stdout log4j.logger.druid.sql.DataSource=warn,stdout log4j.logger.druid.sql.Connection=warn,stdout log4j.logger.druid.sql.Statement=debug,stdout log4j.logger.druid.sql.ResultSet=warn,stdout </span>


配置JDBC,新建Config.properties,并加入以下內容,注意修改:

<span style="font-family:SimSun;">driver =com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://你的數據庫地址:3306/數據庫名字?characterEncoding=utf⑻ user=root //用戶名 password=123456 //密碼 initialSize=1 minIdle=1 maxActivee=20</span>

除此以外,還需要在MyAppConfig.java文件中對JDBC進行配置,配置的代碼需要放在configPlugin方法中,有兩個插件可以快速連接數據庫,分別為C3P0,還有Druid個人比較偏向于使用DruidDruid為例來進行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類;

在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", 0); object.put("msg", "密碼毛病,請核對"); 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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本一区二区三区久久 | 日本动漫做毛片一区二区 | 久久久久久久国产精品影院 | 欧美高清视频在线 | 在线成人一区 | 婷婷久久综合九色综合绿巨人 | 久久成人国产精品 | 国产精品久久久久久久久久三级 | 国产精品久久久久久久久久免 | 在线一区视频 | 91精品网| 好看的黄色网址 | 国产视频在线一区 | www.日韩精品 | 另类 欧美 日韩 国产 在线 | 成年人视频网站 | 久草99| 日韩欧美国产一区二区三区 | 日韩久久久精品 | 极品视频在线 | 日韩中文字幕网站 | 亚洲精品一二 | 欧美一区二区三区视频在线 | 人人干人人草 | 日韩av影片在线观看 | 操操操av| 激情欧美日韩 | 国产精品初高中精品久久 | 欧美日韩一区二区在线观看 | 一级黄色在线看 | 国产精品区一区二区三 | 欧美精品成人一区二区三区四区 | 亚洲久久久| 久久久青草婷婷精品综合日韩 | 欧美电影一区二区三区 | 亚洲欧洲另类 | 日韩精品免费在线 | 亚洲国产精品99久久久久久久久 | 免费成人av网 | 国产黄色av| 亚洲免费av片 |