Solon 微服务框架与多视图技术实践
Solon 是一款轻量、高效的,在保持简洁的同时,也支持多视图技术,能灵活对接,满足不同场景下的页面渲染需求。本篇博客将结合示例项目,讲解 Solon 框架及多视图技术的应用。
目录
2.4 Freemarker 模板(helloworld.ftl)
Solon 是一款轻量、高效的 Java 微服务框架,在保持简洁的同时,也支持多视图技术,能灵活对接 Freemarker、Thymeleaf 等模板引擎,满足不同场景下的页面渲染需求。本篇博客将结合示例项目,讲解 Solon 框架及多视图技术的应用。
一、项目结构与依赖
1.1 项目结构
src/main/java:存放 Java 代码,包含控制器(controller)、数据访问层(dao)和启动类(App)。src/main/resources:存放资源文件,templates目录用于放置视图模板(如 Freemarker 的helloworld.ftl、Thymeleaf 的th1.html),app.yml是配置文件。pom.xml:管理项目依赖。

1.2 依赖说明
在 pom.xml 中,引入了 Solon 相关核心依赖:
-
solon-web:Solon 核心 Web 模块,提供 Web 开发基础能力。 -
solon-view-freemarker:Solon 对 Freemarker 视图模板的支持依赖。 -
solon-view-thymeleaf:Solon 对 Thymeleaf 视图模板的支持依赖。 -
solon-maven-plugin: Solon专用的Maven插件,简化打包部署。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>com.pp</groupId>
<artifactId>solonweb1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging><parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>3.5.0</version>
<relativePath />
</parent>
<name>solonweb1</name>
<url>http://maven.apache.org</url><properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency><!-- Solon Web核心 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
</dependency><!-- Freemarker视图支持 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-view-freemarker</artifactId>
</dependency><!-- Thymeleaf视图支持 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-view-thymeleaf</artifactId>
</dependency></dependencies>
<!-- Solon专用的Maven插件,简化打包部署 -->
<build>
<plugins>
<plugin>
<groupId>org.noear</groupId>
<artifactId>solon-maven-plugin</artifactId>
</plugin>
</plugins></build>
</project>
1.3 应用配置文件
# app.yml
server.port: 8081
二、核心代码解析
2.1 启动类(App.java)
Solon.start(App.class, args) 是 Solon 应用的启动入口,它会加载配置,扫描并初始化相关组件,启动 Web 服务。
package com.pp.solonweb1;
import org.noear.solon.Solon;
import com.pp.solonweb1.App;
public class App
{
public static void main( String[] args )
{
Solon.start(App.class, args);
}
}
2.2 数据访问层(UserDao.java)
使用 @Component 注解将 UserDao 类标识为 Solon 组件,使其能被框架扫描并纳入容器管理,方便在其他组件(如控制器)中通过依赖注入使用。
package com.pp.solonweb1.dao;
import org.noear.solon.annotation.Component;
@Component
public class UserDao {
public String query() {
System.out.println("查询数据库");
return "查询数据库的表的数据";
}
}
2.3 控制器(UserController.java)
-
@Controller:标识该类为控制器组件,处理 Web 请求。 -
@Mapping("/user"):指定控制器的基础访问路径为/user。 -
@Inject:依赖注入,从 Solon 容器中获取UserDao实例。 -
三个请求处理方法:
-
loadIndex1:直接返回字符串,由框架处理为简单响应。 -
loadIndex2:使用 Freemarker 模板(helloworld.ftl),通过ModelAndView传递数据到模板进行渲染。 -
loadIndex3:使用 Thymeleaf 模板(th1.html),同样通过ModelAndView传递数据。
package com.pp.solonweb1.controller;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Inject;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.core.handle.ModelAndView;
import com.pp.solonweb1.dao.UserDao;
@Controller
@Mapping("/user")
public class UserController {
@Inject
private UserDao dao; // 依赖注入,自动注入UserDao实例
/**
* 返回纯文本数据
*/
@Mapping("/index1")
public String loadIndex1() {
System.out.println("UserController is loadIndex1 start...");
return this.dao.query();
}
/**
* 使用Freemarker模板渲染
*/
@Mapping("/index2")
public Object loadIndex2() {
System.out.println("UserController is loadIndex2 start...");
// 注意,ModelAndView带后缀。自动根据文件后缀选择对应的模板引擎。
ModelAndView vm = new ModelAndView("helloworld.ftl");
// put()方法向模板传递数据
vm.put("title", "Solon的多视图技术");
vm.put("message", "欢迎大家学习Solon的技术");
vm.put("schoolname", "喵喵咪");
return vm;
}
/**
* 使用Thymeleaf模板渲染
*/
@Mapping("/index3")
public Object loadIndex3() {
System.out.println("UserController is loadIndex3 start...");
ModelAndView model = new ModelAndView("th1.html");
model.put("title", "dock");
model.put("msg", "你好 world!");
return model;
}
}
2.4 Freemarker 模板(helloworld.ftl)
Freemarker 模板通过 ${} 语法获取 ModelAndView 中传递的数据,如 ${title} 会渲染为 Solon的多视图技术,${message} 渲染为 欢迎大家学习Solon的技术,${schoolname} 渲染为 喵喵咪。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
</head>
<body>
<div>
${message}
${schoolname}
</div>
</body>
</html>
2.5 Thymeleaf 模板(th1.html)
Thymeleaf 模板使用 th:text 等属性来渲染数据,th:text="${title}" 会将 title 的值(dock)设置为 <title> 标签的文本内容,th:text="${msg}" 会将 msg 的值(你好 world!)设置为 <span> 标签的文本内容。
<!DOCTYPE html>
<html>
<head>
<title th:text="${title}"></title>
</head>
<body>
<main>
thymeleaf::<span th:text="${msg}"></span>
</main>
</body>
</html>
三、多视图技术演示
3.1 简单字符串响应
访问地址:
http://localhost:8081/user/index1
该接口直接返回 UserDao 的 query 方法结果字符串 查询数据库的表的数据,框架会将其作为响应体返回:

3.2 Freemarker 视图访问
访问地址:
http://localhost:8081/user/index2
Solon 会根据 ModelAndView 中指定的 helloworld.ftl,找到对应的 Freemarker 模板,将 title、message、schoolname 数据渲染到模板中,最终返回渲染后的 HTML 页面。

3.3 Thymeleaf 视图访问
访问地址:
http://localhost:8081/user/index3
Solon 会根据 ModelAndView 中指定的 th1.html,找到对应的 Thymeleaf 模板,将 title、msg 数据渲染到模板中,返回渲染后的 HTML 页面。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)