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

商城网站建设视频教程html5 开发网站

商城网站建设视频教程,html5 开发网站,0元无货源开网店怎么开,网站建设80hoe在本教程的第一部分中#xff0c;我们介绍了创建#xff0c;发布和调用模块的基本知识。 我们创建的模块并没有真正做很多事情#xff0c;因此现在是时候使用Play的某些功能来扩展功能了。 1.拦截器 拦截器使您可以拦截对控制器的调用#xff0c;并增强或阻止其行为。 在第… 在本教程的第一部分中我们介绍了创建发布和调用模块的基本知识。 我们创建的模块并没有真正做很多事情因此现在是时候使用Play的某些功能来扩展功能了。 1.拦截器 拦截器使您可以拦截对控制器的调用并增强或阻止其行为。 在第一个示例应用程序中我们向MyLogger添加了显式调用以将消息记录到控制台。 如果我们扩大规模并且您想在每个控制器方法调用中都使用这个非常有用的插件那么您将编写大量样板代码。 拦截器使我们能够自动应用动作从而减少样板。 1.1添加代码 在app目录中创建一个名为action的新程序包。 在这里我们将添加LogMe注释以及将在存在注释时执行的LogMeAction。 此时LogMe.java是一个非常简单的注释不带任何参数 package actions;import play.mvc.With;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** author Steve Chaloner (steveobjectify.be)*/ With(LogMeAction.class) Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.TYPE}) Inherited Documented public interface LogMe { } 看一下注释然后您将看到LogInAction.class–这让Play知道遇到此注释时它应该在实际目标之前执行LogInAction。 package actions;import play.mvc.Action; import play.mvc.Http; import play.mvc.Result;/*** author Steve Chaloner (steveobjectify.be)*/ public class LogMeAction extends Action{Overridepublic Result call(Http.Context context) throws Throwable{System.out.println(MyLogger: context.request().path());return delegate.call(context);} } 这是非常优雅的东西–动作具有LogMe的通用参数类型该参数类型可以访问提供给LogMe批注的任何参数。 这使您可以自定义动作的行为。 当我们添加一些额外的功能时我们将看到这一点。 一旦完成您的代码在本例中为System.out的另一个类然后您将返回proxy.classcontext的结果以恢复正常的执行流程。 同时如果将LogMe添加到控制器方法则操作的路径将记录到控制台 如果将LogMe添加到控制器则对该控制器中任何方法的调用都会导致该路径记录到控制台。 1.2更新Build.scala 由于我们拥有新版本的mylogger因此我们应该更改版本号。 打开项目/Build.scala并进行更改 val appVersion 1.0-SNAPSHOT 至 val appVersion 1.1 1.3确保已检测到您的项目更改 如果您已经在mylogger / project-code中运行Play控制台则需要执行“重新加载”以获取对Build.scala的更改。 如果未打开控制台请立即将其打开-更改将在启动时自动进行。 [mylogger] $ reload [info] Loading project definition from C:\Temp\mylogger\project-code\project [info] Set current project to mylogger (in build file:/C:/Temp/mylogger/project-code/) 1.4清理并发布 如前所述在发布之前进行清理始终是一个好主意以确保您不会推出任何不应存在的对象。 [mylogger] $ clean [success] Total time: 0 s, completed Mar 19, 2012 9:17:25 PM [mylogger] $ publish-local [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1- 1.1 -sources.jar ... [info] Done packaging. [info] Wrote /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1- 1.1.pom [info] Updating {file:/tmp/mylogger/project-code/}mylogger... [info] Done updating. [info] :: delivering :: mylogger#mylogger_2.9.1;1.1 :: 1.1 :: release :: Mon Mar 19 21:17:30 CET 2012 [info] Generating API documentation for main sources... [info] Compiling 3 Java sources to /tmp/mylogger/project-code/target/scala-2.9.1 /classes... [info] delivering ivy file to /tmp/mylogger/project-code/target/scala-2.9.1 /ivy- 1.1 .xml model contains 7 documentable templates [info] API documentation generation successful. [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1- 1.1-javadoc.jar ... [info] Done packaging. [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1- 1.1 .jar ... [info] Done packaging. [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework /../repository/local/mylogger/mylogger_2.9.1/ 1.1 /poms/mylogger_2.9.1.pom [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework /../repository/local/mylogger/mylogger_2.9.1/ 1.1 /jars/mylogger_2.9.1.jar [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework /../repository/local/mylogger/mylogger_2.9.1/ 1.1 /srcs/mylogger_2.9.1-sources.jar [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework /../repository/local/mylogger/mylogger_2.9.1/ 1.1 /docs/mylogger_2.9.1-javadoc.jar [info] published ivy to /home/steve/development/play/play-2.0/framework/../repository /local/mylogger/mylogger_2.9.1/ 1.1 /ivys/ivy.xml [success] Total time: 3 s, completed Mar 19, 2012 9:17:31 PM请注意模块的版本在日志记录中已更改。 如果仍然看到1.0-SNAPSHOT请确保在发布之前重新加载了项目 1.5更新示例应用程序 返回示例应用程序在project / Build.scala中更改所需的模块版本 val appDependencies Seq(mylogger % mylogger_2.9.1 % 1.1) 重新加载并运行“依赖项”以确保您具有正确的版本。 现在您可以更新app / controllers / Application.java以使用以下新代码 package controllers;import actions.LogMe; import play.mvc.Controller; import play.mvc.Result; import views.html.index;LogMe public class Application extends Controller {public static Result index(){return ok(index.render(Your new application is ready.));} } 运行此示例现在您将看到通过注释应用的MyLogger输出。 2.添加了拦截器参数 仅记录请求的路径并不是特别有用或令人兴奋。 如果应该为每种控制器或控制器方法提供特定的日志消息怎么办 在这种情况下我们需要添加一些参数。 2.1更改注释签名 上载action / LogMe.java以使用value参数-这是默认的注释参数因此在使用时无需显式命名。 该值默认为空字符串因此如果此处不存在此消息则可以在操作中提供标准消息。 public interface LogMe {String value() default ; } 在操作中将继承的配置字段键入通用参数在本例中为LogMe并提供对参数的访问。 更新callHttp.Context方法以利用此方法。 public Result call(Http.Context context) throws Throwable {String value configuration.value();if (value null || value.isEmpty()){value context.request().path();}System.out.println(MyLogger: value);return delegate.call(context); } 2.2发布更改 再次重复步骤1.2至1.4这次将appVersion更改为1.2 2.3更新示例应用程序 像以前一样在Build.scala中更新依赖项版本重新加载并使用“ dependencies”进行确认。 现在您可以向LogMe批注添加一条消息 LogMe(This is my log message) public class Application extends Controller 运行该应用程序现在您将在控制台中看到注释消息。 [info] play - Application started (Dev) MyLogger: This is my log message 3.使拦截器交互 现在您希望掌握了这个要诀我们将加快一点。 在本节中我们将研究拦截器如何相互交互。 Play首先将拦截器应用于方法然后应用于控制器因此如果在方法和控制器级别都存在相同的注释它将执行两次。 LogMe批注可以同时应用于类级别和方法级别但是如果您对整个控制器有一条通用的日志记录消息但一种方法需要使用另一条消息那该怎么办呢 另外我们只希望每次调用一个日志消息。 为此我们可以使用传递给每个动作的上下文。 3.1更新模块 更新LogMeAction以使其了解以前的调用 package actions;import play.mvc.Action; import play.mvc.Http; import play.mvc.Result;/*** author Steve Chaloner (steveobjectify.be)*/ public class LogMeAction extends Action{public static final String ALREADY_LOGGED already-logged;Overridepublic Result call(Http.Context context) throws Throwable{Result result;if (context.args.containsKey(ALREADY_LOGGED)){// skip the logging, just continue the executionresult delegate.call(context);}else{// were not using the value here, only the key, but this// mechanism can also be used to pass objectscontext.args.put(ALREADY_LOGGED, );String value configuration.value();if (value null || value.isEmpty()){value context.request().path();}System.out.println(MyLogger: value);result delegate.call(context);}return result;} } 更新版本号清理重新加载和本地发布。 3.2更新示例应用程序 这次我们将在index方法中添加第二个注释。 这将覆盖控制器级别的注释。 因此更新Build.scala中的依赖项编号重新加载并运行。 package controllers;import actions.LogMe; import play.mvc.Controller; import play.mvc.Result; import views.html.index;LogMe(This is my log message) public class Application extends Controller {LogMe(This is my method-specific log message)public static Result index(){return ok(index.render(Your new application is ready.));} } 当您访问http// localhost9000时现在您将在控制台中看到以下内容 LogMe(This is my log message) [info] play - Application started (Dev) MyLogger: This is my method-specific log message 4.又是啤酒时间 您现在拥有了支持参数化操作的基础结构。 请记住很多东西都可以作为注释参数传递但是-重要的是-并非所有东西都可以传递。 您可能需要为某些任务发挥创造力 您可以在此处下载完整的源代码。 参考 Play 2的编写模块第2部分 Objective博客上JCG合作伙伴 Steve Chaloner的拦截器 。 翻译自: https://www.javacodegeeks.com/2012/04/writing-modules-for-play-2-part-2.html
http://wiki.neutronadmin.com/news/380971/

