Storm-ServerJava Web 框架
Storm-Server,以 Jetty 为 Servlet 容器的一个 Java Web 框架,主要用于为前端提供 API 服务,具有快速开发的优势。Storm-Server 之后会提供一些操作 MySQL,Redis 的工具,Storm-Server 旨在快速开发一些小型的 Web 应用,以及用于日常学习。欢迎各位 star 和参与开发,Storm-Server 期待你的参与与建议。
小试牛刀
引入storm-server依赖(最新版本1.0,后期会跟进升级和维护)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.github.stormmaybin</groupId> <artifactId>storm-server-test</artifactId> <version>1.0-SNAPSHOT</version> <properties> <storm-server.version>1.0</storm-server.version> </properties> <dependencies> <dependency> <groupId>me.stormma</groupId> <artifactId>storm-server</artifactId> <version>${storm-server.version}</version> </dependency> </dependencies> </project>
添加 storm.properties 配置文件
storm.server.port=8057 # 端口默认为8057 storm.server.module=storm_server_test #模块名 storm.ansi.output.enabled=true # 不同级别日志显示颜色不同
storm-server 默认去 classpath下 读取 storm.properties 配置文件,当然,你也可以指定配置文件的路径和名字,如果你选择这么做了,那么你要在运行启动类时候传入配置文件的完整路径。
例如:假如我的配置文件名字叫 application.properties,放在 resources/config/,,那么你需要在运行启动类(下面会说到)的时候传入参数 'resources/config/application.properties'。
添加 logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="logback/base.xml" /> </configuration>
storm-server 使用 logback 日志系统,storm-server 已经提供了 base.xml,你只需要新建 logback.xml,添加 base.xml 即可,当然你也可以加入自己的配置。
启动 storm-server
package com.github.stormmaybin.controller; import me.stormma.StormApplication; import me.stormma.annotation.Application; import me.stormma.annotation.ComponentScan; /** * @description 启动类 * @author stormma * @date 2017/09/15 */ @ComponentScan @Application(StormServerTestApplication.class) public class StormServerTestApplication { public static void main(String[] args) { StormApplication.run(args); } }
新建service
package com.github.stormmaybin.controller.service.impl; import com.github.stormmaybin.controller.model.User; import com.github.stormmaybin.controller.service.ITestService; import me.stormma.ioc.annotation.Service; /** * @description * @author stormma * @date 2017/09/15 */ @Service public class TestService implements ITestService { @Override public User getUserById(int uid) { //模拟dao层操作 User user = new User(); user.setUsername("stormma"); user.setPassword("stormma"); return user; } }
@Service注解声明此类是一个service, 这与spring mvc/boot保持一致
新建 controller
package com.github.stormmaybin.controller.controller; import com.github.stormmaybin.controller.model.User; import com.github.stormmaybin.controller.service.ITestService; import me.stormma.core.http.annotation.Api; import me.stormma.core.http.annotation.JsonParam; import me.stormma.core.http.annotation.RequestParam; import me.stormma.core.http.enums.RequestMethod; import me.stormma.core.http.model.HttpContext; import me.stormma.core.http.response.Response; import me.stormma.core.http.response.builder.ResponseBuilder; import me.stormma.ioc.annotation.AutoWired; import me.stormma.ioc.annotation.Controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; /** * @author stormma * @date 2017/09/15 */ @Controller("/api") public class TestController { @AutoWired private ITestService testService; private static final Logger logger = LoggerFactory.getLogger(TestController.class); /** * 测试无参数情况的数据响应 * @return */ @Api(url = "/hello", method = RequestMethod.GET) public Response<String> hello() { return ResponseBuilder.success("hello storm-server"); } /** * 测试绑定HttpContext * @param context * @return */ @Api(url = "/date", method = RequestMethod.GET) public Response<Date> getCurrentDate(HttpContext context) { logger.info("访问路径:{}", context.requestPath); return ResponseBuilder.success(new Date()); } @Api(url = "/array/int", method = RequestMethod.GET) public Response<String> testIntArray(@RequestParam(name = "id") int[] ids) { for (int id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "/array/Integer", method = RequestMethod.GET) public Response<String> testIntegerArray(@RequestParam(name = "id") Integer[] ids) { for (Integer id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/float", method = RequestMethod.GET) public Response<String> testFloatArray(@RequestParam(name = "id") float[] ids) { for (float id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/Float", method = RequestMethod.GET) public Response<String> testFloatArray(@RequestParam(name = "id") Float[] ids) { for (Float id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/Double", method = RequestMethod.GET) public Response<String> testDoubleArray(@RequestParam(name = "id") Double[] ids) { for (Double id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/double", method = RequestMethod.GET) public Response<String> testDoubleArray(@RequestParam(name = "id") double[] ids) { for (double id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/boolean", method = RequestMethod.GET) public Response<String> testBooleanArray(@RequestParam(name = "id") boolean[] ids) { for (boolean id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } @Api(url = "array/Boolean", method = RequestMethod.GET) public Response<String> testBooleanArray(@RequestParam(name = "id") Boolean[] ids) { for (Boolean id: ids) { logger.info("{}", id); } return ResponseBuilder.success(); } /** * 测试query string参数类型,和json参数类型结合的绑定 * @param id * @param user * @return */ @Api(url = "/get/user", method = RequestMethod.POST) public Response<User> test(@RequestParam(name = "id") int id, @JsonParam User user) { System.out.println(user); User result = testService.getUserById(id); logger.info("json 参数: {}", user); logger.info("{}", result); return ResponseBuilder.success(result); } }
评论