2019独角兽企业重金招聘Python工程师标准>>>

本篇博文的目标是使用前端页面渲染插件jsRender做前后端分离,后端采用Spring MVC给出REST API,并结合Nginx完成配置。

结构如下图所示:

注:

前后端分离的做法很多,这里只是使用jsRender而已,本文不会讨论为什么不使用vue等~

在一步一步完成如上目标之前,先来看看什么是jsRender~

什么是jsRender?

jsRender是基于Jquery的一个前端页面渲染插件。可以做到前后端口分离,前端通过ajax请求后台数据,后台拿到响应请求,返回Json格式的数据,然后前端通过 JsRender插件对json数据进行渲染达到前后端分离(后台只管传Json数据,前端Jsrender渲染数据)。

可以去官网获取更多的信息【http://www.jsviews.com/】

前端页面准备

  • 创建一个静态文件夹(本文中static-pages),用于存放HTML、css、js以及图片等文件。

  • 准备jquery以及jsrender的js库

  • 准备HTML文件,如demo文件夹下的index.html

其内容如下:

<!DOCTYPE html>
<!-- To run the current sample code in your own environment, copy this to an html page. --><html>
<head><script src="../js/jquery-1.12.4.min.js"></script><script src="../js/jsviews.js"></script></head>
<meta charset="utf-8"/>
<body><div id="result"></div><table><thead><tr><th>名字</th><th>愛好</th></tr></thead><tbody id="userListTable"></tbody>
</table><script id="usersTemplate" type="text/x-jsrender">
<tr><td>{{>name}}</td><td>{{props hobbies}}<div><b>{{>key}}</b>: {{>prop}}</div>{{/props}}</td></tr>
</script><script type="text/javascript">
$.ajax({type: "POST",url: "../user/list",dataType: "json",success: function (data) {$("#userListTable").html($("#usersTemplate").render(data));}
});
</script>
</body>
</html>

从上述简单示例中,可以看出,表格内容是通过Ajax请求从后端获取的,格式为JSON,本文的示例,后台的REST API采用Spring MVC完成~

后端REST API准备

Spring MVC结构

User.java

User用户类,包含名字、年龄和爱好的属性~

package com.xxx.tutorial.demo.model;import java.io.Serializable;
import java.util.List;/*** * @author wangmengjun**/
public class User implements Serializable {private static final long serialVersionUID = -8725858518508034119L;private String name;private int age;private List<String> hobbies;public User() {super();}public User(String name, int age, List<String> hobbies) {super();this.name = name;this.age = age;this.hobbies = hobbies;}/*** @return the name*/public String getName() {return name;}/*** @param name*            the name to set*/public void setName(String name) {this.name = name;}/*** @return the age*/public int getAge() {return age;}/*** @param age*            the age to set*/public void setAge(int age) {this.age = age;}/*** @return the hobbies*/public List<String> getHobbies() {return hobbies;}/*** @param hobbies*            the hobbies to set*/public void setHobbies(List<String> hobbies) {this.hobbies = hobbies;}/** (non-Javadoc)* * @see java.lang.Object#toString()*/@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", hobbies=" + hobbies + "]";}}

UserService.java

用户服务接口 -- 用户定义接口方法~

package com.xxx.tutorial.demo.service;import java.util.List;import com.xxx.tutorial.demo.model.User;/*** * @author wangmengjun**/
public interface UserService {List<User> findAllUsers();
}

UserServiceImpl.java

服务实现~

package com.xxx.tutorial.demo.service.impl;import java.util.Arrays;
import java.util.List;import org.springframework.stereotype.Service;import com.xxx.tutorial.demo.model.User;
import com.xxx.tutorial.demo.service.UserService;@Service
public class UserServiceImpl implements UserService {@Overridepublic List<User> findAllUsers() {return Arrays.asList(new User("Eric", 20, Arrays.asList("篮球", "跑步")),new User("Wang", 21, Arrays.asList("爬山")));}}

UserController.java

用户控制器类~

package com.xxx.tutorial.demo.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.xxx.tutorial.demo.model.User;
import com.xxx.tutorial.demo.service.UserService;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/list")public ResponseEntity<List<User>> findAllUsers() {List<User> users = userService.findAllUsers();return new ResponseEntity<List<User>>(users, HttpStatus.OK);}}

Nginx动静分离配置

本文使用的Nginx版本为1.11.7

配置动静分离,可以通过修改conf目录下的nginx.conf完成~

配置静态页面

指定js、css、html以及图片静态文件都从静态目录中获取~

  #静态资源    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp)$ { root F:/static-pages/;    # 站点根目录index index.html index.htm;}

配置配置后端规则

添加upstream以及proxy_pass

动静规则配置后,配置文件如下图所示:

upstream tomcat{server localhost:8082;}server {listen 19000;            # 监听本机所有 ip 上的 80 端口server_name _;           # 域名:www.example.com 这里 "_" 代表获取匹配所有#静态资源    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp)$ { root F:/static-pages/;    # 站点根目录index index.html index.htm;}# 反向代理 location / { proxy_pass http://tomcat;                         } 

自此,前端代码、后端REST API代码以及Nginx配置都完成了,接下来,就可以测试一下

测试一下

启动tomcat

将hello-springmvc工程,部署到tomcat/webapps/ROOT目录下~, 如

启动~

启动Nginx

测试

浏览器输入http://localhost:19000/demo/index.html

显示的内容,正是我们REST API返回的内容~ UserServiceImpl中的方法内容如下~

package com.xxx.tutorial.demo.service.impl;import java.util.Arrays;
import java.util.List;import org.springframework.stereotype.Service;import com.xxx.tutorial.demo.model.User;
import com.xxx.tutorial.demo.service.UserService;@Service
public class UserServiceImpl implements UserService {@Overridepublic List<User> findAllUsers() {return Arrays.asList(new User("Eric", 20, Arrays.asList("篮球", "跑步")),new User("Wang", 21, Arrays.asList("爬山")));}}

自此,一个简单的前后端分离,小工程就结束了~

至于jsRender的详细信息,有兴趣的读者可以参考【http://www.jsviews.com/】,本文将不做讨论~

代码下载

源码下载==> 点击~【源码下载】

转载于:https://my.oschina.net/wangmengjun/blog/1505516

一步步完成jsRender + Spring MVC + Nginx前后端分离示例相关推荐

  1. phython在file同时写入两个_喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  2. 从 MVC 到前后端分离

    转载自:https://my.oschina.net/huangyong/blog/521891 从MVC到前后端分离 1.理解 MVC MVC是一种经典的设计模式,全名为Model-View-Con ...

  3. 前后端分离-从MVC到前后端分离

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言 ...

  4. Spring Boot+Vue/前后端分离/高并发/秒杀实战课程之spring Security快速搭建oauth2 内存版身份认证

    Springboot快速搭建oauth2 内存版身份认证 环境准备 点击[Create New Project]创建一个新的项目 项目环境配置 配置Thymeleaf 搭建oauth2认证,加入两个依 ...

  5. spring boot+iview 前后端分离架构之文件上传的实现(三十一)

    spring boot 与 iview 前后端分离架构之文件上传的实现(三十一) 公众号 文件上传 前端改造 main.js引入配置的全局变量 编写baseImgUpload图片上传组件 baseIm ...

  6. spring boot+iview 前后端分离架构之用户管理的实现(三十)

    spring boot 与 iview 前后端分离架构之用户管理的实现(三十) 公众号 用户管理 相关工具类的实现 User实体改造 UserOrg实体改造 UserRole实体改造 UserRole ...

  7. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx

    文章目录 概述 浏览器同源策略 后台搭建 pom.xml interceptor 配置 Controller 启动测试 浏览器和session 后端工程发布到服务器上 问题复现 通过Nginx反向代理 ...

  8. Spring Boot + Vue前后端分离(一)前端Vue环境搭建

    你好,[程序职场]专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率 ...

  9. 从MVC到前后端分离

    摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Stru ...

最新文章

  1. Android性能调优篇之探索垃圾回收机制
  2. razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
  3. JavaScript学习笔记(1)
  4. OpenCASCADE:使用 XSTEPDRAW
  5. nutch2.1在windows平台上使用eclipsedebug 存储在mysql的搭建过程
  6. React Native使用指南-在设备上运行
  7. Java包hashCode()方法及示例
  8. 《InsideUE4》GamePlay 架构(二)Level 和 World
  9. 搭乘百度语音识别技术,录音啦识别率最高可达95%
  10. oracle添加字段sql_如何用SQL语句添加和修改字段?
  11. Js 模式对话框(转)
  12. lambda表达式_C++11的lambda表达式递归
  13. 多智能体强化学习(一) IQL、VDN、QMIX、QTRAN算法详解
  14. Navicat 局域网连接数据库
  15. Java代理(静态代理、JDK动态代理、CGLIB动态代理)
  16. TP5.1升级到ThinkPHP6.0的实战教程看云版
  17. C++11 std::mutex使用以及std::lock_guard自动解锁避免忘记解锁
  18. opencv Fast特征提取函数
  19. 如何把数字金额转换成中文大写
  20. 光速不变原理的一般性表述

热门文章

  1. android中AVD的使用
  2. 【教程】opencv-python+yolov3实现目标检测
  3. 官网快速搭建spring boot 项目
  4. FAQ接口自动化_转载参考
  5. python_day02 上节课知识点回顾
  6. 常用的meta标签总结
  7. 设计优秀API的五大规则
  8. ubuntu11.10+git+svn works
  9. 2019年平面设计趋势
  10. 常见模块设计--数据字典