相关文章:

  • 企业网站ppt怎么做做消费金融网站
  • 太原专业网站建设中国正式宣布出兵
  • 请简述企业网站的推广阶段及其特点软文编辑
  • 郑州专业做淘宝网站如何给网站配置域名
  • 商城网站建设招聘网站寄生虫怎么做
  • 技术好的手机网站建设好用的代码网站
  • 专门做盗文网站的公司优衣库的网络营销方式
  • 有没有能帮人快速网站备案的机构东莞企业网站建设开发公司
  • 晋江wap站是什么意思公司品牌官网建站
  • 营销网站开发系统吉林省建设厅
  • 专门做汽车配件保养的网站广东省自然资源厅
  • 网站所有权包括市场调研怎么做
  • 网站死链接扫描华大基因 建设公司网站
  • 优化网站标题和描述的方法网站空间去哪买
  • 怎么买网站域名弹幕网站是怎么做的
  • 网赌网站怎么建设温州气象权威发布
  • 望牛墩镇做网站怎么做彩票网站平台
  • 通用网站后台管理系统(php版)WordPress可以写多少文章
  • 商城网站建设快速服务专门做物业催收的网站
  • 贵州安顺住房城乡建设网站百度权重怎么查询
  • seo流量增长策略seo优化网站的手段
  • 做微网站公司简介网站开发宣传方法
  • 有道网站提交入口在线培训app
  • 合肥网站建设百姓网百度怎么发布网站
  • 网站 ftp商丘三合一网站建设
  • 青岛公司网站制作html编辑器中文版
  • 网站需要人员手机音乐制作软件
  • 卖东西专业网站网上注册网络科技公司需要多少钱
  • 沈阳网站设计外包万户做网站怎么样
  • 北京网站建设公司降龙基于微信公众号开发