当前位置: 首页 > news >正文

社区问答网站开发长沙网站制作公司在哪里

社区问答网站开发,长沙网站制作公司在哪里,qq注册账号免费申请,宜昌网站建设多少钱目录 一、什么是 Spring Web MVC 1、MVC 定义 二、学习Spring MVC 1、项目准备 2、建立连接 2.1 RequestMapping 注解的学习 2.2 RequestMapping 使用 3、请求 3.1 传递单个参数 3.2 传递多个参数 3.3 传递对象 3.4 后端参数重命名#xff08;后端参数映射#xf…目录 一、什么是 Spring Web MVC 1、MVC 定义 二、学习Spring MVC 1、项目准备 2、建立连接 2.1 RequestMapping 注解的学习 2.2 RequestMapping 使用 3、请求 3.1 传递单个参数 3.2 传递多个参数 3.3 传递对象 3.4 后端参数重命名后端参数映射 3.5 传递数组 3.6 传递集合 3.7 传递JSON数据 1、JSON语法 2、JSON字符串和Java对象互转 3、JSON优点 4、传递JSON对象 3.8 获取URL中参数PathVariable 3.9 上传文件RequestPart 一、什么是 Spring Web MVC 官方对于 Spring MVC 的描述是这样的 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc)但它通常被称为Spring MVC. 什么是Servlet呢? Servlet 是⼀种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范或者说是⼀套 Java Web 开发的技术标准. 只有规范并不能做任何事情必须要有人去实现它. 所谓实现 Servlet 规 范就是真正编写代码去实现 Servlet 规范提到的各种功能包括类、方法、属性等. Servlet 规范是开放的除了 Sun 公司其它公司也可以实现 Servlet 规范目前常见的实现了Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等它们都被称为Servlet 容器. Servlet 容器用来管理程序员编写的 Servlet 类. 总之我们可以知道Spring Web MVC 是⼀个 Web 框架. 简称 “Spring MVC”。 1、MVC 定义 MVC 是 Model View Controller 的缩写它是软件工程中的⼀种软件架构设计模式它把软件系统分为 模型、视图和控制器 三个基本部分。 View(视图)指在应用程序中专门用来与浏览器进行交互展示数据的资源. Model(模型) 是应用程序的主体部分用来处理程序中数据逻辑的部分. Controller控制器可以理解为⼀个分发器用来决定对于视图发来的请求需要用哪⼀个模型 来处理以及处理完后需要跳回到哪⼀个视图即用来连接视图和模型。 MVC 是⼀种架构设计模式, 也⼀种思想, 而 Spring MVC 是对 MVC 思想的具体实现 . 除此之外, Spring MVC还是⼀个Web框架. 总结来说 Spring MVC 是⼀个实现了 MVC 模式的 Web 框架 . 二、学习Spring MVC 既然 Spring MVC 是 Web 框架, 那么当用户在浏览器中输入了 url 之后我们的 Spring MVC 项目就可以感知到用户 的请求, 并给予响应。 学习 Spring MVC其实就是学习如何通过浏览器和用户程序进行交互。 主要分以下三个方面 建立连接将用户浏览器和 Java 程序连接起来也就是访问⼀个地址能够调用到我们的 Spring 程序。 请求用户请求的时候会带⼀些参数在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能. 响应执行了业务逻辑之后要把程序执行的结果返回给用户, 也就是响应。 1、项目准备 我们要创建一个Spring MVC 项目和 Spring Boot 创建项目相同在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项目。 创建项目时, 勾选上 Spring Web 模块即可如下图所示 2、建立连接 在 Spring MVC 中使用 RequestMapping 来实现 URL 路由映射 也就是 浏览器连接程序的作⽤。 我们通过一个简单的代码来实现一下 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController public class demo {RequestMapping(/hello)public String getHello() {return Hello,Spring MVC;} } 然后来访问: http://127.0.0.1:8080/hello, 就可以看到程序返回的数据了如图 2.1 RequestMapping 注解的学习 RequestMapping 是 Spring Web MVC 应用程序中最常被用到的注解之⼀ 它是用来注册接口的路由映射的. 表示服务器收到请求时, 路径为 /hello 的请求就会调用 getHello 这个方法的代码。 路由映射: 当用户访问⼀个 URL 时, 将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射. 那么对于程序中加的 RestController 注解有什么作用 我们把 RestController 去掉, 再来访问⼀次: 可见报错了404我们找不到该页面。所以RestController 注解也很重要不能不加。 一个项目中, 会有很多类, 每个类可能有很多的方法, Spring程序怎么知道要执行哪个方法呢? Spring会对所有的类进行扫描, 如果类加了注解RestController, Spring才会去看这个类里面的方法有没有加 RequestMapping 这个注解。 2.2 RequestMapping 使用 RequestMapping 既可修饰类也可以修饰方法 当修饰类和方法时访问的地址是类路径 方法路径. RequestMapping标识⼀个类设置映射请求的请求路径的初始信息 RequestMapping标识⼀个方法设置映射请求的请求路径的具体信息 看如下代码 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RequestMapping(/test) RestController public class demo {RequestMapping(/hello)public String getHello() {return Hello,Spring MVC;} } 访问地址http://127.0.0.1:8080/test/hello 这里我们注意一下 RequestMapping 的URL 路径最前面加不加 / (斜杠)都可以, Spring程序启动时, 会进行判断, 如果 前面没有加 / , Spring会拼接上⼀个 /。 如 上面代码中 RequestMapping(/test) 我们可以写为 RequestMapping(test) 通常情况下我们加上 / 。 RequestMapping 的URL路径也可以是多层路径, 最终访问时, 依然是 类路径 方法路径 如 RequestMapping(/user/m1) RestController public class UserController {RequestMapping(/say/hi)public String sayHi(){return hello,Spring MVC;} } 访问路径: http://127.0.0.1:8080/user/m1/say/hi RequestMapping 既支持Get请求, 又支持Post请求. 同理, 也支持其他的请 求方式. 3、请求 访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要 是学习如何传递参数到后端以及后端如何接收. 3.1 传递单个参数 接收单个参数, 在 Spring MVC 中直接用方法中的参数就可以比如以下代码 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/param) public class ParamController {RequestMapping(/m1)public String method1(String name){return 接收到参数name: name;} } 使用浏览器发送请求并传参: http://127.0.0.1:8080/param/m1?namespring 由响应的结果可以看到, 后端程序正确拿到了name参数的值. Spring MVC 会根据方法的参数名, 找到对应的参数, 赋值给方法 如果参数名不⼀致, 是获取不到参数的. 比如请求URL: http://127.0.0.1:8080/param/m1?name1spring 响应结果: 注意 使用基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误。 类型不匹配时, 会报400错误. 我们以下面代码为例来测试一下 RequestMapping(/m1/int) public String method1GetInt(int age) {return 接收到参数age:age; } 1、正常传递参数 http://127.0.0.1:8080/param/m1/int?age1 浏览器响应情况: 2、不传递age参数 http://127.0.0.1:8080/param/m1/int 浏览器响应情况 报500 错误可见 使用基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误。 3、传递参数类型不匹配 http://127.0.0.1:8080/param/m1/int?ageabc 浏览器响应情况: 报400 错误可见 传递的参数类型不匹配时, 会报400错误. 对于包装类型, 如果不传对应参数Spring 接收到的数据则为null。 3.2 传递多个参数 接收多个参数 和接收单个参数⼀样, 直接使用方法的参数接收即可. 使用多个形参. RequestMapping(/m2) public Object method2(String name, String password) {return 接收到参数name: name , password: password; } 使用浏览器发送请求并传参: http://127.0.0.1:8080/param/m2?namezhangsanpassword123456 可以看到, 后端程序正确拿到了name和password参数的值。 当有多个参数时前后端进行参数匹配时是以参数的名称进行匹配的因此 参数的位置是不影响后端获取参数的结果. 3.3 传递对象 如果参数比较多时, 方法声明就需要有很多形参. 并且后续每次新增一个参数, 也需要修改方法声明。 我们可以把这些参数封装为⼀个对象。 Spring MVC 也可以自动实现对象参数的赋值 。 比如 Student 对象 public class Student {private Integer id;private String name;private int age;public Student(){}public Student(Integer id, String name, int age) {this.id id;this.name name;this.age age;}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}public void setId(Integer id) {this.id id;}public Integer getId() {return id;}public String getName() {return name;}public int getAge() {return age;}Overridepublic String toString() {return Student{ name name \ , age age , id id };} }传递对象代码实现 RequestMapping(/m3) public Object method3(Student student){return student.toString(); } 使用浏览器发送请求并传参: http://127.0.0.1:8080/param/m3? id5namezhangsanage20 可以看到, 后端程序正确拿到了Student对象里各个属性的值。 Spring 会根据参数名称自动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则赋值为默认初识值, 比如int类型的属性, 会被赋值为0)。 3.4 后端参数重命名后端参数映射 某些特殊的情况下前端传递的参数 key 和我们后端接收的 key 可以不⼀致比如前端传递了⼀个 time 给后端而后端是使用 createtime 字段来接收的这样就会出现参数接收不到的情况如果出现 这种情况我们就可以使用 RequestParam 来重命名前后端的参数值. 具体示例如下后端实现代码 RequestMapping(/m4) public Object method4(RequestParam(time) String createtime) {return 接收到参数createtime: createtime; } 使用浏览器发送请求并传参: http://127.0.0.1:8080/param/m4?time2023-09-12 响应 可以看到, Spring可以正确的把浏览器传递的参数 time 绑定到了后端参数 caretetime 参数上。 那么此时, 如果浏览器使用createtime进行参数传递呢? 我们来试一下 访问URL: http://127.0.0.1:8080/param/m4?createtime2023-09-12 响应结果 通过控制台打印的日志信息显示 请求参数 time 不存在。 可以得出结论: 使用 RequestParam 进行参数重命名时, 请求参数只能和 RequestParam 声明的名称⼀ 致, 才能进行参数绑定和赋值. 使用 RequestParam 进行参数重命名时, 参数就变成了必传参数. 那么如何进行非必传参数的设置呢 非必传参数设置 先来了解下参数必传的原因, 我们查看 RequestParam 注解的实现细节就可以发现端倪注解 实现如下 Target({ElementType.PARAMETER}) Retention(RetentionPolicy.RUNTIME) Documented public interface RequestParam {AliasFor(name)String value() default ;AliasFor(value)String name() default ;boolean required() default true;String defaultValue() default \n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n; } 可以看到 required 的默认值为true, 表示含义就是: 该注解修饰的参数默认为必传 那么, 我们可以通过设置 RequestParam 中的 requiredfalse 来避免不传递时报错 具体实现如下 RequestMapping(/m4) public Object method4(RequestParam(value time, required false) String createtime) {return 接收到参数createtime: createtime; } 可以看到, 添加requiredfalse之后, time前⾯也加了key, 变成了 value time 注解属性赋值时, 没有指明key的话, 默认为value属性. 如果需要有多个属性进行赋值时, 需要写上key 3.5 传递数组 Spring MVC 可以自动绑定数组参数的赋值。 后端实现代码 RequestMapping(/m5) public String method5(String[] array) {return 接收到参数 Arrays.toString(array); } 使用浏览器发送请求并传参: 数组参数请求参数名与形参数组名称相同且请求参数为多个, 后端定义数组类型形参即可接收参数 http://127.0.0.1:8080/param/m5? arrayzhangsanarraylisiarraywangwu 或者使用 http://127.0.0.1:8080/param/m5?arrayzhangsan,lisi,wangwu 浏览器响应结果 可以看到后端对数组参数进行了正确的接收和响应。 3.6 传递集合 集合参数和数组类似, 同⼀个请求参数名为多个, 且需要使用 RequestParam 绑定参数关系。 默认情况下请求中参数名相同的多个值是封装到数组. 如果要封装到集合要使用 RequestParam 绑定参数关系。 请求方式和数组类似 浏览器传参: 方式⼀: http://127.0.0.1:8080/param/m6?listParamzhangsanlistParamlisilistParamwangwu ⽅式⼆: http://127.0.0.1:8080/param/m6?listParamzhangsan%2clisi%2cwangwu %2c 是逗号的转义编码, 解码后的url为: http://127.0.0.1:8080/param/m6? listParamzhangsan,lisi,wangwu 后端接收代码: RequestMapping(/m6) public String method6(RequestParam ListString listParam){return size:listParam.size() ,listParam:listParam; } 3.7 传递JSON数据 JSON就是⼀种数据格式, 有自己的格式和语法, 使用文本表示一个对象或数组的信息, 因此 JSON本质是字符串主要负责在不同的语言中数据传递和交换. 注意 JSON与Javascript的关系 没有关系, 只是语法相似 1、JSON语法 JSON 是⼀个字符串其格式非常类似于 JavaScript 对象字面量的格式。 我们先来看⼀段JSON数据 {squadName: Super hero squad,homeTown: Metro City,formed: 2016,secretBase: Super tower,active: true,members: [{name: Molecule Man,age: 29,secretIdentity: Dan Jukes,powers: [Radiation resistance, Turning tiny, Radiation blast]}, {name: Madame Uppercut,age: 39,secretIdentity: Jane Wilson,powers: [Million tonne punch, Damage resistance, Superhuman reflexes]}, {name: Eternal Flame,age: 1000000,secretIdentity: Unknown,powers: [Immortality, Heat Immunity, Inferno,Teleportation, Interdimensional travel]}] } JSON的语法: 数据在键值对(Key/Value) 中 数据由逗号 , 分隔 对象用 {} 表示 数组用 [] 表示 值可以为对象, 也可以为数组, 数组中可以包含多个对象 JSON的两种结构 对象: 大括号 {} 保存的对象是⼀个无序的 键值对 集合. ⼀个对象以左括号 { 开始 右括号 } 结束。每个键后跟⼀个冒号 键值对使用逗号 , 分隔 数组: 中括号 [] 保存的数组是值value的有序集合. ⼀个数组以左中括号 [ 开始 右中括 号 ] 结束值之间使用逗号 , 分隔 2、JSON字符串和Java对象互转 JSON本质上是⼀个字符串, 通过文本来存储和描述数据。 Spring MVC框架也集成了JSON的转换工具, 我们可以直接使用, 来完成JSON字符串和Java对象的互转。 参考代码如下 public class JSONUtils {private static ObjectMapper objectMapper new ObjectMapper();public static void main(String[] args) throws JsonProcessingException {Person person new Person();person.setId(5);person.setName(zhangsan);person.setPassword(123456);//对象转为JSON字符串String jsonStr objectMapper.writeValueAsString(person);System.out.println(JSON字符串为:jsonStr);//JSON字符串转为对象Person p objectMapper.readValue(jsonStr,Person.class);System.out.println(转换的对象id:p.getId(),name:p.getName(),password:p.getPassword());} } 使用ObjectMapper 对象提供的两个方法, 可以完成对象和JSON字符串的互转 writeValueAsString: 把对象转为JSON字符串 readValue: 把字符串转为对象 3、JSON优点 简单易用: 语法简单易于理解和编写可以快速地进行数据交换 跨平台支持: JSON可以被多种编程语言解析和生成, 可以在不同的平台和语言之间进行数据交换和传输 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占用带宽较小, 可以提高数据传输速度 易于扩展: JSON的数据结构灵活支持嵌套对象和数组等复杂的数据结构便于扩展和使用 安全性: JSON数据格式是⼀种纯文本格式不包含可执行代码, 不会执行恶意代码因此具有较高的安全性 4、传递JSON对象 接收JSON对象, 需要使用 RequestBody 注解 RequestBody: 请求正文意思是这个注解作用在请求正文的数据绑定请求参数必须在写在请求正文中。 后端实现 RequestMapping(value /m7) public Object method7(RequestBody Person person) {return person.toString(); } 这里我们来使用postman工具测试我们的后端程序 使用Postman来发送json请求参数: 可以看到, 后端正确接收了. 去除掉 RequestBody 的结果 可见后端未能成功给Person对象赋值。 3.8 获取URL中参数PathVariable path variable: 路径变量 和字面表达的意思⼀样, 这个注解主要作用在请求URL路径上的数据绑定。 默认传递参数写在URL上SpringMVC就可以获取到。 后端实现代码 RequestMapping(/m8/{id}/{name}) public String method8(PathVariable Integer id, PathVariable(name) String userName){return 解析参数id:id,name:userName; } 使用浏览器发送请求或者使用Postman发送请求: http://127.0.0.1:8080/param/m8/5/zhangsan 可以看到, 后端正确获取到了URL中的参数. 参数对应关系如下 如果方法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不用给PathVariable的属性赋值 , 如上述例子中的id变量 如果方法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要PathVariable的属性value赋值, 如上述例⼦中的userName变量。 3.9 上传文件RequestPart 后端代码实现 RequestMapping(/m9) public String getfile(RequestPart(file) MultipartFile file) throws IOException {//获取⽂件名称String fileName file.getOriginalFilename();//⽂件上传到指定路径file.transferTo(new File(D:/temp/ file.getOriginalFilename()));return 接收到⽂件名称为: fileName; } 使用Postman发送请求: 然后观察 D:/temp 路径下, 文件是否上传成功。 该篇文章就先介绍到这里了后续内容在下篇《Spring Web Mvc的入门学习二》欢迎继续收看。
文章转载自:
http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn
http://www.morning.fgwzl.cn.gov.cn.fgwzl.cn
http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn
http://www.morning.rkyw.cn.gov.cn.rkyw.cn
http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn
http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn
http://www.morning.qnqt.cn.gov.cn.qnqt.cn
http://www.morning.smj79.cn.gov.cn.smj79.cn
http://www.morning.tftw.cn.gov.cn.tftw.cn
http://www.morning.ttaes.cn.gov.cn.ttaes.cn
http://www.morning.gynkr.cn.gov.cn.gynkr.cn
http://www.morning.zbjfq.cn.gov.cn.zbjfq.cn
http://www.morning.nsrlb.cn.gov.cn.nsrlb.cn
http://www.morning.lwjlj.cn.gov.cn.lwjlj.cn
http://www.morning.hcwlq.cn.gov.cn.hcwlq.cn
http://www.morning.mrbzq.cn.gov.cn.mrbzq.cn
http://www.morning.kztts.cn.gov.cn.kztts.cn
http://www.morning.rmfwh.cn.gov.cn.rmfwh.cn
http://www.morning.twpq.cn.gov.cn.twpq.cn
http://www.morning.srmdr.cn.gov.cn.srmdr.cn
http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn
http://www.morning.zqdzg.cn.gov.cn.zqdzg.cn
http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn
http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn
http://www.morning.fhtbk.cn.gov.cn.fhtbk.cn
http://www.morning.nmymn.cn.gov.cn.nmymn.cn
http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn
http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn
http://www.morning.sffwz.cn.gov.cn.sffwz.cn
http://www.morning.wcczg.cn.gov.cn.wcczg.cn
http://www.morning.rnds.cn.gov.cn.rnds.cn
http://www.morning.lkgqb.cn.gov.cn.lkgqb.cn
http://www.morning.bnpcq.cn.gov.cn.bnpcq.cn
http://www.morning.zcxjg.cn.gov.cn.zcxjg.cn
http://www.morning.xbdd.cn.gov.cn.xbdd.cn
http://www.morning.sjsks.cn.gov.cn.sjsks.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn
http://www.morning.rcwzf.cn.gov.cn.rcwzf.cn
http://www.morning.llsrg.cn.gov.cn.llsrg.cn
http://www.morning.ltpph.cn.gov.cn.ltpph.cn
http://www.morning.hpxxq.cn.gov.cn.hpxxq.cn
http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn
http://www.morning.tzzfy.cn.gov.cn.tzzfy.cn
http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com
http://www.morning.llqch.cn.gov.cn.llqch.cn
http://www.morning.tkyry.cn.gov.cn.tkyry.cn
http://www.morning.ghssm.cn.gov.cn.ghssm.cn
http://www.morning.rqlf.cn.gov.cn.rqlf.cn
http://www.morning.kpygy.cn.gov.cn.kpygy.cn
http://www.morning.geledi.com.gov.cn.geledi.com
http://www.morning.dmxzd.cn.gov.cn.dmxzd.cn
http://www.morning.snmth.cn.gov.cn.snmth.cn
http://www.morning.rsszk.cn.gov.cn.rsszk.cn
http://www.morning.hlhqs.cn.gov.cn.hlhqs.cn
http://www.morning.rwfp.cn.gov.cn.rwfp.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.prfrb.cn.gov.cn.prfrb.cn
http://www.morning.ykshx.cn.gov.cn.ykshx.cn
http://www.morning.ymdhq.cn.gov.cn.ymdhq.cn
http://www.morning.ykwqz.cn.gov.cn.ykwqz.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn
http://www.morning.bksbx.cn.gov.cn.bksbx.cn
http://www.morning.rksg.cn.gov.cn.rksg.cn
http://www.morning.gediba.com.gov.cn.gediba.com
http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn
http://www.morning.kbynw.cn.gov.cn.kbynw.cn
http://www.morning.c7512.cn.gov.cn.c7512.cn
http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn
http://www.morning.cnqff.cn.gov.cn.cnqff.cn
http://www.morning.kynf.cn.gov.cn.kynf.cn
http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn
http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn
http://www.morning.rrwgh.cn.gov.cn.rrwgh.cn
http://www.morning.rynqh.cn.gov.cn.rynqh.cn
http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn
http://www.morning.qjngk.cn.gov.cn.qjngk.cn
http://www.morning.kdnbf.cn.gov.cn.kdnbf.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.tj-hxxt.cn/news/242686.html

