? ? ? ?该系统目前只兼容新版本浏览器,如果你要使用本系统,请使用chrome全系,firefox全系,IE10+,Safari全系,Opera全系等;
本系统入口地址:http://test.idbhost.com,(试用账号:33666490@qq.com/123456,faqee@126.com/123456),或动动小手自己注册吧:)
欢迎来Q - Q群讨论:431040030(请注明Java等字样),可在群里下载整个项目源码
?
小小系统的背后,它可蕴藏着诸多好玩的技术哦:)
?
首先需要一个能支持SPA开发的js框架,我们选用了Backbone,在后台方面,需要将所有请求转发到一个servlet来处理,代码如下:
?
@TagRest(value = "teams/***")
public class Home extends AjaxServlet {
private static final Logger logger = LogManager.getLogger(Home.class);
private static final long serialVersionUID = -8814286860867527336L;
private static final UserService userService = new UserService();
private static final TeamService teamService = new TeamService();
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String token = StrUtil.formatNullStr(getCookie(request, TagConst.SESSIONKEY.SESSION_ACCESSKEY, ""));
logger.info("token:"+token,"cooke:"+getCookie(request, TagConst.SESSIONKEY.SESSION_ACCESSKEY, ""));
if (token.equals("")) {
response.sendRedirect("/login.html");
} else {
forward(request, response, "/index.html");
}
}
private void forward(HttpServletRequest request,HttpServletResponse response, String path){
try {
request.getRequestDispatcher(StrUtil.formatNullStr(path)).forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
?
?
这里用到了框架的***,表示所有teams前缀的请求都拦截到这个servlet处理,在js方面定义route:
$.webApp.AppRouter = Backbone.Router.extend({
routes: {
‘‘: ‘root‘,
‘teams/auth/logout‘: ‘logout‘,
‘teams(/:pageid)‘: ‘goPage‘,
‘teams/project/edit(/:id)‘:‘goProjectEdit‘,
‘teams/project/create‘:‘goProjectCreate‘,
‘teams/project(/:id)‘:‘goProject‘,
},
initialize: function() {
},
logout:function(){
$.get("/restful/api/user/logout",function(json){
location.reload();
});
},
root: function() {
Backbone.history.navigate("teams/myindex", { trigger: true });
},
goPage: function(pageid) {
if(pageid == "myindex"){
if($.webApp.teamList == undefined || $.webApp.teamList.length == 0){
$("h3[action=showmyteam]").text("尚未加入Team");
var html = _.templateFromUrl(‘/restful/teams/template?pagename=belong_zero_team‘);
$("#container").html(html());
}
else{
$("#container").html(new $.webApp.TemplateView(pageid).render().$el.html());
}
}
else{
$("#container").html(new $.webApp.TemplateView(pageid).render().$el.html());
}
$.webApp.initMenu(function(){
if(pageid == "sql_execute"){
pageid = "sql";
}
if(pageid == "weekly"){
pageid = "log";
}
$.webApp.openMenu(pageid);
});
},
goProject:function(id){
$("#container").html(new $.webApp.TemplateView("project", {prjid:id}).render().$el.html());
$.webApp.initMenu(function(){
$.webApp.openMenu("index");
});
},
goProjectCreate:function(){
$("#container").html(new $.webApp.TemplateView("new_project",{prjid:""}).render().$el.html());
$.webApp.initMenu(function(){
$.webApp.openMenu("index");
});
},
goProjectEdit:function(id){
$("#container").html(new $.webApp.TemplateView("new_project",{prjid:id}).render().$el.html());
$("#psuhBtn").html("保存项目");
$.webApp.initMenu(function(){
$.webApp.openMenu("index");
});
}
});
?

?

?
?
?
?
?
原文:http://cxlh.iteye.com/blog/2267555