Solon 项目的开源地址:

https://gitee.com/noear/solon

最近看了不少别人写的各种框架的 Hello world 示例,有些看起来,真的很复杂。

今天,我们用号称简单到不能再简单的 Solon 框架也写一个 Hello world(确实是0配置,除了meven)

一、写代码

1. 用 IntelliJ IDEA 新建一个 Meven 空项目 helloworld

2. 在 pom.xml 文件里添加框架依赖

<dependencies>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
<version>1.5.12</version>
</dependency>
</dependencies>

3. 添加应用启动入口 /src/main/java/helloworld/App.java

package helloworld;

import org.noear.solon.Solon;

public class App {
public static void main(String[] args) {
Solon.start(App.class, args);
}
}

4. 添加控制器 /src/main/java/helloworld/controller/HelloController.java

package helloworld.controller;

import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.core.ModelAndView; import java.util.HashMap;
import java.util.Map; @Controller
public class HelloController {
/**
* 这是直接返回值
* */
@Mapping("/")
public String hello() {
return "Hello world!";
} /**
* 这是返回个对象(以json形式)
* */
@Mapping("/json")
public Map hello_json() {
Map<String,Object> map = new HashMap<>(); //实体也ok
map.put("message", "Hello world!"); return map;
} /**
* 这是用 FreeMarker 进行渲染(你想用别的引擎?可以随便换,比如:Enjoy)
* */
@Mapping("/ftl")
public ModelAndView hello_ftl() {
ModelAndView mv = new ModelAndView("hello.ftl");
mv.put("message", "Hello world!"); return mv;
}
}

5.再添加个模板文件 /src/main/resources/WEB-INF/view/hello.ftl

<html>
<body>
${message!}
</body>
</html>

6. 运行 App.main()

对着 App.java 文件,右键,选择:Run 'App.main()'

7. 用浏览器打开:http://localhost:8080/

8. 再用wrk测试一下qps

测试代码:wrk -t10 -c200 -d30s --latency "http://127.0.0.1:8080/" ;大概有 4.5万的qps,不错的

听说切换到嵌入式 jetty 有 8万左右;切换到嵌入式 undertow 有 10万左右。

solon-mvc 默认配的是 jlhttp,不过它小巧,只有0.1m

到此,写代码的事儿。搞定了!

二、发布服务包

1. 再修改下pom.xml文件,添加打包配置

<dependencies>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
<version>1.5.12</version>
</dependency>
</dependencies> <build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> <plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>${project.artifactId}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>helloworld.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

2. 使用meven打包命令,打包成:helloworld.jar

OK,传说中的一个微形小服务出来了。

3. 用命令运行 java -jar helloworld.jar (不用容器,不用容器,不用容器......)

再用浏览器打开:http://localhost:8080/

三、DEMO源码

源码:demo02.solon_helloworld

利用 Solon-web 框架写一个 Hello World的更多相关文章

  1. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  2. Struts2框架01【如果使用struts框架】【利用struts框架写一个 hello world】

    1 什么是Struts2框架 基于MVC设计模式的web应用框架 Struts2框架是一个轻量级的MVC流程框架 轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分 ...

  3. 利用python web框架django实现py-faster-rcnn demo实例

    操作系统.编程环境及其他: window7  cpu  python2.7  pycharm5.0  django1.8x 说明:本blog是上一篇blog(http://www.cnblogs.co ...

  4. 利用SpringBoot+Logback手写一个简单的链路追踪

    目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...

  5. 使用Boostrap框架写一个登录\注册界面

    Bootstrap是一个Web前端开发框架,使用它提供的css.js文件可以简单.方便地美化HTML控件.一般情况下,对控件的美化需要我们自己编写css代码,并通过标签选择器.类选择器.ID选择器为指 ...

  6. 利用VisualStudio单元测试框架举一个简单的单元测试例子

    本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子.如果需要深入理解Unit Test的原理与艺术,请参考<The art o ...

  7. 利用C# 窗体设计 写一个抽奖游戏

    老师布置了一个任务,要求我们做一个抽奖游戏,以下是我个人制作的一个作品与写项目的过程. 我们用到了8个pictureBox控件和一个button,设置好大小,并且编排成一个九宫个形状 添加窗体的背景图 ...

  8. web.xml中load-on-startup的作用,web应用写一个InitServlet,这个servlet配置为启动时装载

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  9. 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...

  10. (二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer ...

随机推荐

  1. Langchain-Chatchat项目:4.2-P-Tuning v2使用的数据集

      本文主要介绍P-tuning-v2论文中的5种任务,分别为Glue任务.NER任务.QA任务.SRL任务.SuperGlue任务,重点介绍了下每种任务使用的数据集. 一.Glue任务   GLUE ...

  2. 基于springboot+vue开发的教师工作量管理系

    教师工作量管理系 springboot31 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟.本文介绍了教师工作量管理系统的开发全过程.通过分析教师工作量管理系统 ...

  3. pbootcms 后台内容列表搜索功能扩展及增加显示字段功能

    应项目要求,一个内容模型下栏目不宜分的层级过多,如新闻模块,分2022.2023.2024年度,每年度下分12个月,这样就是2层栏目,再依类别(科技.动漫.电影...)划分层级,栏目数量较多,而且不易 ...

  4. tcpdump必知必会

    tcpdump原理 & 在tcp协议栈的位置 tcpdump用法 基于协议.主机.端口过滤 使用and or逻辑运算符做复杂的过滤操作 tcpdump flags 1. tcpdump原理 l ...

  5. R数据分析:集成学习方法之随机生存森林的原理和做法,实例解析

    很久很久以前给大家写过决策树,非常简单明了的算法.今天给大家写随机(生存)森林,随机森林是集成了很多个决策数的集成模型.像随机森林这样将很多个基本学习器集合起来形成一个更加强大的学习器的这么一种集成思 ...

  6. 【GKCTF 2020】ez三剑客

    [GKCTF 2020]ez三剑客 收获 gopher协议SSRF 多利用github搜索已存在的函数漏洞 CMS审计的一些方法 1. ezweb 打开题目给了一个输入框,能够向输入的url发送htt ...

  7. Tomact从认识到安装与详细使用

    一.什么是Tomact? Tomcat是一个开源免费的轻量级Web服务器,它是一个软件程序,主要功能是提供网上信息浏览服务,对HTTP协议的操作进行封装,使得程序员不必对协议进行操作,让Web开发更加 ...

  8. vue-test -------style绑定

    <template> <p :style="{color:activeColor,fontSize:fontsize+'px'}"></p> & ...

  9. LR(0)分析法

    LR(0)是一种自底向上的语法分析方法.两个基本动作是移进和规约. 具体例子如下 已知文法G[E] (1) E→aА (2) E→bB (3) A→cА (4) A→d (5) B→cB (6) B→ ...

  10. 16级C程序设计竞赛C题

    问题 C: 回文 时间限制: 1 Sec  内存限制: 128 MB提交: 74  解决: 36[提交][状态][讨论版] 题目描述 给定一个字符串,你可以对字符串做任意改动,你可以在任意地方增加一个 ...