# MVC功能
借助jboot提供的注解配置来支持web mvc功能,快速完成web开发访问.下面快速讲说明使用方法,更多信息看这里 (opens new window).
推荐目录结构
在开发WEB的MVC代码时,建议使用如下目录结构:
# 控制层
Controller
是Web MVC设计模式中的控制层
.通过继承JwebController
创建Controller
类.并在类上添加注解@RequestMapping
,即可完成控制层的编写.
例如,快速开始篇章中的IndexController
类:
import cc.jweb.boot.app.JwebApplication;
import cc.jweb.boot.controller.JwebController;
import io.jboot.web.controller.annotation.RequestMapping;
@RequestMapping(value = "/")
public class IndexController extends JwebController {
public static void main(String[] args) {
JwebApplication.main(args);
}
public void index() {
renderText("Hello World Jweb boot!");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
其中@RequestMapping中定义了该Controller的访问根路径为/,默认访问类的index方法. 可通过定不同类方法,并通过/{methodName}来访问相应的方法.
进阶
- 注解值支持从配置信息获取如
@RequestMapping(value = "${index.mapping}")
,然后jboot.properties
中配置index.mapping=/
- 通过在方法上注解
@ActionKey("{URI}")
来个性化的方法访问URI
(注意是绝对路径). - 通过在方法上注解
@NotAction
来标志该方法不可通过/{methodName}
访问
# 视图模板
jfinal使用Enjoy模板引擎来渲染视图,因此常用render("{模板路径}")来渲染输出内容
例如,修改Demo的IndexController的index方法如下:
@RequestMapping(value = "/")
public class IndexController extends JwebController {
@ConfigValue("undertow.port")
int port;
public static void main(String[] args) {
JwebApplication.main(args);
}
public void index() {
setAttr("port", port);
render("/WEB-INF/views/index.html");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
模板默认根目录为webroot
目录,因此,会向所有被配置为WEB资源目录
的目录列表中依次寻找模板文件/WEB-INF/views/index.html
,直到找到一个为止.
WEB资源目录
jweb的WEB资源目录默认配置为:undertow.resourcePath=src/main/webapp,WebRoot,WebContent,classpath:webapp,webapp
在IDEA的src/main目录下创建webapp/WEB-INF/views
目录(放在WEB-INF
下,避免模板代码被外部访问到,本人习惯放在 WEB-INF/views/
下).
然后在WEB-INF/views/
下创建index.html
模板文件.
<h1>Hello World Index.html #(port)</h1>
启动main方法,访问:http://localhost:8080/ (opens new window),将看到如下内容:
# 模型类
Model是 MVC 模式中的 M 部分。以下是 Model 定义示例代码:
@Table(tableName = "user", primaryKey = "user_id")
public class User extends JbootModel<User> implements IBean {
User dao = new User().dao();
}
2
3
4
然后就可以操作user表了:
以下为Model的一些常见用法:
// 创建title属性为James,age属性为25的User对象并添加到数据库
new User().set("title", "James").set("age", 25).save();
// 删除id值为25的User
User.dao.deleteById(25);
// 查询id值为25的User将其title属性改为James并更新到数据库
User.dao.findById(25).set("title", "James").update();
// 查询id值为25的user, 且仅仅取title与age两个字段的值
User user = User.dao.findByIdLoadColumns(25, "title, age");
// 获取user的title属性
String userName = user.getStr("title");
// 获取user的age属性
Integer userAge = user.getInt("age");
// 查询所有年龄大于18岁的user
List<User> users = User.dao.find("select * from user where age>18");
// 分页查询年龄大于18的user,当前页号为1,每页10个user
Page<User> userPage = User.dao.paginate(1, 10, "select *", "from user where age > ?", 18);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
详细使用方法,请前往