整体框架是大佬给我的,我只进行了业务处理,今天初步了解了一下Spring Boot。不对的,请指出,共同学习,谢谢。
Spring Boot+ maven 可以进行快速开发。
在main方法中启动一个SpringApplication,启动方法是run方法。
默认启动步骤:
1)创建一个合适的ApplicationContext实例,这个实例取决于classpath。
2)注册一个CommandLinePropertySource,以spring属性的形式来暴露命令行参数。
3)刷新ApplicationContext,加载所有的单例bean。
4)触发所有的命令行CommanLineRunner来执行bean。
对于配置文件:application.yml
配置文件内容:
1. 不同“等级” 用冒号隔开
2. 次等级的前面是空格,不能使用制表符(tab)
3. 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着
---------- 此为服务配置
server:
port: 8888
spring.freemarker.view.prefix: /webapp/
spring.freemarker.suffix: .html
spring.mvc.static-path-pattern: /static/**
resource:
tmpDir: G://tmp/ #临时文件夹--------- 此为数据库连接
mysqlLink:
jdbcUrl: jdbc:mysql://127.0.0.1:3306/xx
driverClass: com.mysql.jdbc.Driver
user: a
password: a--------- 此为redis配置
redisConfig:
host: 127.0.0.1
port: 6379
password: zhgd
cacheName: a
添加ConcurrentHashMap(锁分段技术)的使用环境:
1.ConcurrentHashMap允许并发的读和线程安全的更新操作
2.在执行写操作时,ConcurrentHashMap只锁住部分的Map
3.并发的更新是通过内部根据并发级别将Map分割成小部分实现的,求总长度时,可能会有数据不全等问题,需要锁住map,求size
4.高的并发级别会造成时间和空间的浪费,低的并发级别在写线程多时会引起线程间的竞争
5.ConcurrentHashMap的所有操作都是线程安全
6.ConcurrentHashMap返回的迭代器是弱一致性,fail-safe并且不会抛出ConcurrentModificationException异常
7.ConcurrentHashMap不允许null的键值
8.可以使用ConcurrentHashMap代替HashTable,但要ConcurrentHashMap不会锁住整个Map
Spring Boot实现了自动配置,降低了项目搭建的复杂度。
Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。
Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。
集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。
Spring MVC 是一个框架;Spring Boot 是一套快速开发整合包。
现在开始举例:映射
index.html
@RestController public class IndexController { @GetMapping("/") ModelAndView index() { ModelAndView ret=new ModelAndView("index"); List<Kv> services=new ArrayList<>(2); services.add(Kv.by("link","config").set("name","aa")); services.add(Kv.by("link","control").set("name","bb")); ret.addObject("services", services); return ret; } } RestController = responseBody + controller的组合,返回的数据是json格式。
当前文件名称是:index.html
/config/其他文件
@RestController @RequestMapping("/config/xx") public class CfgSetBroadCastController { @GetMapping public ModelAndView index(){ ModelAndView ret=new ModelAndView("adapterCfg/xx"); Map<String, String> paramMap = getBroadCastParam(); ret.addObject("bcastParam", paramMap); return ret; } @RequestMapping(value="/updatexx", method = RequestMethod.POST) @ResponseBody public Object updateBroadCast(HttpServletRequest request){ Map<String, Object> map = new HashMap<String,Object>(); map.put("data", aa); return map; } 1.当前java文件的映射地址为 IP:port/config/xx 2.index()方法中,返回的信息为bcastParam,信息返回页面在adaterCfg/xx.html 3.updateBroadCast()方法的路劲为 IP:port/cofing/xx/updatexx 4.updateBroadCast()方法中返回的数据 Map
参数设置
@Controller @RequestMapping("/config") public class CfgIndexController { @Resource(name="adpaterCfgService") private AdapterCfgService adpaterCfgService = new AdapterCfgService(); @GetMapping public ModelAndView index() { ModelAndView ret=new ModelAndView("adapterCfg/index"); List<Record> records = adpaterCfgService.getAllMenu(); ret.addObject("allMenu", records); return ret; } @RequestMapping("/{name}") public String equipStatus(@PathVariable(name = "name") String name){ return "adapterCfg/"+name; } @RequestMapping("/brAreaSelector") public String brAreaSelector(){ return "adapterCfg/brAreaSelector"; } } 1.此java文件的路劲为 IP:port/config 2.service文件需要注解 @Resource(name="service的名称") 3.index()文件所指页面 IP:port/adapter/index.html,返回数据 allMenu 4.equipStatus()方法,@PathVariable(name = "name") String name --- 参数设置,返回内容是页面地址 IP:port/config/adaptercfg/参数name
简单的service文件@Service("adpaterCfgService") public class AdapterCfgService { public List<Record> getAllMenu(){ List<Record> records = Db.find("select * from text"); return records; } } service文件需要注解 @Service("名称")
先展示我Spring Boot的基本框架,所有js文件和css文件保存在static中,html文件保存在templates中。
从servlet中返回数据到前台中:
使用的FreeMarker文件取出数据: 转载地址:https://blog.csdn.net/pengpengpeng85/article/details/52070602
举例几个接收的数据:
<script>
<#assign keys=bcastParam?keys/>//bcastParam是我返回内容Map<String,String>
<#list keys as key>//循环list
$("input[name='regionCode']").val("${bcastParam['regionCode']!''}");
//取出bcastParam['regionCode']值,如果没有值,则返回空
</#list>
</script>
//FreeMarker 也可以嵌入到标签中使用
<tbody id="tableBody">
<#list timeBroadCasts as time>//循环list
<tr>
<td>${time.pattern}</td>
<td>
<#list time.channel?split(",") as outputChannel>//将time.channel分割
<#if outputChannel =="1">aa</#if>//if进行判断,然后复制
<#if outputChannel =="2">bb</#if>
<#if outputChannel =="3">cc</#if>
<#if outputChannel =="4">dd</#if>
</#list>
</td>
<td>${time.createTime}</td>
<td><button class=" layui-btn-small layui-btn layui-btn-danger" onclick="deleteTimeBroadCast(${time.id})">删除</button></td>
</tr>
</#list>
</tbody>