focusSNS学习笔记
FocusSNS是一个社交类型的网站架构

系统的加载过程
所有的分发都从RouteController开始
@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET)
public String route0() {
return "page:dashboards?path=/home";
}
@RequestMapping(value={"/", "/home"}表示的是url路径,也就是一开始打开的主页(上面的图片)
返回的路径表示对应的文件路径
WEB-INF/pages/dashboards.xml
这个页面就是我们看到的主页的XML配置
<?xml version="1.0" encoding="UTF-8"?>
<pages>
<page parent="parent/global" path="/home">
<placeholder name="mainColumn">
<widget name="eventWidget" path="/calendar/event/upcoming-view"
cache="60">
<title>即将到来的活动</title>
<prefs>
<limit>10</limit>
<categoryCodes>people,groups</categoryCodes>
</prefs>
</widget>
<widget name="topicWidget" path="/discussion/topic/recent-view">
<title>最新讨论</title>
<prefs>
<limit>10</limit>
<categoryCodes>people,groups</categoryCodes>
</prefs>
</widget>
<widget name="postWidget" path="/blog/post/recent-view">
<title>最新博文</title>
<prefs>
<limit>10</limit>
<categoryCodes>people,groups</categoryCodes>
</prefs>
</widget>
</placeholder>
<placeholder name="rightColumn">
<widget name="userWidget" path="/system/user/login-view">
<title>登录</title>
</widget>
<widget name="activityWidget" path="/stream/activity/recent-view">
<title>说了些什么...</title>
<prefs>
<limit>5</limit>
<activityTypes>user-input</activityTypes>
</prefs>
</widget>
<widget name="questionWidget" path="/knowledge/question/recent-view">
<title>问了些什么...</title>
<prefs>
<limit>5</limit>
<categoryCodes>people,groups</categoryCodes>
</prefs>
</widget>
</placeholder>
</page> <page parent="parent/global" path="/people">
<placeholder name="leftColumn">
<widget name="menuWidget" path="/system/menu/custom-menu">
<prefs>
<userRequired>true</userRequired>
<items><![CDATA[
${base}/people/all=所有成员
]]></items>
</prefs>
</widget>
<widget name="profileSearchWidget" path="/search/profile/form-view">
<title>搜索</title>
</widget>
</placeholder>
<placeholder name="mainColumn">
<widget name="profileWidget" path="/profile/profile/list-view">
<title>成员列表</title>
<prefs>
<categoryCode>people</categoryCode>
</prefs>
</widget>
</placeholder>
</page> <page parent="parent/global" path="/groups">
<placeholder name="leftColumn">
<widget name="menuWidget" path="/system/menu/custom-menu">
<prefs>
<userRequired>true</userRequired>
<items><![CDATA[
${base}/groups/form=添加圈子
${base}/groups/all=所有圈子
]]></items>
</prefs>
</widget>
<widget name="profileSearchWidget" path="/search/profile/form-view">
<title>搜索</title>
</widget>
</placeholder>
<placeholder name="mainColumn">
<widget name="profileWidget" path="/profile/profile/list-view">
<title>圈子列表</title>
<prefs>
<categoryCode>groups</categoryCode>
</prefs>
</widget>
</placeholder>
</page>
</pages>
可以看下最新博文
<widget name="postWidget" path="/blog/post/recent-view">
<title>最新博文</title>
<prefs>
<limit>10</limit>
<categoryCodes>people,groups</categoryCodes>
</prefs>
</widget>
postWidget对应的类,
/blog/post/recent-view表示对应的url 这个是通过spring的注释标识的
@Widget
@RequestMapping("/blog/post")
public class PostWidget { private LinkService linkService;
private PostService postService;
private StatisticService statisticService;
private CommentService commentService;
private PostCategoryService postCategoryService; .........
@RequestMapping("/recent-view")
public String doRecentView(Page<Post> page,
@PrefParam(required=false) String categoryCodes, @RequestAttr Project project, Model model) {
page.setPageNo(1);
page.desc("p.entered");
if(StringUtils.isNotBlank(categoryCodes)) {
List<String> codes = Arrays.asList(StringUtils.split(categoryCodes, ",")); .........
}
第二行的/blog/post和12行的/recent-view合起来就是XML中的path,
上面的函数返回值是一个字符串:
return "blog/post-recent"; 这个字符串就是后面要加载的freemaker文件:WEB-INF/views/blog/post-recent.ftl 同样的,通过同样的方式加载其他的Widget,就可以拼成整个的页面。
focusSNS学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- SPOJ - POLYNOM Polynomial(数论乱搞)题解
题意 :给你n个数,问你是否存在一个多项式(最多三次方)满足f(i)= xi. 思路:讲一个神奇的思路: x3 - (x - 1)3 = 3x2 - 3x + 1 x2 - (x - 1)2 = 2x ...
- 51nod 1103 N的倍数
1103 N的倍数 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8, ...
- Java名称由来
2000年度的JavaOne国际会议大厅热闹非凡,一阵阵浓郁的咖啡味儿香气扑鼻.从世界各地汇集到旧金山参加会议的Java精英们兴奋异常,排着长队,等待得到一杯由Java语言控制的咖 ...
- 04_Flume多节点load_balance实践
1.负载均衡场景 1)初始:上游Agent通过round_robin selector, 将event轮流发送给下游Collecotor1, Collector2 2)故障: 关闭Collector1 ...
- .net 与 java 开发微服务对比
java+spring boot+maven对比.net 优势: 1. spring 自身带的ioc 比.net 更简单易用. 2. spring actuator的健康检测等运行时状态查看功能很赞. ...
- 正则表达式及R字符串处理之终结版
http://yphuang.github.io/blog/2016/03/15/regular-expression-and-strings-processing-in-R/ 0.动机:为什么学习字 ...
- Java String 中的一些函数与正则的结合使用
首先正则表达式在处理字符串问题时,真的非常强大. 正则可以帮助我们处理字符串的: 匹配, 选择, 编辑, 验证等问题. 正则中"\\"表示插入一个"\" 这里仅 ...
- shell 求幂
$ let i=** $ echo $i $ ((i=**)) $ echo $i $ echo "5^2" | bc
- Could not find a package configuration file provided by 'ecl_geometry' ,.................couldn't find required component 'ecl_geometry'
sudo apt-get install ros-kinetic-ecl-geometry
- android调用照相机拍照获取照片并做简单剪裁
引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html 效果: 客服端代码: package com.cn.lx ...