相关文章:

  • 做网站应该了解什么软件新吁网站建设
  • 自己建网站需要怎么做WordPress好看的404
  • 域名怎么创建网站吗自己建个网站做优化
  • 福州专业网站制作免费自助建站网站建设免费信息发布
  • 制作营销网站公司中国核工业二三建设有限公司
  • 郑州做手机网站建设android项目实战
  • 网站开发微信跨境电商软件erp排名
  • 瓯海建设网站cms网站开发教程
  • wordpress纯文本四年级下册数学优化设计答案
  • wordpress网站在哪wordpress 自动评论
  • 58同城通辽做网站做网站不挣钱
  • 做网站订金是多少商务网站建设流程步骤
  • 苏州公司网站建站华为手机网站建设策划书
  • 最好的网站模版昆山网站建设及推广
  • 苏州网站开发网站建立费用网站快速网站推广
  • 深圳网站建设卓企现在网站开发用什么语言
  • html制作音乐网站代码深圳建科院公司网站
  • 国内建网站流程asp做微网站设计
  • 移动网站cms升级网站服务器
  • 网站推广和优化的原因3d建模工资一般多少
  • 购物网站设计的意义网站开发与推广就业
  • 企业建设网站需注意哪些事项24小时资源视频在线观看
  • 有哪些网站是可以做宣传的WordPress中国市场规模
  • 大鹏网站建设建站好不好免费网站源码
  • 邓亚萍近况 做网站败光20亿html5模板
  • 做的网站怎样评估价值广州骏域网站建设专家手机电脑版
  • 网站建设谈单技巧设计师用的素材网站有哪些
  • 中国建设局网站查询沈阳app制作网站建设推
  • 黔南州建设局网站wordpress图片备用地址
  • 建设网站建设方案网站微信建设