面向 Java 开发人员的 Scala 指南: Scala 和 servlet

使用Scala编写Servlet后端 本文介绍了如何使用Scala编写Servlet后端。我们创建了一个Scala Servlet项目,并演示了处理请求、发送响应以及连接数据库的示例代码。使用Scala编写Servlet后端可以充分利用Scala语言的特性,如函数式编程和强大的类型推断,从而提高开发效率和代码质量。希望本文能够帮助你入门Scala Servlet开发,快速构建高效可靠的后端应用程序。 阅读详情

 

Scala 显然是一门有趣的语言,很适合体现语言理论和创新方面的新思想,但最终它要用在 “现实” 环境中,它必须能满足开发人员的某些需求并在 “现实” 环境中有一定的实用性。

了解 Scala 语言的一些核心功能之后,就能认识到 Scala 语言的一些灵活性,并能放心使用 Scala 创建 DSL。现在我们进入实际应用程序使用的环境,看看 Scala 如何适应环境。在本系列的新阶段中,我们将首先讨论大部分 Java™ 应用程序的核心:Servlet API。

servlet 回顾

回忆一下 Servlet 101 课程和教程,servlet 环境的核心实际上就是通过一个套接字(通常是端口 80)使用 HTTP 协议的客户机-服务器交换。客户机可以是任何 “用户-代理”(由 HTTP 规范定义),服务器是一个 servlet 容器。servlet 容器在我编写的一个类上查找、加载和执行方法,该类最终必须实现 javax.servlet.Servlet 接口。

关于本系列

Ted Neward 将和您一起深入探讨 Scala 编程语言。在这个新的 developerWorks 系列 中,您将了解有关 Scala 的所有最新讨论,并在实践中看到 Scala 的语言功能。在进行相关比较时,Scala 代码和 Java 代码将放在一起展示,但是(您将发现)Scala 与 Java 中的许多东西都没有直接的关联,这正是 Scala 的魅力所在!如果用 Java 代码就能够实现的话,又何必再学习 Scala 呢?

通常,实际的 Java 开发人员不会编写直接实现接口的类。因为最初的 servlet 规范是用于为 HTTP 之外的其他协议提供一个通用 API,所以 servlet 命名空间被分为了两部分:

  • 一个 “通用” 包(javax.servlet)
  • 一个特定于 HTTP 的包(javax.servlet.http)

这样,将在一个称为 javax.servlet.GenericServlet 的抽象基类的通用包中实现一些基本的功能;然后在派生类 javax.servlet.http.HttpServlet 中实现其他特定于 HTTP 的功能,该类通常用作 servlet 实际 “内容” 的基类。HttpServlet 提供了一个 Servlet 的完整实现,将 GET 请求委托给一个将要被覆盖的 doGet 方法,将 POST 请求委托给一个将要被覆盖的 doPut 方法,依此类推。

Hello, Scala 与 Hello, Servlet

显然,任何人编写的第一个 servlet 都是普遍的 “Hello, World” servlet;Scala 的第一个 servlet 示例也是如此。回忆一下许多年之前介绍的 servlet 教程,当时基本的 Java “Hello, World” servlet 只是输出清单 1 所示的 HTML 响应:


清单 1. 预期的 HTML 响应

				
<HTML>
   <HEAD><TITLE>Hello, Scala!</TITLE></HEAD>
   <BODY>Hello, Scala! This is a servlet.</BODY>
</HTML>

用 Scala 编写一个简单的 servlet 来实现这个操作非常简单,而且这个 servlet 与其相应的 Java 形式几乎一样,如清单 2 所示:


清单 2. Hello, Scala servlet!

  

 

 

注意,我使用了一些适当的导入别名来缩短请求的类型名称和相应类型;除此之外,这个 servlet 几乎与其 Java servlet 形式一样。编译时请记得在 servlet-api.jar(通常随 servlet 容器一起发布;在 Tomcat 6.0 发行版中,它隐藏在 lib 子目录中)中包含一个引用,否则将找不到 servlet API 类型。

这还准备得不够充分;根据 servlet 规范,它必须使用一个 web.xml 部署描述符部署到 Web 应用程序目录中(或一个 .war 文件中),该描述符描述 servlet 应该与哪个 URL 结合。对于这样一个简单的例子,使用一个相当简单的 URL 来配合它最容易,如清单 3 所示:


清单 3. 部署描述符 web.xml

 

 

