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. Spring 5| 轻量级的开源JavaEE框架

    一.Spring框架的概述 1.Spring是轻量级的开源的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心的部分:IOC(控制反转)和AOP(面向切面编程) ...

  2. jetbrain家的fleet(已获得预览权限)直接对标vscode , fleet有望超过vscode吗?今天我们实际操作下

    申请预览版 等待了一周终于得到了预览版的机会 今天就来简单使用下. 前言 工程管理大多使用的是maven , 在maven之前还有ant 这个应该已经没多少人在使用了,或者说新人基本不在使用ant , ...

  3. java 编程基础:注解(Annotation Processing Tool)注解处理器 利用注解解读类属性生成XML文件

    APT的介绍: APT(Annotation Processing Tool)是一种注解处理工具,它对源代码文件进行检测,并找出源文件所包含的注解信息,然后针对注解信息进行额外的处理. 使用APT工具 ...

  4. 『学了就忘』Linux日志管理 — 91、日志服务rsyslogd说明

    目录 1.日志文件格式 2.rsyslogd服务的配置文件 (1)rsyslog.conf文件内容 (2)rsyslog.conf配文件内容说明 (3)定义自己的日志 1.日志文件格式 只要是由日志服 ...

  5. MyBatis学习(四)MyBatis一对一关联查询

    一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...

  6. jQuery Validate验证(判断)某个字段是否通过验证

    jQuery Validate 默认只能判断整个表单是否验证通过,但是有时候我们需要对某个字段进行判断 ,可以使用以下方法 var bool=$("整个form表单的ID").va ...

  7. JAVA调用微信接口实现页面分享功能(分享到朋友圈显示图片,分享给朋友)

    钉钉提供的内网穿透之HTTP穿透:https://www.cnblogs.com/pxblog/p/13862376.html 网页分享到微信中如何显示标题图,如果自定义标题图,描述,显示效果如下 官 ...

  8. The Limitations of Deep Learning in Adversarial Settings

    目录 概 主要内容 alg2, alg3 一些有趣的实验指标 Hardness measure Adversarial distance Nicolas Papernot, Patrick McDan ...

  9. MySQL高级查询与编程作业目录 (作业笔记)

    MySQL高级查询与编程笔记 • [目录] 第1章 数据库设计原理与实战 >>> 第2章 数据定义和操作 >>> 2.1.4 使用 DDL 语句分别创建仓库表.供应 ...

  10. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...