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. 将ECharts图表插入到Word文档中

    @ 目录 在后端调用JS代码 准备ECharts库 生成Word文档 项目地址 库封装 本文示例 EChartsGen_DocTemplateTool_Sample 如何通过ECharts在后台生成图 ...

  2. STL set容器

    set 使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等. 举个例子,如下有 2 组键值对数据: {<'a', 1>, <'b', 2>, < ...

  3. Flask SocketIO 实现动态绘图

    Flask-SocketIO 是基于 Flask 的一个扩展,用于简化在 Flask 应用中集成 WebSocket 功能.WebSocket 是一种在客户端和服务器之间实现实时双向通信的协议,常用于 ...

  4. 给 Web 前端工程师看的用 Rust 开发 wasm 组件实战

    什么是wasm组件? wasm 全称 WebAssembly,是通过虚拟机的方式,可以在服务端.客户端如浏览器等环境执行的二进制程序.他有速度快.效率高.可移植的特点. 对我们 Web 前端工程最大的 ...

  5. vue的响应式原理:依赖追踪

    在明白原理之前,我们有很多表面现象.使用场景需要记忆.明白了原理后,你会发现它们已经不需要记了,因为从原理出发,你自己都能把它们推导出来,一切是那么的自然而然.感觉就是:这还用记吗?很明显嘛! 之前我 ...

  6. Java实现相似结构表算法

    [产品需求] 对所有元数据进行分析,匹配出表字段相似度达到阈值的向相似结构表关系数据. 网上没有搜到相关算法实现,只能自己动手了. [算法实现] 简单点实现的话,可以轮询所有表,每张表都和其它表进行匹 ...

  7. vertx 的http服务表单提交与mysql验证

    1.依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...

  8. [USACO2007NOVG] Telephone Wire G

    题目描述 Farmer John's cows are getting restless about their poor telephone service; they want FJ to rep ...

  9. C# 基础编程题集锦

    简单字符串加密 编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下: 'a→d' 'b'→'e' 'w'→z' ...... x'→'a' 'y'→b' 'z→c' 'A'→'D' ...

  10. 使用C++和QT实现Log自定义日志系统

    MyLog 说明 使用QT的qInstallMessageHandler函数结合qDebug,qInfo实现自定义的日志系统 输出日志到文件和控制台 自动检测日志文件大小 自动更新日志文件修改日期 自 ...