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

网站开发在线培训中国时政新闻

网站开发在线培训,中国时政新闻,网络销售形式,手机网站用什么系统play 拦截器在本教程的第一部分中#xff0c;我们介绍了创建#xff0c;发布和调用模块的基本知识。 我们创建的模块并没有真正做很多事情#xff0c;因此现在是时候使用Play的某些功能来扩展功能了。 1.拦截器 拦截器使您可以拦截对控制器的调用#xff0c;并增强或阻止其… play 拦截器 在本教程的第一部分中我们介绍了创建发布和调用模块的基本知识。 我们创建的模块并没有真正做很多事情因此现在是时候使用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.htmlplay 拦截器
http://www.zqtcl.cn/news/759079/

相关文章:

  • 互联网站建设维护是做什么的网站建设模板成功案例
  • 制作网站需要什么语言wordpress 免签约支付宝
  • 西安网站开发的未来发展易企网络网站建设
  • 贵州做网站怎么推广vs2012 做网站教程
  • 完全菜鸟七天学会建网站网络营销的四大基础理论
  • 东莞网站优化案例网站职业技术培训学校
  • 银川网站建设公司电话公司在百度做网站找谁
  • 交换链接适用于哪些网站网络规划与设计的目的
  • 网站做标签寺院网站模板
  • 高端h5网站柳州建站
  • 百度商桥网站郑州有做网站的公司没
  • 做专业网站济南品牌网站建设低价
  • 网站制作客户寻找数据中台厂商
  • 免费找图片素材的网站西安企业seo
  • 网站建设 名词解释国内网站建设建设
  • 文山州建设局网站域名查询seo
  • php网站模块修改太原小店区最新消息今天
  • 苏州网站优化公司seo服务合同
  • vip影视网站怎么做的辽宁建设厅网站什么时候换的
  • 搭建个网站网站维护合同模板
  • 优盖网logo在线设计南通做网站优化的公司
  • 做百度糯米网站的团队新媒体营销推广公司
  • 个人做网站的时代已经过去大连男科医院排名表
  • 天津餐饮网站建设贵港做网站化司
  • 昆山哪家做网站好猪八戒网站建设
  • 网站的静态资源服务器怎么做河北网站备案
  • php儿童摄影网站源码东莞做网站的公司哪家最好
  • 金融投资网站建设wordpress九宫格主题
  • 玉田县网站建设手机网站建设西安
  • 高质量外链网站请大学生做网站