Solon Web 开发:二、开发知识准备
1、约定
//资源路径约定(不用配置;也不能配置)
resources/app.yml( 或 app.properties ) #为应用配置文件
resources/WEB-INF/static/ 或者 resources/static/ #为静态文件根目录(目录二选一,v2.2.10 后支持)
resources/WEB-INF/templates/ 或者 resources/templates/ #为视图模板文件根目录,支持多种视图共存(目录二选一,v2.2.10 后支持)
//调试模式约定:
启动参数添加:--debug=1
2、应用启动过程
请参考: 《应用生命周期》 的上两段。
3、服务端口配置
在应用主配置文件里指定:
server.port: 8081
可以在运行时指定系统属性(优先级高):
java -Dserver.port=9091 -jar DemoApp.jar
还可以,在运行时通过启动参数指定(优先级更高):
java -jar DemoApp.jar -server.port=9091
4、静态资源放哪里
Solon 的默认静态资源的路径为:
resources/static/
这个默认没得改,但是可以添加更多(具体可参考:《生态 / solon.web.static》):
#添加静态目录映射。(按需选择)#v1.11.0 后支持
solon.staticfiles.mappings:
- path: "/img/" #路径,可以是目录或单文件
repository: "/data/sss/app/" #1.添加本地绝对目录(仓库只能是目录)
- path: "/"
repository: "classpath:user" #2.添加资源路径(仓库只能是目录)
- path: "/"
repository: ":extend" #3.添加扩展目录
在默放的处理规则下,所有请求,都会先执行静态文件代理。静态文件代理会检测是否存在静态文件,有则输出,没有则跳过处理。输出的静态文件会做304控制。
框架不支持 "/" 自动跳转到 "/index.html" 的方式(现在少见了,也省点性能)。如有需要,可添过滤器手动处理:
@Component(index = 0) //index 为顺序位(不加,则默认为0)
public class AppFilter implements Filter {
@Override
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
if("/".equals(ctx.pathNew())){ //ContextPathFilter 就是类似原理实现的
ctx.pathNew("/index.html");
}
chain.doFilter(ctx);
}
}
5、路径映射表达式说明
| 符号 | 说明 | 示例 |
|---|---|---|
** |
任意字符、不限段数 | ** 或 /user/** |
* |
任意字符 | /user/* |
? |
可有可无 | /user/? |
/ |
路径片段开始符和间隔符 | / 或 /user |
{name} |
路径变量申明 | /user/{name} |
具体可参考:《常用注解 / @Mapping 用法说明》
6、路径重定向与转发
路径重定向
public class DemoController{
@Mapping("/")
public void home(Context ctx) {
//通过302方式,通知客户端跳转到 “/index.html” (浏览器会发生2次请求,地址会变成/login)
ctx.redirect("/index.html");
}
}
路径转发(不支持转发到静态文件,静态处理与路由处理是两个体系)
public class DemoController{
@Mapping("/")
public void home(Context ctx) {
//在服务端重新路由到 “/index.html” (浏览器发生1次请求,地址不会变)
ctx.forward("/index.html");
}
}
7、请求参数注入或手动获取
支持 queryString, form-data, x-www-form-urlencoded, path, json body 等不同形式的参数直接注入:
//GET http://localhost:8080/test1?str=a&num=1
public class DemoController{
@Mapping("/test1")
public void test1(String str, int num) { //可自动注入 get, post, json body 形式的参数
}
@Mapping("/test2")
public void test2(Context ctx) {
//手动获取 get, post 参数
String str = ctx.param("str");
int num = ctx.paramAsInt("num", 0);
//手动获取 body 请求的数据
String body = ctx.body();
}
}
其中 queryString, form-data, x-www-form-urlencoded, path 参数,支持 ctx.param() 接口统一获取。
8、统一请求异常处理和性能计时
//过滤所有因请求产生的异常(顺带加点别的)
@Slf4j
@Component
public class AppFilter implements Filter {
@Override
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
//1.开始计时(用于计算响应时长)
long start = System.currentTimeMillis();
try {
chain.doFilter(ctx);
//2.未处理设为404状态
if(! ctx.getHandled()){
ctx.status(404);
}
//3.404状态的定制(也可对别的状态处理)
if (ctx.status() == 404) {
ctx.setHandled(true);
ctx.output("没有:(");
}
} catch (Throwable e) {
//4.异常捕促与控制
log.error(e);
}
//5.获得接口响应时长
long times = System.currentTimeMillis() - start;
System.out.println("用时:"+ times);
}
}
9、读取自定义的配置文件
//直接注入
@Configuration
public class Config{
@Inject("${classpath:user.yml}")
private UserModel user;
}
public class DemoApp{
public static void main(String[] args){
Solon.start(DemoApp.class, args, app->{
//加载到应用配置
app.cfg().loadAdd("user.yml");
});
}
}
10、也有jsp的支持(不建议用)
solon 的jsp支持,是基于视图模板的定位去处理的。根据启动器组件的不同,配置略有不同:
<!-- 添加 solon web 开发包 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
</dependency>
<!-- 添加 jetty 或 undertow 启动器 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.boot.jetty</artifactId>
</dependency>
<!-- 添加 jetty 或 undertow jsp 扩展支持包 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.boot.jetty.add.jsp</artifactId>
</dependency>
<!-- 添加 jsp 视图引擎 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.view.jsp</artifactId>
</dependency>
Solon Web 开发:二、开发知识准备的更多相关文章
- 恶补web之二:css知识(3)
css有3种定位机制:普通流,浮动和绝对定位. 除非专门指定,否则所有框都在普通流中定位,即普通流中的元素位置由元素在(x)html中的位置决定. 通过使用position属性,可以选择4种不同类型的 ...
- 恶补web之二:css知识(2)
css字体属性定义文本的字体系列,大小,加粗,风格和变形等. css中包含两种字体系列:通用字体系列和特定字体系列. font-family属性定义文本的字体系列: body {font-family ...
- 恶补web之二:css知识(1)
css指层叠样式表(Cascading Style Sheets) 样式定义如何显示html元素,样式通常存储在样式表里.把样式添加到html4.0中,是为了解决内容与表现分离的问题.外部样式 ...
- Solon Web 开发,二、开发知识准备
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,十二、统一的渲染控制
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,一、开始
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,四、请求上下文
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,五、数据访问、事务与缓存应用
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,六、过滤器、处理、拦截器
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
随机推荐
- Eclipse设置GC日志输出
今天看了关于垃圾回收的书籍,然后自己就想自己试试,自己就在eclipse里面配置了日志输出.方法如下: 1 右键项目,选择properties 2 选择run/debug setting 新建一个a ...
- 神经网络基础篇:Python 中的广播(Broadcasting in Python)
Python 中的广播 这是一个不同食物(每100g)中不同营养成分的卡路里含量表格,表格为3行4列,列表示不同的食物种类,从左至右依次为苹果,牛肉,鸡蛋,土豆.行表示不同的营养成分,从上到下依次为碳 ...
- CDQZ DS 题单总结(上)
Preview: 个人认为是一套非常好的题单,能在各个方面练习 DS 水平,并且很多题型也是比赛当中的经典题 题单链接 Challenge 0: 简单的数组,懒得写了. Challenge 1: 考虑 ...
- Element类型&Text类型&Comment类型
Element节点类型 nodetype=1 nodename=大写元素标签名 父节点可以说document 或element 其子节点可以是Element .Text .comment 访问元素 ...
- Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
在windows中使用命令行方式安装IIS(Web服务器) Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x ...
- 这些新项目一定不要错过「GitHub 热点速览」
本周 GitHub 热点上榜的项目有不少的新面孔,比如搞电子商务的 eShop,还有处理表数据的 onetable.还有用来方便处理数据同步问题的 loro,以及网易新开源的 tts 项目 Emoti ...
- Istio 网格的出口定义者:深入了解 Egress Gateway
本文分享自华为云社区<Istio Egress 出口网关使用>,作者:k8s技术圈. 前面我们了解了位于服务网格内部的应用应如何访问网格外部的 HTTP 和 HTTPS 服务,知道如何通过 ...
- 一篇文章带你掌握性能测试工具——Jmeter
一篇文章带你掌握性能测试工具--Jmeter 在目前的中大型企业中,仅仅进行功能测试已经不足以满足企业的需求,在重大客户基数下性能测试将会直接影响到用户体验 所以在这篇文章中我们将会学习性能测试的相关 ...
- MyBatisPlus简介
MyBatisPlus特性 国内的一个网站 网站地址简介 | MyBatis-Plus (baomidou.com)
- C++学习笔记八:极限和数学运算<limits><cmath>
1) <limits>库: 1.1 源文档: https://en.cppreference.com/w/cpp/types/numeric_limits #include <lim ...