从这里开始,我假设读者会在必要时调整/修改部署描述符,因为这跟 Scala 没有关系。

当然,格式良好的 HTML 与格式良好的 XML 非常相似;鉴于这一点,Scala 对 XML 字面值的支持使编写这个 servlet 简单得多(参阅 参考资料 中的 “Scala 和 XML” 一文)。Scala 不是在传递给 HttpServletResponse 的 String 中直接嵌入消息,它可以分离逻辑和表示形式(非常简单),方法是利用此支持将消息放在 XML 实例中,然后再传递回去:


清单 4. Hello, Scala servlet!

  

 

Scala 的内联表达式求值工具使用 XML 字面值,这意味着能够轻松地使 servlet 更有趣。例如,将当前日期添加到消息中与将 Calendar 表达式添加到 XML 中一样简单,不过增加了几行 { Text(java.util.Calendar.getInstance().getTime().toString() ) }。这似乎显得有点冗长,如清单 5 所示:


清单 5. Hello, timed Scala servlet!

  

 

 

实际上,Scala 编译器与 XML 对象消息一起整合到一个 scala.xml.Node 中,然后在将它传递给响应的 Writer 的 print 方法时将其转换为一个 String。

不要小看这一点 — 表达形式从逻辑中分离出来完全在一个类内部进行。这条 XML 消息将进行编译时检查,以确保语法正确和格式良好,并获得一些标准 servlet(或 JSP)不具备的好处。由于 Scala 可以进行类型推断,因此可以省略有关 message 和 currentDate 的实际类型消息,使得这就像动态语言 Groovy/Grails 一样。初次使用效果不错。

当然,只读 servlet 相当麻烦。

Hello, Scala。这些是参数。

大多数 servlet 不会只返回类似静态内容或者当前日期和时间的简单消息,它们带有 POST 形式的内容,检查内容并进行相应的响应。例如,可能 Web 应用程序需要知道使用者的身份,并询问其姓名:


清单 6. 挑战!

				
<HTML>
  <HEAD><TITLE>Who are you?</TITLE></HEAD>
  <BODY>
Who are you? Please answer:
<FORM action="/scalaExamples/sayMyName" method="POST">
Your first name: <INPUT type="text" name="firstName" />
Your last name: <INPUT type="text" name="lastName" />
<INPUT type="submit" />
</FORM>
  </BODY>
</HTML>

这个方法不会在任何用户界面设计大赛中夺冠,但是它达到了目的:这是一个 HTML 表单,它会将数据发送给一个新的 Scala servlet(绑定到 sayMyName 的相对 URL)。这些数据将根据 servlet 规范存储在一个名称-值对集合中,可通过 HttpServletRequest.getParameter() API 调用获得。在此调用中,我们将 FORM 元素的名称作为一个参数传递给 API 调用。

从 Java 代码直接转换相对容易一些,如清单 7 中的 servlet 所示:


清单 7. 响应(v1)

  

 

但这缺少了我之前提到的消息分离的一些好处,因为现在消息定义必须显式使用参数 firstName 和 lastName;如果响应 get 中使用的元素个数超过 3 个或 4 个,情况就会变得比较复杂。此外,doPost 方法在将参数传递给消息进行显示之前,必须自行提取每一个参数 — 这样的编码很繁琐,并且容易出错。

一种解决方法是将参数提取和 doPost 方法本身的调用添加到一个基类,如清单 8 中的版本 2 所示:


清单 8. 响应(v2)

 

 

 

这个版本使 servlet 显示变得比较简单(相对上一版本而言),而且增加了一个优点,即 param 和 header 映射保持不变(注意,我们可以将 param 定义为一个引用请求对象的方法,但这个请求对象必须已经定义为一个字段,这将引发大规模的并发性问题,因为 servlet 容器认为每一个 do 方法都是可重入的)。

当然,错误处理是处理 Web 应用程序 FORM 的重要部分,而 Scala 作为一种函数性语言,保存的内容都是表达式,这意味着我们可以将消息编写为结果页面(假设我们喜欢这个输入),或编写为错误页面(如果我们不喜欢这个输入)。因此,检查 firstName 和 lastName 的非空状态的验证函数可能如清单 9 所示:


清单 9. 响应(v3)

  

 

 

 

注意,模式匹配可以使编写比较简单的验证规则变得很容易。利用模式匹配绑定到原始值(比如上一个例子),或者绑定到一个本地变量(比如我们要排除任何姓名中有 “e” 的人,比如上一个注释)。

