当前位置: 首页 > news >正文

python做网站性能注册安全工程师官网

python做网站性能,注册安全工程师官网,有专业做网站的,产品宣传小视频制作希望今年您对Java的热情很高#xff01; 今天#xff0c;我们将研究一个清新#xff0c;简单#xff0c;美观且实用的框架#xff0c;以Java编写REST应用程序。 它将非常简单#xff0c;甚至根本不会看起来像Java。 我们将研究Spark Web框架。 不#xff0c;它与Apache… 希望今年您对Java的热情很高 今天我们将研究一个清新简单美观且实用的框架以Java编写REST应用程序。 它将非常简单甚至根本不会看起来像Java。 我们将研究Spark Web框架。 不它与Apache Spark不相关。 是的很遗憾他们使用相同的名字。 我认为理解该框架的最佳方法是构建一个简单的应用程序因此我们将构建一个简单的服务来执行数学运算。 我们可以这样使用它 请注意该服务正在本地主机上的端口4567上运行并且请求的资源为“ / 10 / add / 8”。 使用Gradle设置项目 apply plugin: java apply plugin: ideasourceCompatibility 1.8repositories {mavenCentral()maven { url https://oss.sonatype.org/content/repositories/snapshots/ }maven { url https://oss.sonatype.org/content/repositories/releases/ } }dependencies {compile com.javaslang:javaslang:2.0.0-RC1compile com.sparkjava:spark-core:2.3compile com.google.guava:guava:19.0-rc2compile org.projectlombok:lombok:1.16.6testCompile group: junit, name: junit, version: 4. }task launch(type:JavaExec) {main me.tomassetti.javaadvent.SparkServiceclasspath sourceSets.main.runtimeClasspath } 现在我们可以运行 。 / gradlew想法来生成IntelliJ IDEA项目 。 / gradlew测试以运行测试 。 / gradlew组装以构建项目 。 / gradlew启动以启动我们的服务 现在让我们认识Spark 您认为我们可以编写一个功能齐全的Web服务用不到25行Java代码执行基本的数学运算吗 没门 好吧再想一想 // imports omittedclass Calculator implements Route {private MapString, Function2Long, Long, Long functions ImmutableMap.of(add, (a, b) - a b,mul, (a, b) - a * b,div, (a, b) - a / b,sub, (a, b) - a - b);Overridepublic Object handle(Request request, Response response) throws Exception {long left Long.parseLong(request.params(:left));String operatorName request.params(:operator);long right Long.parseLong(request.params(:right));return functions.get(operatorName).apply(left, right);} }public class SparkService {public static void main(String[] args) {get(/:left/:operator/:right, new Calculator());} } 在我们的主要方法中我们只是说当我们获得包含三个部分用斜杠分隔的请求时我们应该使用计算器路线这是我们唯一的路线。 Spark中的路由是接收请求处理请求并产生响应的单元。 我们的计算器就是神奇的地方。 它在请求中查找参数“ left”“ operatorName”和“ right”。 左和右被解析为长值而operatorName用于查找操作。 对于每个操作我们都有一个函数Function2 LongLong然后将其应用于我们的值左和右。 酷吧 Function2是来自Javaslang项目的接口。 您现在可以启动该服务 ./gradlew启动还记得吗并进行播放。 我上次检查Java时比较冗长冗长缓慢……好吧它现在正在恢复。 好的但是测试呢 因此Java实际上可以非常简洁作为软件工程师我会庆祝一两分钟但是不久之后我开始感到不安……这些东西没有经过测试 更糟糕的是它根本无法测试。 逻辑在我们的计算器类中但是它接受一个Request并生成一个Response。 我不想实例化一个请求只是为了检查我的计算器是否按预期工作。 让我们重构一下 class TestableCalculator implements Route {private MapString, Function2Long, Long, Long functions ImmutableMap.of(add, (a, b) - a b,mul, (a, b) - a * b,div, (a, b) - a / b,sub, (a, b) - a - b);public long calculate(String operatorName, long left, long right) {return functions.get(operatorName).apply(left, right);}Overridepublic Object handle(Request request, Response response) throws Exception {long left Long.parseLong(request.params(:left));String operatorName request.params(:operator);long right Long.parseLong(request.params(:right));return calculate(operatorName, left, right);} } 我们只是将管道从请求中取出值与逻辑分开并将其放在自己的方法中 calculate 。 现在我们可以测试计算了。 public class TestableLogicCalculatorTest {Testpublic void testLogic() {assertEquals(10, new TestableCalculator().calculate(add, 3, 7));assertEquals(-6, new TestableCalculator().calculate(sub, 7, 13));assertEquals(3, new TestableCalculator().calculate(mul, 3, 1));assertEquals(0, new TestableCalculator().calculate(div, 0, 7));}Test(expected ArithmeticException.class)public void testInvalidInputs() {assertEquals(0, new TestableCalculator().calculate(div, 0, 0));}} 我现在感觉好多了我们的测试证明了这些东西是行得通的。 当然如果我们尝试除以零它将引发异常但是事实就是这样。 但是这对用户意味着什么 这意味着500。如果用户尝试使用一个不存在的操作会发生什么 如果值不是正确的数字怎么办 好的这似乎不是很专业。 让我们修复它。 错误处理功能风格 要解决这两种情况我们只需要使用Spark的一项功能即可我们可以将特定的异常与特定的路线进行匹配。 我们的路由将产生有意义的HTTP状态代码和正确的消息。 public class SparkService {public static void main(String[] args) {exception(NumberFormatException.class, (e, req, res) - res.status(404));exception(ArithmeticException.class, (e, req, res) - {res.status(400);res.body(This does not seem like a good idea);});get(/:left/:operator/:right, new ReallyTestableCalculator());} } 我们仍然要处理不存在的操作的情况这是我们将在ReallyTestableCalculator中进行的操作 。 为此我们将使用典型的函数模式我们将返回Either 。 Either是可以具有left或right值的集合。 左侧通常表示有关错误的某种信息例如错误代码或错误消息。 如果没有任何问题Either将包含一个正确的值可能是各种各样的东西。 在本例中如果无法执行操作则将返回错误我们定义的类否则将以Long形式返回操作的结果。 因此我们将返回Either ErrorLong。 package me.tomassetti.javaadvent.calculators;import javaslang.Function2; import javaslang.Tuple2; import javaslang.collection.Map; import javaslang.collection.HashMap; import javaslang.control.Either; import spark.Request; import spark.Response; import spark.Route;public class ReallyTestableCalculator implements Route {private static final int NOT_FOUND 404;private MapString, Function2Long, Long, Long functions HashMap.ofAll(new Tuple2(add, (a, b) - a b),new Tuple2(mul, (a, b) - a * b),new Tuple2(div, (a, b) - a / b),new Tuple2(sub, (a, b) - a - b));public EitherError, Long calculate(String operatorName, long left, long right) {EitherError, Long unknownOp Either.Error, Longleft(new Error(NOT_FOUND, Unknown math operation));return functions.get(operatorName).map(f - Either.Error, Longright(f.apply(left, right))).orElse(unknownOp);}Overridepublic Object handle(Request request, Response response) throws Exception {long left Long.parseLong(request.params(:left));String operatorName request.params(:operator);long right Long.parseLong(request.params(:right));EitherError, Long res calculate(operatorName, left, right);if (res.isRight()) {return res.get();} else {response.status(res.left().get().getHttpCode());return null;}} } 让我们测试一下 package me.tomassetti.javaadvent;import javaslang.control.Either; import me.tomassetti.javaadvent.calculators.ReallyTestableCalculator; import org.junit.Test;import static org.junit.Assert.assertEquals;public class ReallyTestableLogicCalculatorTest {Testpublic void testLogic() {assertEquals(Either.right(10L), new ReallyTestableCalculator().calculate(add, 3, 7));assertEquals(Either.right(-6L), new ReallyTestableCalculator().calculate(sub, 7, 13));assertEquals(Either.right(3L), new ReallyTestableCalculator().calculate(mul, 3, 1));assertEquals(Either.right(0L), new ReallyTestableCalculator().calculate(div, 0, 7));}Test(expected ArithmeticException.class)public void testInvalidOperation() {Eitherme.tomassetti.javaadvent.calculators.Error, Long res new ReallyTestableCalculator().calculate(div, 0, 0);assertEquals(true, res.isLeft());assertEquals(400, res.left().get().getHttpCode());}Testpublic void testUnknownOperation() {Eitherme.tomassetti.javaadvent.calculators.Error, Long res new ReallyTestableCalculator().calculate(foo, 0, 0);assertEquals(true, res.isLeft());assertEquals(404, res.left().get().getHttpCode());}}结果 我们提供了可以轻松测试的服务。 它执行数学运算。 它支持四个基本操作但可以轻松扩展以支持更多操作。 处理错误并使用适当的HTTP代码400错误输入和404未知操作或值。 结论 当我第一次看到Java 8时我对新功能感到高兴但并不十分兴奋。 但是几个月后我看到了基于这些新功能的新框架它们有可能真正改变我们用Java编程的方式。 像Spark和Javaslang这样的东西正在发挥作用。 我认为现在Java可以保持简单而可靠同时变得更加敏捷和高效。 您可以在Spark教程网站或我的博客tomassetti.me上找到更多教程。 翻译自: https://www.javacodegeeks.com/2015/12/introduction-spark-next-rest-framework-java.html
http://www.sadfv.cn/news/349843/

