在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:oxygen开源软件地址:https://gitee.com/justlive1/oxygen开源软件介绍:oxygen轻量级Java框架 介绍一个轻量级Java框架
特性
快速开始创建 <!-- tomcat,jetty,undertow --><properties> <oxygen.server>-tomcat</oxygen.server></properties><!-- 使用内嵌容器启动 --><dependency> <groupId>vip.justlive</groupId> <artifactId>oxygen-web${oxygen.server}</artifactId> <version>${oxygen.version}</version></dependency> 或 compile 'vip.justlive:oxygen-web-tomcat:$oxygenVersion'
编写 public static void main(String[] args) { Router.router().path("/").handler(ctx -> ctx.response().write("hello world")); Server.listen(8080);} 用浏览器打开 http://localhost:8080 这样就可以看到 内容详解注册路由硬编码方式Router.router().path("/").handler(ctx -> ctx.response().write("hello world"));Router.router().path("/get").method(HttpMethod.GET).handler(get);Router.router().path("/post").method(HttpMethod.POST).handler(post); 注解方式@Router("/book")public class BookRouter { // 视图 @Mapping("/") public ViewResult index() { return Result.view("/book.html"); } // json @Mapping(value = "/ajax", method = {HttpMethod.POST}) public Book find(RoutingContext ctx) { // ... return new Book(); }} 获取请求参数表单参数或json请求参数项目将json请求参数与表单参数合并,使用相同的方法或注解获取 使用RoutingContext获取 Router.router().path("/").handler(ctx -> { String id = ctx.request().getParam("id"); ctx.response().write(id);}); 使用注解获取 @Mapping(value = "/ajax", method = {HttpMethod.POST})public Book find(@Param Long id, @Param("tp") String type) { // ... return new Book();} restful参数使用RoutingContext获取 Router.router().path("/{id}").handler(ctx -> { String id = ctx.request().getPathVariable("id"); ctx.response().write(id);}); 使用注解获取 @Mapping(value = "/{id}", method = {HttpMethod.POST})public void ajax(@PathParam("id") Long id) { // ...} header参数使用RoutingContext获取 Router.router().path("/").handler(ctx -> { String id = ctx.request().getHeader("id"); ctx.response().write(id);}); 使用注解获取 @Mapping(value = "/", method = {HttpMethod.POST})public void ajax(@HeaderParam("id") Long id) { // ...} cookie参数使用RoutingContext获取 Router.router().path("/").handler(ctx -> { String id = ctx.request().getCookie("id"); ctx.response().write(id);}); 使用注解获取 @Mapping(value = "/", method = {HttpMethod.POST})public void ajax(@CookieParam("id") Long id) { // ...} 参数转对象实体类 @Datapublic class Book { private String name; private String author;} 使用RoutingContext转换 Router.router().path("/").handler(ctx -> { // 表单或json请求参数绑定 Book book = ctx.bindParam(Book.class); // cookie参数绑定 book = ctx.bindCookie(Book.class); // header参数绑定 book = ctx.bindHeader(Book.class); // restful参数绑定 book = ctx.bindPathVariables(Book.class);}); 使用注解获取 @Mapping(value = "/", method = {HttpMethod.POST})public void ajax(@Param Book b1, @CookieParam Book b2, @HeaderParam Book b3, @PathParam Book b4) { // ...} 静态资源内置默认将 自定义静态资源可使用下面代码 Router.staticRoute().prefix("/lib").location("classpath:lib"); 也可以通过配置文件指定 web.static.prefix=/publicweb.static.path=/public,/static,classpath:/META-INF/resources/webjars 上传文件使用RoutingContext获取 Router.router().path("/").handler(ctx -> { MultipartItem file = ctx.request().getMultipartItem("file"); // ...}); 使用注解获取 @Mapping("/")public void upload(MultipartItem image, @MultipartParam("file1") MultipartItem file) { // 不使用注解则使用方法参数名作为请求参数名称 // 使用注解指定请求参数名称} 结果渲染渲染json// 使用RoutingContext返回Router.router().path("/").handler(ctx -> { ctx.response().json(new Book("Java", "xxx"));});// 注解式@Mapping("/")public Book find() { // 直接返回对象,框架默认处理成json return new Book("Java", "xxx");} 渲染文本// 使用RoutingContext返回Router.router().path("/").handler(ctx -> { ctx.response().text("hello world");}); 渲染html// 使用RoutingContext返回Router.router().path("/").handler(ctx -> { ctx.response().html("<html><body><span>hello world</span></body></html>");}); 渲染模板内置支持了 # 可通过下面配置进行更改模板目录web.view.jsp.prefix=WEB-INFweb.view.thymeleaf.prefix=/templates 模板使用 // 使用RoutingContextRouter.router().path("/").handler(ctx -> { ctx.response().template("index.html");});Router.router().path("/").handler(ctx -> { Map<String, Object> attrs = new HashMap<>(); // ... ctx.response().template("index.html", attrs);});// 注解式@Mapping("/")public Result index() { return Result.view("index.html");}@Mapping("/")public Result index() { Map<String, Object> attrs = new HashMap<>(); // ... return Result.view("index.html").addAttributes(attrs);} 重定向Router.router().path("/").handler(ctx -> { ctx.response().redirect("https://github.com/justlive1");});@Mapping("/a")public Result index() { // 内部地址 相对于根目录: /b // return Result.redirect("/b"); // 内部地址 相对于当前路径: /a/b // return Result.redirect("b"); // 协议地址 return Result.redirect("https://github.com/justlive1");} 写入cookie@Mapping("/")public void index(RoutingContext ctx) { ctx.response().setCookie("hello", "world"); ctx.response().setCookie("java", "script", 100); ctx.response().setCookie("uid", "xxx", ".justlive.vip", "/", 3600, true);} 添加header@Mapping("/")public void index(RoutingContext ctx) { ctx.response().setHeader("hello", "world");} 写入session@Mapping("/")public void index(RoutingContext ctx) { ctx.request().getSession().put("key", "value");} 拦截器
@Slf4j@Beanpublic class LogWebHook implements WebHook { @Override public boolean before(RoutingContext ctx) { log.info("before"); return true; } @Override public void after(RoutingContext ctx) { log.info("after"); } @Override public void finished(RoutingContext ctx) { log.info("finished"); }} 异常处理框架默认提供了一个异常处理器,如需自定义处理异常,可以像下面这样使用 @Beanpublic class CustomExceptionHandler extends ExceptionHandlerImpl { @Override public void handle(RoutingContext ctx, Exception e, int status) { if (e instanceof CustomException) { // do something } else { super.handle(ctx, e, status); } }} 部署项目修改端口编码指定 Server.listen(8080); 配置文件 oxygen.server.port=8081 启动命令 java -jar -Doxygen.server.port=8090 app.jar 运行项目使用内嵌容器启动 启动类 public class Application { public static void main(String[] args) { Server.listen(); }} 通用打包方式
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>${mainClass}</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins></build> 打成
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.8.RELEASE</version> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins></build> 使用外部容器(jetty、tomcat等) 无需web.xml配置,打包成 <!-- 解决默认打war包报错 webxml attribute is required --><properties> <failOnMissingWebXml>false</failOnMissingWebXml></properties> 外部化配置框架可以通过使用配置文件进行修改默认属性 ##### 基础配置# 配置覆盖地址,用户外部配置覆盖项目配置 例 file:/config/*.properties,classpath*:/config/*.properties,xx.propertiesoxygen.config.override.path=# 类扫描路径属性oxygen.class.scan=vip.justlive# 临时文件根目录oxygen.temp.dir=.oxygen# 缓存实现类,自定义缓存时使用oxygen.cache.class=##### web # embedded 启动端口oxygen.server.port=8080# context pathoxygen.server.contextPath=# session失效时间,单位秒oxygen.web.session.expired=3600# 默认静态资源请求前缀oxygen.web.static.prefix=/public# 默认静态资源目录oxygen.web.static.path=/public,/static,classpath:/META-INF/resources/webjars# 静态资源缓存时间oxygen.web.static.cache=3600# jsp路径前缀oxygen.web.view.jsp.prefix=WEB-INF# thymeleaf 路径前缀oxygen.web.view.thymeleaf.prefix=/templates# thymeleaf 视图后缀oxygen.web.view.thymeleaf.suffix=.html# freemarker 路径前缀oxygen.web.view.freemarker.prefix=/templates# 内置简单视图处理 路径前缀oxygen.web.view.simple.prefix=/templates# 内置简单视图处理 视图后缀oxygen.web.view.simple.suffix=.htm# 是否开启模板缓存oxygen.web.view.cache.enabled=true##### 定时任务job# job线程名称格式oxygen.job.threadNameFormat=jobs-%d# job核心线程池大小oxygen.job.corePoolSize=10##### i18n国际化# i18n配置文件地址oxygen.i18n.path=classpath:message/*.properties
全部评论
专题导读
上一篇:topology.js: 开源web绘图引擎,支持拓扑图、流程图、脑图、电力能源、水利、物联网、 ...发布时间:2022-03-23下一篇:thinkphp5-restfulapi: thinkphp5 restfulAPI 基于tp5的restful风格接口,带简单的oa ...发布时间:2022-03-23热门推荐
热门话题
阅读排行榜
|
请发表评论