显然,还有事情需要做!困扰 Web 应用程序的典型问题之一是 SQL 注入攻击,它由通过 FORM 传入的未转义 SQL 命令字符引入,并且在数据库中执行之前连接到包含 SQL 结构的原始字符串。使用 scala.regex 包中的正则表达式支持,或者一些解析器组合子(在本系列最后三篇文章中讨论)可以确认 FORM 验证是否正确。事实上,整个验证过程会提交给使用默认验证实现的基类,该验证实现默认情况下只返回 true(因为 Scala 是函数性语言,所以不要忽略好的对象设计方法)。

结束语

虽然 Scala servlet 框架的功能不像其他一些 Java Web 框架的那样完整,但是我这里创建的这个小 Scala servlet 有两个基本用途:

  • 展示以有趣的方式利用 Scala 的功能,使 JVM 编程更简单。
  • 简单介绍将 Scala 用于 Web 应用程序,这自然会引入 “lift” 框架(参见 参考资料 小节)。

 

 

 

EtherCAT主站SOEM -- 15 -- CIA402伺服驱动器子协议 以上就是EtherCAT主站SOEM – 15 – CIA402伺服驱动器子协议的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。 阅读详情

相关推荐

5G时代必知:LDPC与Polar码实战解析(附MATLAB仿真代码)

本文深入解析5G时代核心信道编码技术LDPC码与Polar码的原理差异及性能表现,通过MATLAB仿真代码展示其在实际通信系统中的应用。LDPC码适用于大数据块高速传输,而Polar码在小数据块低时延场景表现优异,帮助开发者优化5G系统设计。

sugar的博客 642

Scala和Servlet

Scala显然是一种有趣的语言,非常适合展示语言理论和创新方面的精妙新思想,但是到最后,由于它具有任何“实际”用途,因此它必须能够在中间遇到实践中的开发人员。并在“现实世界”中具有一定的适用性。 既然我们已经研究了该语言的一些核心功能,可以认识到Scala的某些语言灵活性,并亲眼目睹了Scala在创建DSL方面的实际行动,那么该是时候开始接触实际应用程序使用的环境并展示Scala的方式了适...

cusi77914的博客 344

AI for Science:GNN预测分子性质全流程详解与工业实践

从分子表示到工业落地,一文掌握图神经网络在药物研发与材料设计中的核心实战近年来,的浪潮正深刻变革着传统科研范式。在药物研发与材料设计领域,作为核心环节,已从传统的实验试错转向基于图神经网络(GNN)的智能计算。本文将深入解析GNN预测分子性质的,涵盖数据准备、模型设计、训练优化到工业部署,并揭秘前沿技术与实战案例。

datacanvas2426的博客 1674

scala集成到java_在Java项目中整合Scala

Scala是一个运行在Java JVM上的面向对象的语言。它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程。具有这些优势,使得我最近很想在一个新的项目中使用Scala,但是在新项目中,抛弃我们常用的Java和C#,而直接使用一门新的语言是很困难的。这不仅包括学习新语言这个过程,未来,更为项目的长期发展和日后的开发和支持增加了很多变数。毕...

weixin_29662775的博客 602

用Pixhawk 2.4.8和PX4 1.13,从零搭建你的第一支无人机编队(附避坑清单)

本文详细介绍了如何使用Pixhawk 2.4.8飞控和PX4 1.13固件从零搭建低成本无人机编队系统。涵盖硬件选型、固件配置、多机通信和编队飞行逻辑开发的全流程,特别针对学生和爱好者提供实战验证的避坑方案,帮助实现多机协同飞行。

weixin_27219587的博客 403

Gromacs基础教程一:入门建议

本系列教程针对的群体:非计算化学专业,而是偏生物方向的、有少量分子动力学模拟需求的人群。

m0_67843839的博客 8574

scala eclipse_我的第一个Scala Servlet(使用Eclipse)

在本文中,我将向您展示如何调整Eclipse,以便能够在Scala中编写“经典” webapp。 我了解Lift,我只想逐步了解Scala如何整合到我现有的基础架构中。 设置您的Eclipse项目 Eclipse有一个插件(可在Scala IDE站点上找到 ),可让您帮助使用Scala进行开发。 该插件绝不是完美的(自动完成功能在Ganymede中不起作用),但是它可以完...