相关文章:

  • 做网站咋赚钱招投标网站开发公司
  • 怎样做国际网站平台网站维护服务器
  • 企业模板网站建设优势分析wordpress如何拖移小工具
  • 南阳手机网站制作手机自己做网站
  • 保护稀有动物网站建设策划书国外网站排行
  • 合肥网站制作网站如何做企业网站后台管理
  • 网站优化快照云岭建设集团的网站
  • 百度免费网站制作免费做自荐书的网站
  • 软件项目管理考试题及答案seo检查工具
  • 怎么在网站上做音乐php钓鱼网站怎么做视频教程
  • 网站描述设置十大免费ppt网站下载app
  • 湖北响应式网站建设费用丹阳网站制作
  • wordpress自定义评论头像公众号seo排名
  • 免费域名注册免备案网站关键词的优化在哪做
  • 哪些因素营销网站权重凡科建站代理平台
  • 如何把网站做跳转浏览器链接地址正规网页设计培训怎么样
  • 公司建设网站需要什么更新公司网站内容需要
  • 移动公司营销网站设计公司做网站比较好的
  • 在线设计logo商标免费无水印湖南专业竞价优化服务
  • 泸州网站建设无锡阿凡达
  • 网站建设网络欧美教育网站模板
  • 推广型网站建设电话佛山网站建设外包公司
  • pc网站建设意见班级优化大师使用心得
  • 网站优化招聘学习前端开发的网站
  • 专业的建网站的公司wordpress 404模板在哪里
  • 学校网站建设计划书wordpress自动识别网页
  • 汽配公司的网站要怎么做电商拿货平台
  • 一级a做爰片 A视频网站百度网站建设策划书范文
  • 汝州网站建设中国服务器龙头企业
  • 怎样做企业手机网站首页芜湖网站设计