10分钟学会使用YangMVC构建HTTP-JSON服务器
Posted TaiJi1985
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10分钟学会使用YangMVC构建HTTP-JSON服务器相关的知识,希望对你有一定的参考价值。
编写目的
当你做一个App时,或者使用异步方式设计一个网站的时候,你往往需要使用Web服务器提供JSON数据。这时候你可以了解一下YangMVC的使用。对于一个有经验的开发人员来说,了解这个框架的使用,只需要10分钟。
欢迎自由转载!!!
环境搭建
A 下载jar并加到编译路径中
1 在下面的网站下载最新版的yangmvc-xxxx-boot.jar ,请注意下载boot版本。
https://gitee.com/yangtf/YangMVC/attach_files
注意是boot版本,下载后加到编译路径就好。下面的2,3是为初学者写的步骤。
对于很多项目来说,你只需要加这一个jar包就好了!!!!
2 使用你的IDE建立一个Java Project.(不需要是web工程)
3 新建一个libs目录,将下载的jar放入,将上述jar加到Build Path中。
这个jar包已经包含了jdbc驱动、fastjson等类库,所以你无需再自行添加。
B 在src中添加配置文件
在src下面(源代码根目录下)新建一个web.properties ,内容如下
controller=org.demo
template=/view
dbhost=localhost
dbusr=root
dbpwd=123456
dbname=mvc_demo
dbport=3306
reloadable=true
dbtype=mysql
其中变量的含义不言自明。 controller的值为一个包名。所有的控制器都要写在这个包下面。
db开头的变量全都是数据库的信息,包括主机(dbhost)、用户(dbusr)、密码(dbpwd)等。
数据库类型目前支持 mysql和 postgresql
reloadable是一个强大的调试功能。允许你修改完一个控制器后,不需要重启服务即刻生效。(即刻!)
C 开始写控制器
5 在org.demo下建立控制器
package org.demo;
import org.docshare.mvc.Controller;
import org.docshare.orm.LasyList;
public class IndexController extends Controller
public void index()
LasyList list =T("book").all().limit(10);
outputJSON(list);
D 运行
选中工程点击运行, 选择主类为ServerMain。即可启动工程。
控制台里大概会这么显示
2018-06-13 17:25:08,218 [ INFO] Server start .........
2018-06-13 17:25:08,288 [DEBUG] MIME load 407 items
2018-06-13 17:25:08,292 [DEBUG] read prop from file:/C:/work/jspwork/TestYangMVCBoot/bin/web.properties
2018-06-13 17:25:08,292 [DEBUG] class loader name sun.misc.Launcher$AppClassLoader@40affc70
2018-06-13 17:25:08,292 [ INFO] Config file found !
2018-06-13 17:25:08,293 [ INFO] web.properties loaded
2018-06-13 17:25:08,295 [DEBUG] try load init class org.demo.Init
2018-06-13 17:25:08,295 [DEBUG] init class not found
2018-06-13 17:25:08,370 [ INFO] view/ dir not found ! ,use classpath
2018-06-13 17:25:08,371 [ INFO] Config [dbhost=localhost, dbname=mvc_demo, dbusr=root, dbpwd=[hidden], port = 3308, tpl_base=/view, ctr_base=org.demo,reloadable=true,useSSL=false,interceptors=]
2018-06-13 17:25:08,384 [ INFO] jetty-8.0.y.z-SNAPSHOT
2018-06-13 17:25:08,445 [ INFO] Started
2018-06-13 17:25:08,446 [ INFO] 服务器已经开启 Server is Started
2018-06-13 17:25:08,446 [ INFO] please visit http://127.0.0.1:1985
2018-06-13 17:25:08,456 [ INFO] 本机的IP = 127.0.0.1
2018-06-13 17:25:08,457 [ INFO] 本机的IP = 192.168.1.150
2018-06-13 17:25:08,457 [ INFO] 每按一次回车键打开一次浏览器,Press Enter key to open browser
访问
在控制台上输入回车,即可自动打开浏览器,您也可以手工打开浏览器,并输入
http://localhost:1985
端口修改
如果您想修改端口号,您可以再运行配置中加入参数 80 ,这样就会在80端口监听。
说说控制器
控制器的路径有的框架基于标注,有的框架基于配置, YangMVC基于命名约定。
如IndexController对应根目录, 其中的index方法对应默认页。
下面我们再建一个方法来说明这个问题。在IndexController中再建立一个方法
public void haha()
output("this is a test");
,那么我们使用/haha即可访问它。如图
即 方法对应的路径为 http://localhost:1985/方法名
另外,BookController,对应 /book/ 目录。 浏览器直接访问 /book/目录 ,框架会调用BookController的index方法。
/book/add 对应BookController的add方法。
/haha 对应 IndexController的haha方法。
/haha/ 对应HahaController的index方法。
/haha/ccc 对应HahaController的ccc方法
这就是基于命名约定的映射。因为现在要为app或前端提供数据,我们不需要给后端做太多的灵活性。
比如有人写了一个
haha方法,希望他映射为 wuwu,这种需求往往直接修改方法名更为方便。
关于参数
获取URL参数和Form参数,是非常常见的。Struts框架采用了注入到成员变量的方式, Spring采用了参数的方式,YangMVC使用param()函数获取。
public void testp()
String a = param("a");
output("a = "+a);
咱也可以用标注
public void testp2(@Param("a")int a,@Param("b")int b)
output(a+b+"");
访问试试
大量参数如何处理
我们有时候一个表单中有大量的参数,使用这种调用函数的方式很不方便。YangMVC提供了强大的方法,paramToModel()可以将参数根据命名匹配的原则直接放入Model对象中。 这个我们结合数据库再讲。
ORM框架(数据库读写)
通用POJO和DAO类方式
YangMVC提供了两种方式,一种是通用的POJO类,叫做Model(有的框架叫做Record),通用的DAO类,叫做DBTool, 查询得到的Model的数组叫做LasyList.
,一种是通过YangMVC提供的工具自动生成POJO类。
先来看第一种方式。创建一个DAO类
DBTool tool = Model.tool("book"); //book为表名
Model m = tool.get(12); //根据主键查询
Model m2 = tool.get("name","yang"); //根据其他唯一性的列进行查询。
LasyList list = tool.all().eq("catalog_id",12); //相当于 select * from book where catalog_id = 12;
list = tool.all().gt("id",100).lt("id",120); //相当于 select *from book where id >100 and id<120
list = tool.all().limit(10,20).orderby("id",true); //相当于 select * from book order by id asc limit 10,20
上面的例子是各种查询,下面看删除
Model m = ...(通过查询获取)。。。。。
m.remove() ; //删除该数据
根据主键删除
Model.tool("book").del(12); //相当于delete from book where id = 12;
修改
Model m = 先查询获取
m.put("name","新的值");//name为列名
m.save(); //保存即可更新数据库数据
生成类方式
运行项目时,选择主类 ConfigCreater , 根据提示输入用户名和密码后,即可生成出对应的java类。下面有一个数据库表
mysql> desc book;
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
| catalog_id | int(11) | YES | MUL | NULL | |
+------------+-------------+------+-----+---------+----------------+
9 rows in set
mysql>
它生成出的Book类的代码如下。 它将传统的POJO和DAO结合起来,并没有使用setter和getter这种冗余的写法。
package org.demo.pojo;
import org.docshare.orm.LasyList;
import java.util.List;
import org.docshare.orm.Model;
public class Book
public String id;
public String name;
public Integer catalog_id;
public static final String TABLE_NAME = "book";
/**
* 更新
*/
public int update()
return Model.tool(TABLE_NAME).save(this);
/**
* 插入
*/
public int insert()
return Model.tool(TABLE_NAME).save(this,true);
/**
* 根据主键获取
*/
public static Book findByKey(Object id)
return Model.tool(TABLE_NAME).get(id).toObject(new Book());
/**
* 根据其他列的值进行获取,如果获取结果有多个,则输出第一个。
*/
public static Book findByColumn(String column,Object id)
return Model.tool(TABLE_NAME).get(column,id).toObject(new Book());
/**
* LasyList对象转对象数组
*/
public static List<Book> fromList(LasyList list)
return list.toArrayList(Book.class);
/**
* 根据主键进行删除
*/
public static int delByKey(Object key)
return Model.tool(TABLE_NAME).del(key);
/**
* 删除当前对象
*/
public void remove()
Model.tool(TABLE_NAME).del(id);
/**
* 外键查询
* @return
*/
public Catalog getCatalog()
return Catalog.findByKey(catalog_id);
使用举例
//获取
Book b = Book.findByKey(1);
Log.i(b);
//更新
b.name = "测试"+new Date().getSeconds();
b.update();
//插入
Book b2= new Book();
b2.name = "haha";
b2.catalog_id =1;
b2.insert();
Book b3= new Book();
b3.name = "wuwu";
b3.catalog_id =1;
b3.insert();
//删除
Book.delByKey(2);
b3.remove();
对于列表,可以先通过上面查询得到LasyList,在通过Book.fromList(list);转换为Book数组。如
LasyList list = Model.tool("book").limit(30); //通过前面的查询获取,这里只是举例
List<Book> books = Book.fromList(list);
如何将上面得到的列表输出?
outputJSON(list) ; //这个list为LasyList对象
或者
outputJSON(books) ; //这个books为List<Book>对象。```
JSON类库我们使用了fastjson,因为他支持public 的成员变量,可以不用setter和getter。
还有很多不清楚
完整的文档请看
https://gitee.com/yangtf/YangMVC/wikis/pages
javadoc 地址
http://yangtf.gitee.io/yangmvc/YangMVC/doc/index.html
最核心的几个类的Javadoc
基本上来说,只要掌握这三个核心的类,就可以自如使用这个框架。
控制器Controller类
http://yangtf.gitee.io/yangmvc/YangMVC/doc/org/docshare/mvc/Controller.html
DBTool类 http://yangtf.gitee.io/yangmvc/YangMVC/doc/org/docshare/orm/DBTool.html
LasyList类 http://yangtf.gitee.io/yangmvc/YangMVC/doc/index.html
只看文档还不清楚? 看视频教程
https://www.bilibili.com/video/av22089850?from=search&seid=6426261635261016249
在B站上的视频。。。够详细了吧?
还是有不清楚的?看源代码,开源的啊。
https://gitee.com/yangtf/YangMVC
托管在码云。。。
以上是关于10分钟学会使用YangMVC构建HTTP-JSON服务器的主要内容,如果未能解决你的问题,请参考以下文章
高效快捷简便易用的基于JSP的框架 MVC+ORM框架- YangMVC