dlz00001的博客 297

【系统分析师】2026年上半年真题:论文及解题思路

四篇论文围绕系统与开发实践展开: 安全架构设计强调数据加密(国密算法)、零信任访问控制及容灾架构,以某医疗云平台为例,实现RTO<5分钟的高可用保障。 架构风格应用解析微服务/事件驱动等风格选型,结合电商平台案例,通过服务拆分与异步通信提升扩展性。 需求评审机制提出正式评审与走查结合的方法,在金融系统中减少30%返工,解决业务规则二义性问题。 LLM测试生成利用大模型从需求/代码生成用例,辅以人工校验,使测试效率提升50%,覆盖边缘场景。 各篇均遵循“背景-理论-实践”结构,突出

数据知道的博客 783

java开发 使用scala_在Javaweb中使用Scala

Java 是一门比较优秀的编程语言, 其最大功劳是建立非常繁荣的JVM平台生态。不过 Java 语法比较麻烦,写过 C, Python 的人总是想使用简洁的语法,又希望利用上 Java 平台的强大,因此,催生了 Groovy , Scala 这样的 JVM 语言。那么为什么选择 Scala 呢? 因为 Scala 是一门富有想象力的语言!本文尝试在 Javaweb 中使用 Scala , 使用 S...

weixin_39634884的博客 278

Vue - 详细实现低代码平台,支持拖曳式可视化生成应用软件功能,用户通过拖拽元素、搭积木的方式创建应用(适合迭代的基础架构、低代码平台)

