本公司经营网站建设,网站建设后期需要做什么,温州网站上排名,网站开发的学习路线像我一样#xff0c;无论是添加简单的Facebook“赞”按钮#xff0c;一大堆“共享”按钮还是显示时间轴信息#xff0c;您都不会注意到当前对应用程序“社交化”的热衷。 每个人都在做这件事#xff0c;包括Spring的家伙#xff0c;事实上#xff0c;他们提供了一个称为S… 像我一样无论是添加简单的Facebook“赞”按钮一大堆“共享”按钮还是显示时间轴信息您都不会注意到当前对应用程序“社交化”的热衷。 每个人都在做这件事包括Spring的家伙事实上他们提供了一个称为Spring Social的溜溜的API可让您将您的应用程序与许多软件即服务SaaS提要例如Twitter FacebookLinkedIn等 本文以及接下来的一些博客通过演示Spring Social的使用来了解整个社交场景而我将以非常基础的内容开始。 如果您看过Spring Social Samples您会知道它们包含几个非常好的和完整的“ quickstart”应用程序。 一个用于Spring 3.0.x另一个用于Spring3.1.x。 在研究这些应用程序时让我印象深刻的是您必须学习许多概念才能欣赏正在发生的事情。 这包括配置外部授权提要集成凭证持久性等……大多数复杂性源于您的用户需要登录其软件即服务SaaS帐户例如TwitterFacebook或QZone的事实以便您的应用程序可以访问其数据1 。 由于周围有大量的SaaS提供程序以及它们使用的授权协议数量不同这使情况更加复杂。 因此我认为我将尝试将所有这些分解为各个单独的组件以解释如何构建有用的应用程序 但是我将从一些背景开始。 Spring的家伙们正确地意识到互联网上有如此众多的SaaS提供商他们永远无法为所有这些提供商编写模块因此他们将功能分为两部分第一部分包括spring-social-core和spring-social-web模块为每个SaaS提供程序提供基本的连接性和授权代码。 提供所有这些听起来像是一项艰巨的任务但它的简化之处在于要成为SaaS提供者您需要实现所谓的OAuth协议 。 我还没有介绍OAuth的详细信息但简而言之OAuth协议执行了一个复杂的小操作允许用户与您的应用程序共享其SaaS数据即他们在Facebook等上拥有的东西而无需用户分发他们的您的应用程序的凭据。 至少有三个版本1.0、1.0a和2.0并且SaaS提供程序可以自由实现他们喜欢的任何版本通常会添加自己的专有功能。 此拆分的第二部分包括SaaS提供程序模块这些模块知道如何与最低级别的各个服务提供程序服务器进行通信。 Spring的家伙目前提供 基本服务 西方世界是 Facebook LinkedIn 和 Twitter 。 采用广泛的模块化方法的好处是您还可以使用很多其他社区主导的模块 Spring社交500px Spring社交BitBucket Spring社交挖掘 Spring社交保管箱 Spring社交展 Spring社交电影 Spring社交四方 Spring社交Google Spring社交Instagram Spring社交Last.fm Spring Social LiveWindows Live Spring社会味iso Spring社交Mixcloud Spring社交Nk Spring社会销售人员 Spring社交SoundCloud Spring社交活动 Spring社交视频 Spring社交活动 Spring社交微博 Spring社会兴 Spring社交Yammer Spring社会保障模块 Spring Social Grails插件 但是这只是可用服务数量的一部分要查看此列表的大小请访问AddThis网站并找出它们支持的服务。 返回代码 现在如果您像我一样那么在编程方面您会讨厌安全性从开发角度来看这非常麻烦会阻止您编写代码并使您的生活变得困难所以我想我应该开始通过扔掉所有东西并编写一个显示一些基本SaaS数据的小应用程序。 事实证明这可能是因为某些SaaS提供商例如Twitter同时服务于私有数据和公共数据。 私有数据是您需要登录的东西而公共数据对任何人都可用。 在今天的场景中我正在编写一个基本应用程序该应用程序使用Spring Social Twitter Module在应用程序中显示Twitter用户的时间线而您要做的只是Twitter用户的屏幕名称。 要创建该应用程序第一步是使用SpringSource Toolkit仪表板的模板部分创建一个基本的Spring MVC项目。 这提供了一个Web应用程序可帮助您入门。 第二步是将以下依赖项添加到pom.xml文件中 !-- Twitter API --dependencygroupIdorg.springframework.social/groupIdartifactIdspring-social-twitter/artifactIdversion${org.springframework.social-twitter-version}/version/dependency!-- CGLIB, only required and used for Configuration usage: could be removed in future release of Spring --dependencygroupIdcglib/groupIdartifactIdcglib-nodep/artifactIdversion2.2/version/dependency 上面的第一个依赖关系是针对Spring Social的Twitter API的而第二个依赖关系是使用Spring 3的Configuration注释配置应用程序所必需的。 请注意您还需要通过添加以下内容来指定Twitter API版本号 org.springframework.social-twitter-version1.0.2.RELEASE/org.springframework.social-twitter-version …到文件顶部的properties部分。 步骤3是您需要配置Spring的地方。 如果查看Spring Social示例代码您会注意到Spring的家伙使用Java和Spring 3 Configuration注释配置他们的应用程序。 这是因为基于Java的配置比基于XML的原始配置具有更大的灵活性。 Configurationpublic class SimpleTwitterConfig {private static Twitter twitter;public SimpleTwitterConfig() {if (twitter null) {twitter new TwitterTemplate();}}/*** A proxy to a request-scoped object representing the simplest Twitter API* - one that doesnt need any authorization*/BeanScope(value request, proxyMode ScopedProxyMode.INTERFACES)public Twitter twitter() {return twitter;}} 上面的代码所做的全部是通过Spring的Twitter接口为Spring提供一个简单的TwitterTemplate对象。 对于这个基本应用程序使用Configuration绝对是多余的但是我将在以后的博客中继续使用它。 有关Configuration批注和基于Java的配置的更多信息请查看 Spring的基于Java的依赖注入 更多基于Spring Java的DI 编写完配置类后接下来要做的就是整理控制器。 在这个简单的示例中我使用了一个简单的RequestMapping处理程序该处理程序处理如下所示的URL a hreftimeline?idroghugheGrab Twitter User Time Line for roghughe/abr / ……代码看起来像这样 Controllerpublic class TwitterTimeLineController {private static final Logger logger LoggerFactory.getLogger(TwitterTimeLineController.class);private final Twitter twitter;Autowiredpublic TwitterTimeLineController(Twitter twitter) {this.twitter twitter;}RequestMapping(value timeline, method RequestMethod.GET)public String getUserTimeline(RequestParam(id) String screenName, Model model) {logger.info(Loading Twitter timeline for : screenName);ListTweet results queryForTweets(screenName);// Optional Step - format the Tweets into HTMLformatTweets(results);model.addAttribute(tweets, results);model.addAttribute(id, screenName);return timeline;}private ListTweet queryForTweets(String screenName) {TimelineOperations timelineOps twitter.timelineOperations();ListTweet results timelineOps.getUserTimeline(screenName);logger.info(Fond Twitter timeline for : screenName adding results.size() tweets to model);return results;}private void formatTweets(ListTweet tweets) {ByteArrayOutputStream bos new ByteArrayOutputStream();StateMachineTweetState stateMachine createStateMachine(bos);for (Tweet tweet : tweets) {bos.reset();String text tweet.getText();stateMachine.processStream(new ByteArrayInputStream(text.getBytes()));String out bos.toString();tweet.setText(out);}}private StateMachineTweetState createStateMachine(ByteArrayOutputStream bos) {StateMachineTweetState machine new StateMachineTweetState(TweetState.OFF);// Add some actions to the statemachinemachine.addAction(TweetState.OFF, new DefaultAction(bos));machine.addAction(TweetState.RUNNING, new DefaultAction(bos));machine.addAction(TweetState.READY, new ReadyAction(bos));machine.addAction(TweetState.HASHTAG, new CaptureTag(bos, new HashTagStrategy()));machine.addAction(TweetState.NAMETAG, new CaptureTag(bos, new UserNameStrategy()));machine.addAction(TweetState.HTTPCHECK, new CheckHttpAction(bos));machine.addAction(TweetState.URL, new CaptureTag(bos, new UrlStrategy()));return machine;}} getUserTimeline方法包含三个步骤首先它包含一些推文进行一些格式化然后将结果放入模型中。 对于此博客最重要的一点是掌握推文您可以看到这是通过List tweet queryForTweetsString screenName方法完成的。 此方法有两个步骤使用Twitter对象获取TimelineOperations实例然后使用该对象使用屏幕名称作为参数来查询时间线。 如果您查看Twitter界面它将充当工厂对象并返回其他对象来处理不同的Twitter功能时间轴直接消息传递搜索等。我想这是因为开发人员意识到Twitter本身包含了如此多的功能如果所有必需的方法都在一个类中然后他们手上会有一个上帝对象 。 我还包括了将Tweets转换为HTML的可选步骤。 为此我使用了State Machine项目和博客中的JAR您可以在formatTweets...方法中查看其工作方式。 将Tweet的列表作为属性放入模型后要完成的最后一件事情是编写一个JSP来显示数据 ulc:forEach items${tweets} vartweetliimg src${tweet.profileImageUrl} alignmiddle/c:out value${tweet.createdAt}/br/c:out value${tweet.text} escapeXmlfalse//li/c:forEach
/ul 如果您实现了可选的锚标记格式那么这里要记住的关键是确保浏览器可以使用格式化的TweetHTML。 这可以通过使用cout标记的escapeXml false属性或将$ {tweet.text}直接放入JSP中来实现。 在此示例中我没有包含任何样式或花哨的前端因此如果您运行代码2 则应获得以下内容 以上就是我对Spring Social的简单介绍但是仍然有很多基础。 在我的下一个博客中我将了解背景情况。 1我猜这里有很多隐私和数据保护合法性问题要考虑尤其是如果您使用此API存储用户数据时我希望对此发表评论和意见。 2该代码可在GitHub上的git项目中的git//github.com/roghughe/captaindebug.git上找到。 参考来自Captain Debug博客博客的JCG合作伙伴 Roger Hughes的Spring Social入门 。 翻译自: https://www.javacodegeeks.com/2012/06/getting-started-with-spring-social.html