JSON
简述
json就是指js对象,但是json并不只是适用于js,很多编程语言都有针对json的解析器,比如Java和C++。json因为具有优良的数据交换性能,所以市面上的xml格式交互主要被json替代,而xml成为配置文件。
var country = {name:"中国", province:[{name:"黑龙江",cities:["哈尔滨","大庆"]},{name:"广东",cities:["广州","深圳"]},{name:"台湾",cities:["高雄","台北"]},{name:"新疆",cities:["乌鲁木齐","喀什"]}]}console.log(country.province[3].cities[0])
var pro ={"name":"中国","province":[{"name":"黑龙江",”cities”:["哈尔滨","大庆"]},{"name":"广东","cities":["广州","深圳","珠海"]},{"name":"台湾","cities":["台北","高雄"]},{"name":"新疆","cities":["乌鲁木齐"]}]}
上下两种有什么区别呢?
上面:json
下面:json字符串
通俗的理解为java里面的对象以及调用了toString方法,传输数据一般用json字符串。
使用
这里,格式转换比较麻烦的话,可以使用谷歌的Gson,阿里巴巴的fastjson,和sun格式自带的Jackson,这里以maven引入Jackson为例,说明格式转换工具的使用。
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.simon</groupId><artifactId>jsonmvc</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.4</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.12.1</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.12.2</version></dependency></dependencies></project>
package com.simon;public class User {private String username;private String password;public User() {}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(String username, String password) {this.username = username;this.password = password;}}
Java对象转为json字符串
package com.simon;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.type.CollectionType;import com.fasterxml.jackson.databind.type.TypeFactory;import org.junit.Test;import java.util.ArrayList;import java.util.List;public class JSONTest {@Testpublic void testObject2Json() throws JsonProcessingException {User user1 = new User("zs", "123");User user2 = new User("ls", "234");User user3 = new User("ww", "345");User user4 = new User("zl", "456");List<User> list = new ArrayList<>();list.add(user1);list.add(user2);list.add(user3);list.add(user4);ObjectMapper mapper = new ObjectMapper();String s = mapper.writeValueAsString(list);System.out.println(s);}}
json字符串转为Java对象
package com.simon;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.type.CollectionType;import com.fasterxml.jackson.databind.type.TypeFactory;import org.junit.Test;import java.util.ArrayList;import java.util.List;public class JSONTest {//这里需要无参构造器@Testpublic void testJson2Object() throws JsonProcessingException {String jsonStr = "[{\"username\":\"zs\",\"password\":\"123\"}," +"{\"username\":\"ls\",\"password\":\"234\"}," +"{\"username\":\"ww\",\"password\":\"345\"}," +"{\"username\":\"zl\",\"password\":\"456\"}]\n";ObjectMapper mapper = new ObjectMapper();TypeFactory typeFactory = mapper.getTypeFactory();CollectionType type = typeFactory.constructCollectionType(List.class, User.class);List<User> userObjects = mapper.readValue(jsonStr, type);for (User user : userObjects) {System.out.println(user);}}}
MVC
需求
用户注册登录案例:要求是先将数据以json文件的形式进行存储数据,后面将其改成使用数据库来存储,但是逻辑不变,只是将数据存储方式做一个改变。
MVC设计模式
MVC设计模式主要的一个点就在于解耦性,将模块和模块之间的关联尽可能降到最低。
- Model:一般情况下由对象bean以及对用户的操作,可能有登录、 注册、查询、修改、删除
- View:视图。就是对model里面数据模型的一个显示。比如说京东app,我的页面、订单页面。订单页面是一个视图,视图里面的数据怎么来的呢?一般是先查询数据库,将数据封装到一个order对象,order对象里面的数据显示在页面上面。数据库里面的内容——> Bean对象———> 页面、视图
- controller:控制器。请求先分发到controller中,controller去调用模型的一个或者多个方法,比如请求分发到servlet,servlet去调用模型的注册方法,根据模型方法的返回值不同,调用不同的视图。
如果从json迁移到mysql,我们需要做的事情有哪些?
1、由RegisterJsonModel迁移到RegisterMysqlModel,如果希望代码的改动尽可能少,那么应当尽可能满足以下几点:①方法的名称要相同 ②方法的参数要相同 ③方法的返回值要相同
2、注册里面,变更,需要从RegisterJsonModel迁移到RegisterMysqlModel,如果还有其他的逻辑,比如登录、查询、修改、删除等逻辑。全部也都要将RegisterJsonModel迁移到RegisterMysqlModel(变更的地方依然有很多),于是想到接口,因为天然具有规范性,就能够规范这三点必须满足要求,否则会报错。
MVC三层架构
在MVC基础上,将程序的代码进行进一步的解耦,分为三个层:
展示层:servlet和视图组成的这个部分叫做展示层,做一些获取请求参数、校验、调用service
业务层:发起一个一个的dao方法调用,调用完毕之后,组装,形成需要的格式,返回给servlet(汽车工厂,会向各个零部件厂商发起订单,部件全部堆在生产车间之后,它取组装,形成一个整车)
数据层:就是单纯的一个一个的方法
变化过程
先是因为需求变更,不得不将可重复利用的代码片段复用,形成Bean及对Bean的操作、给用户的显示、用于解耦或是联系前两者的操作,这样的风格称为MVC设计模式。后来,在MVC设计模式的基础上,当遇到更复杂的逻辑时,可以将之前的操作进一步抽离,形成接口,以防止修改现有代码。
请求及执行过程
来自狂神说总结,链接点我
很久很久以前
后来