Vue低代码平台-拖曳式拖拉拽可视化生成应用软件,拖拽式低代码数据可视化开发平台,vue实现拖拽,拖拽式Vue组件代码生成平台,基于vue的可视化拖拽代码生成工具,Vue实现可拖拽组件的方法,一个低代码平台的前端部分,靠拖拉拽生成页面。Vue技术栈从零实现低代码可视化搭建平台示例,低代码轮子,通过拖拽就可生成Vue代码的平台来了,vue低代码平台开发相关比低代码更强大的零代码开发平台,这款低代码SAAS数据可视化工具,拖拽生成大屏。vue实现拖拽效果,Vue自由拖拽缩放组件,自定义组件(文本、图片

🏆 前端领域优质创作者 1万+

深入解析高通SA8775芯片:性能、架构与研发创新趋势

SA8775芯片凭借其强大的CPU、GPU和AI加速能力,能够应对现代智能系统中的复杂计算任务。它不仅适合高性能计算、深度学习应用,也在汽车、智能设备等领域有广泛的应用前景。无论是在自动驾驶系统中,还是在车载信息娱乐和高级嵌入式系统中,SA8775都展现了其出色的计算能力和能效平衡,是现代智能系统的重要硬件基础。SA8775芯片作为高通的高性能处理平台,具有出色的计算和AI加速能力,但也存在一些值得关注的地方。

weixin_43199439的博客 9346

Yammer从Scala转向Java

近日,由Yammer雇员Coda Hale发给Typesafe的Scala商业管理层的邮件通过YCombinator被泄漏出来并在GitHub上刊出。该邮件确认Yammer正在将其基础设施栈从Scala迁回至Java,原因在于Scala的复杂性与性能问题。\Yammer的公关Shelley Risk向InfoQ证实该邮件只代表Coda Hale的个人意见而非Yammer的官方声明;随后,Coda ...

cpongo5 306

【图像去噪】基于加权核范数最小化算法实现图像去噪附matlab代码

1 简介 WNNM是一种约束矩阵奇异值稀疏性的低秩算法,在NNM理论基础上增加了核范数权重,有效利用了自然图像的先验信息并提高了核范数的灵活性. 2 部分代码 ​clcclear allclose allnSig = 100;O_Img = double(imread('Monarch.png'));​randn('seed', 0);N_Img = O_Img + nSig* randn(size(O_Img)); ..

qq_59747472的博客 3114

面向 Java 开发人员的 Scala 指南: Scala 和 servlet(scala代码学习第十一天)

Scala 显然是一门有趣的语言,很适合体现语言理论和创新方面的新思想,但最终它要用在 “现实” 环境中,它必须能满足开发人员的某些需求并在 “现实” 环境中有一定的实用性。 了解 Scala 语言的一些核心功能之后,就能认识到 Scala 语言的一些灵活性,并能放心使用 Scala 创建 DSL。现在我们进入实际应用程序使用的环境,看看 Scala 如何适应环境。在本系列的新阶段中,我们...

lw7877187的博客 229

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

web服务器推送技术

反向 Ajax,第 1 部分: Comet 简介 反向 Ajax,第 2 部分: WebSockets 反向 Ajax,第 3 部分: Web 服务器和 Socket.IO 反向 Ajax,第 4 部分: Atmosphere 和 CometD 反向 Ajax,第 5 部分: 事件驱动的 Web 开发 Comet:基于 HTTP 长连接的“服务器推”技术 实战 Co

496

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Salt Master 并发控制新选项 master_mworker_max_inflight 详解:异步 MWorker 背压与限流机制

本文基于 Salt 项目 changelog 70129.added 引入的新配置项 `master_mworker_max_inflight`,深入讲解 Salt Master 在启用异步 MWorker 模式(`master_async_mworker`)时,如何为每个 MWorker 进程限制并发请求处理器的数量。读完本文,你将掌握该选项的默认值语义、生效条件、`asyncio.Bounde

gitblog_01090的博客 1074

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java web scala_在Java项目中整合Scala

Scala是一个运行在Java JVM上的面向对象的语言。它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程。具有这些优势,使得我最近很想在一个新的项目中使用Scala,但是在新项目中,抛弃我们常用的Java和C#,而直接使用一门新的语言是很困难的。这不仅包括学习新语言这个过程,未来,更为项目的长期发展和日后的开发和支持增加了很多变数。毕...

weixin_42522275的博客 248

IDEA实现Java与Scala代码混合开发

文章目录0x00 文章内容0x01 构建工程1. 构建Maven工程2. 编写代码并查看运行结果0x02 结果问题1. 引入Scala插件2. 排除依赖0xFF 总结 0x00 文章内容 现在我想在以前的教程里面加上Scala代码,实现一个工程里既可以写Java代码,又可以写Scala代码,这也是企业生产上的一个常用手法,因为以前的项目里面可能已经用Java写了很多代码,现在又要用上Sca...

邵奈一的博客 6476

在Java项目中整合Scala

Scala是一个运行在Java JVM上的面向对象的语言。它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程。具有这些优势,使得我最近很想在一个新的项目中使用Scala,但是在新项目中,抛弃我们常用的Java和C#,而直接使用一门新的语言是很困难的。这不仅包括学习新语言这个过程,未来,更为项目的长期发展和日后的开发和支持增加了很多变数。毕

2565

如何在Java maven项目中整合Scala代码

前言:介绍scala Scala是一个运行在Java JVM上的面向对象的语言。它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程。 那么,我们就不能在新项目中应用和实践Scala么?通过我的实践,我发现其实我们可以通过简单的Maven配置把Scala集成到我们现有的Java项目中。这样我们可以很简单得在Java项目中集成和使用Scala。 在开发之前,我们首先要配置Scala环境。我在Java开发中使用IntelliJ,首先,在IntelliJ中

纵横的博客 878

Scala学习笔记-Servlet环境搭建

之前用的Scala的IDE,发现没有Web开发插件,所以重新下载了个J2EE的eclipse,然后安装scala插件。 还有准备好Tomcat,配置好Eclipse的web开发环境。 Tomcat我用的8,java也是8,eclipse是4.5.1 。 之后新建web项目,在web项目上右键->Configure->Add Scala Nature ,然后就可以使用s...

weixin_30497527的博客 188

scala学习十 servlet开发

举个小例子,先熟悉一下: import javax.servlet.http.{HttpServlet, HttpServletRequest => HSReq, HttpServletResponse => HSResp} class HelloScalaServlet extends HttpServlet { override def doGet(req : HSReq, res

西红柿炒土豆 700

scala类与对象

类和对象 scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。 创建类和对象 用法 使用class来定义一个类 使用new来创建对象 示例 创建一个Person类,并创建它的对象 步骤 创建一个scala项目,并创建一个Object 添加main方法 创建类和对象 实现 在IDEA中创建项目,并创建一个Object(main方法必须放在Object中) 添加main方法 创建一个Person类 在main方法中创建Person类对象 参考代码

qq_39545674的博客 770
上一篇: 真正的 Web 2.0: 会战 Web 垃圾信息,第 2 部分
下一篇: 扩展 JDK 日志框架
phantomhu
博客等级 码龄23年 70粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值