1、约定

//资源路径约定(不用配置;也不能配置)
resources/app.properties( 或 app.yml ) #为应用配置文件
resources/static/ #为静态文件根目标
resources/WEB-INF/view/ #为视图模板文件根目标(支持多视图共存) //调试模式约定:
启动参数添加:-debug=1

2、应用启动过程

请参考: 《想法与架构笔记》,关于应用内在的启动过程的内容。

3、服务端口配置

在应用主配置文件里指定:

server.port: 8081

可以在运行时指定系统属性(优先级高):

java -Dserver.prot=9091 -jar DemoApp.jar

还可以,在运行时通过启动参数指定(优先级更高):

java -jar DemoApp.jar -server.prot=9091

4、静态资源放哪里

Solon 的默认静态资源的路径为:(这个没得改,也不让改;为了简化套路)

resources/static/

在默放的处理规则下,所有请求,都会先执行静态文件代理。静态文件代理会检测是否存在静态文件,有则输出,没有则跳过处理。输出的静态文件会做304控制。

也可以在启动时,添加别的静态资源目录:

public class DemoApp{
public void main(String[] args){
Solon.start(DemoApp.class, args, app->{
//更多添加方式,可参考 solon.extend.staticfiles 插件的能力
StaticMappings.add("/", new ClassPathStaticRepository("user"));
});
}
}

5、路径重定向与转发

路径重定向

public class DemoController{
@Mapping("/")
public void home(Context ctx) {
//通过302方式,通知客户端跳转到 /login (浏览器会发生2次请求,地址会变成/login)
ctx.redirect("/login");
}
}

路径转发

public class DemoController{
@Mapping("/")
public void home(Context ctx) {
//在服务端重新路由到 /login (浏览器发生1次请求,地址不会变)
ctx.forward("/login");
}
}

6、文件上传与下载

public class DemoController{
//文件上传
@Post
@Mapping("/upload")
public String upload(UploadedFile file) {
return file.name;
} //文件下载
@Get
@Mapping("/down")
public DownloadedFile down() {
return new DownloadedFile("text/json",
"{\"code\":1}".getBytes(StandardCharsets.UTF_8),
"test.json");
}
}

7、统一请求异常处理和性能记时

//过滤所有因请求产生的异常(顺带加点别的)
@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);
}
}

8、读取自定义的配置文件

//直接注入
@Configuration
public class Config{
@Inject("${classpath:user.yml}")
private UserModel user;
} public class DemoApp{
public void main(String[] args){
Solon.start(DemoApp.class, args, app->{
app.cfg().loadAdd("user.yml");
});
}
}

9、也有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 开发,二、开发知识准备的更多相关文章

  1. 恶补web之二:css知识(3)

    css有3种定位机制:普通流,浮动和绝对定位. 除非专门指定,否则所有框都在普通流中定位,即普通流中的元素位置由元素在(x)html中的位置决定. 通过使用position属性,可以选择4种不同类型的 ...

  2. 恶补web之二:css知识(2)

    css字体属性定义文本的字体系列,大小,加粗,风格和变形等. css中包含两种字体系列:通用字体系列和特定字体系列. font-family属性定义文本的字体系列: body {font-family ...

  3. 恶补web之二:css知识(1)

    css指层叠样式表(Cascading Style Sheets)     样式定义如何显示html元素,样式通常存储在样式表里.把样式添加到html4.0中,是为了解决内容与表现分离的问题.外部样式 ...

  4. Solon Web 开发,十二、统一的渲染控制

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  5. Solon Web 开发

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  6. Solon Web 开发,一、开始

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Solon Web 开发,四、请求上下文

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. Solon Web 开发,六、过滤器、处理、拦截器

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

随机推荐

  1. 系统分析师教程(张友生)高清pdf下载

    最近准备考系统分析师,故找了一本张又生编著的<系统分析师教程>的电子书,本来想买本书,可惜有点小贵,舍不得,故寻找电子版下载,花了不少时间才找到,现在分享给大家. http://item. ...

  2. JAVA读取本地html文件里的html文本

    /** * 读取本地html文件里的html代码 * @param file File file=new File("文件的绝对路径") * @return */ public s ...

  3. JAVA获取访问者IP地址

    pom <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomc ...

  4. JAVA通过经纬度获取两点之间的距离

    private static double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math ...

  5. 【九度OJ】题目1138:进制转换 解题报告

    [九度OJ]题目1138:进制转换 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1138 题目描述: 将一个长度最多为30 ...

  6. 【九度OJ】题目1207:质因数的个数 解题报告

    [九度OJ]题目1207:质因数的个数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1207 题目描述: 求正整数N(N& ...

  7. BST的中序后继

    二叉搜索树中的顺序后继:从BST中找到指定节点的下一个节点. 比如1的下一个是2,2的下一个是3,4的下一个是5. 思路: 方法1:递归执行中序遍历,获取list,得到p的下一个.时间O(N),空间O ...

  8. 过河(状态压缩,dp)

    描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上 ...

  9. C++中常用的数学函数总结

    我们在C++程序设计的过程中往往会使用到一些数学函数,那么不同的数学运算要用到什么函数哪?大家可以参考我的总结如下: 首先引用到数学函数时一定要记得加函数头文件 #include<cmath&g ...

  10. rabbitmq集群和镜像队列

    Rabbitmq集群和镜像队列 1引言 1.1编写目的 2 原理和使用 2.1镜像队列原理 2.1.1 原理 默认的一个rabbitmq中的queue是在一个node上的,至于在那个node上取决于c ...