FocusSNS是一個社交類型的網站架構spring
系統的加載過程架構
全部的分發都從RouteController開始app
1 @RequestMapping(value={"/", "/home"}, method=RequestMethod.GET) 2 public String route0() { 3 return "page:dashboards?path=/home"; 4 }
@RequestMapping(value={"/", "/home"}表示的是url路徑,也就是一開始打開的主頁(上面的圖片)
返回的路徑表示對應的文件路徑
WEB-INF/pages/dashboards.xml
這個頁面就是咱們看到的主頁的XML配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <pages> 3 <page parent="parent/global" path="/home"> 4 <placeholder name="mainColumn"> 5 <widget name="eventWidget" path="/calendar/event/upcoming-view" 6 cache="60"> 7 <title>即將到來的活動</title> 8 <prefs> 9 <limit>10</limit> 10 <categoryCodes>people,groups</categoryCodes> 11 </prefs> 12 </widget> 13 <widget name="topicWidget" path="/discussion/topic/recent-view"> 14 <title>最新討論</title> 15 <prefs> 16 <limit>10</limit> 17 <categoryCodes>people,groups</categoryCodes> 18 </prefs> 19 </widget> 20 <widget name="postWidget" path="/blog/post/recent-view"> 21 <title>最新博文</title> 22 <prefs> 23 <limit>10</limit> 24 <categoryCodes>people,groups</categoryCodes> 25 </prefs> 26 </widget> 27 </placeholder> 28 <placeholder name="rightColumn"> 29 <widget name="userWidget" path="/system/user/login-view"> 30 <title>登陸</title> 31 </widget> 32 <widget name="activityWidget" path="/stream/activity/recent-view"> 33 <title>說了些什麼...</title> 34 <prefs> 35 <limit>5</limit> 36 <activityTypes>user-input</activityTypes> 37 </prefs> 38 </widget> 39 <widget name="questionWidget" path="/knowledge/question/recent-view"> 40 <title>問了些什麼...</title> 41 <prefs> 42 <limit>5</limit> 43 <categoryCodes>people,groups</categoryCodes> 44 </prefs> 45 </widget> 46 </placeholder> 47 </page> 48 49 <page parent="parent/global" path="/people"> 50 <placeholder name="leftColumn"> 51 <widget name="menuWidget" path="/system/menu/custom-menu"> 52 <prefs> 53 <userRequired>true</userRequired> 54 <items><![CDATA[ 55 ${base}/people/all=全部成員 56 ]]></items> 57 </prefs> 58 </widget> 59 <widget name="profileSearchWidget" path="/search/profile/form-view"> 60 <title>搜索</title> 61 </widget> 62 </placeholder> 63 <placeholder name="mainColumn"> 64 <widget name="profileWidget" path="/profile/profile/list-view"> 65 <title>成員列表</title> 66 <prefs> 67 <categoryCode>people</categoryCode> 68 </prefs> 69 </widget> 70 </placeholder> 71 </page> 72 73 <page parent="parent/global" path="/groups"> 74 <placeholder name="leftColumn"> 75 <widget name="menuWidget" path="/system/menu/custom-menu"> 76 <prefs> 77 <userRequired>true</userRequired> 78 <items><![CDATA[ 79 ${base}/groups/form=添加圈子 80 ${base}/groups/all=全部圈子 81 ]]></items> 82 </prefs> 83 </widget> 84 <widget name="profileSearchWidget" path="/search/profile/form-view"> 85 <title>搜索</title> 86 </widget> 87 </placeholder> 88 <placeholder name="mainColumn"> 89 <widget name="profileWidget" path="/profile/profile/list-view"> 90 <title>圈子列表</title> 91 <prefs> 92 <categoryCode>groups</categoryCode> 93 </prefs> 94 </widget> 95 </placeholder> 96 </page> 97 </pages>
能夠看下最新博文ide
1 <widget name="postWidget" path="/blog/post/recent-view"> 2 <title>最新博文</title> 3 <prefs> 4 <limit>10</limit> 5 <categoryCodes>people,groups</categoryCodes> 6 </prefs> 7 </widget>
postWidget對應的類,
/blog/post/recent-view表示對應的url
這個是經過spring的註釋標識的
1 @Widget 2 @RequestMapping("/blog/post") 3 public class PostWidget { 4 5 private LinkService linkService; 6 private PostService postService; 7 private StatisticService statisticService; 8 private CommentService commentService; 9 private PostCategoryService postCategoryService; 10 11 ......... 12 @RequestMapping("/recent-view") 13 public String doRecentView(Page<Post> page, 14 @PrefParam(required=false) String categoryCodes, @RequestAttr Project project, Model model) { 15 page.setPageNo(1); 16 page.desc("p.entered"); 17 if(StringUtils.isNotBlank(categoryCodes)) { 18 List<String> codes = Arrays.asList(StringUtils.split(categoryCodes, ",")); 19 20 ......... 21 }
第二行的/blog/post和12行的/recent-view合起來就是XML中的path,函數
上面的函數返回值是一個字符串:post
return "blog/post-recent";這個字符串就是後面要加載的freemaker文件:WEB-INF/views/blog/post-recent.ftl一樣的,經過一樣的方式加載其餘的Widget,就能夠拼成整個的頁面。