Solon Web 开发,二、开发知识准备

摘要:
您还可以在启动时添加其他静态资源目录:publicclassDemoApp{publicvoid main{Solon.start;}}5。路径重定向和转发路径重定向publicclassDemoController{@Mapping(“/”)publicvoid home{//通知客户端跳转到/loginctx.redirect;}}路径转发publicclassDemoController{@Mapping(”/“)publicvoid home{//重新路由到/logintx.forward;}6文件上载和下载publicclassDemo Controller{//文件上载@Post@MappingpublicStringupload{returnfile.name;}//文件下载@Get@MappingpublicDownloadedFiledown(){returnnewDownloadedFile;}}7。统一的请求异常处理和性能计时//过滤由请求引起的所有异常@Slf4j@ComponentpublicclassAppFilterimplementsFilter{@OverridepublicvoiddoFilterthrowsThrowable{//1。开始计时longstart=系统。currentTimeMillis();请尝试{chain.doFilter;//2。如果(!--添加solonweb开发包--˃org.noearsolonweb˂!

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 开发,二、开发知识准备》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在 Oracle 数据库中执行 SQL 语句遇到特殊字符的转义方式linux下安装nginx(编译安装)及反向代理及负载均衡下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Pycharm Debug功能详解

左键单击代码编辑区域中的行号以在调试模式下运行代码:单击左上角工具栏上的调试图标(bug图)。方法2:在调试模式下运行后,1。代码编辑区域中的蓝色条是当前程序运行的位置,即c=add(a)应该运行,但尚未运行。2.代码编辑区域中的深红色条是当前程序设置的所有断点行。3.左下方是程序堆栈,进入fun()函数。4.右下方是可变显示区域1。跳转到当前断点(在断点之...

virsh 连接虚拟机 (vnc 或 控制台)

第一种方法:1.如果虚拟机登录方法是VNC,请在ubuntu机器上安装vncviewer。在虚拟机的配置xml中,安装vncviewer$apt-geinstallvncviewer以查看虚拟机的端口地址$virshvncdisplaycontroller通过端口地址显示:0...

PLSQL常用配置之窗口/版面保存、SQL格式化/美化、SQL注释去掉注释等快捷键配置、登陆历史修改配置

//Blog.csdn.net/eyeidolon/article/details/8251791 PLSQL常用配置的快捷键配置,如窗口/布局保存、SQL格式化/美化和SQL注释删除,以及登录历史修改1的配置。PL/SQLDeveloper记住登录密码当使用PL/SQLDeveloper时,默认情况下PL/SQLDeveloper会执行此窗口中的所有SQL...

【原生】CocosCreator Android和游戏的通讯 (Java和TS互相调用、传递JSON数据、监听返回键)

Cocos版本:2.4.4参考:Cocos文档-Java原生反射机制Cocos文档-JSB使用指南-在Cocos中调用Android方法2在Android中调用Cocos方法3传输JSON数据4倾听返回键5 Cocos和Android相互调用时遇到的问题,TypeScript方法可以在Java中调用,Java方法可以在TypeScript中调用。在Cocos...

Redis之有序集合(Zset)

序列号命令和描述1ZADDkeyscore1member1[score2member2]将一个或多个成员添加到有序集合。...

bootstrap删除模态框弹出并询问是否删除【通用删除模态框】

divclass=“模态对话框”&gt;divclass=“modal header”&gt;spanaria hidden=“true”&gt;h4class=“模态标题”&gt;divclass=“modal body”&gt;divclass=“模态页脚”&gt;...