Spring MVC开发及使用(8000字详解)

13 篇文章 0 订阅
订阅专栏

如何学习 Spring MVC?

学习 SPring MVC 只需要掌握以下三个功能:

  1. 连接的功能:将用户(浏览器)和 Java 程序连接起来,也就是访问一个地址能够调用到我们 Spring程序;
  2. 获取参数的功能:用户访问的时候会带一些参数,在程序中要想办法获取到参数;
  3. 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户。

目录

一,SPring MVC

1,什么是SPring MVC

MVC的定义

2,MVC 和 SPring MVC 的关系

二,SPring MVC 的创建和连接

1,创建 SPring MVC 项目

 2,@RequestMapping注解介绍

2.1 @RequestMapping是post请求还是get请求

 2.2 @GetMapping 和 @PostMapping

 三,获取参数

1,传递单个参数

2,传递对象

3,参数重命名

4,接收 JSON 对象

 5,获取 URL 中的参数

6,上传文件

 7,获取Cookie

8,获取Header

 9,获取Session

 四,返回数据

1,返回静态页面

​编辑

2,返回text/html

 五,案例练习

1,实现计算器的相加功能

2,实现登录功能


一,SPring MVC

1,什么是SPring MVC

Spring MVC是基于Servlet API构建的原始Web框架,一开始包含在Spring框架中;它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但通常被称为“Spring MVC”。

  • Spring MVC 是一个 Web 框架
  • Spring MVC 是基于 Servlet API 构建的(所以包含Servlet的基本属性)

MVC的定义

MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。

  •  Model(模型):是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象负责在数据库中存取数据;
  • View(视图):是应用程序中处理数据显示的部分;通常视图是依据模型数据创建的;
  • Controller(控制器):是应用程序中处理用户交互的部分;通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

2,MVC 和 SPring MVC 的关系

MVC 是一种思想,而 SPring MVC 是对 MVC 思想的具体实现(这里类似于IoC是一种思想,DI是对IoC思想的具体实现);总结来说,SPring MVC 是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架,既然是 Web 框架,那么当用户在浏览器中输入 URL 之后,我们的 SPring MVC 项目就可以感知到用户的请求。

二,SPring MVC 的创建和连接

SPring MVC 项目创建和 SPring Boot创建项目相同(SPring MVC 使用 SPring Boot 的方式创建),在创建的时候选择Spring Web 就相当于创建了 SPring MVC 的项目。在 SPring MVC 中使用 @RequestMapping 注解来是西安 URL 路由映射,也就是浏览器连接程序的作用

1,创建 SPring MVC 项目

Spring Boot 项目创建的详细过程可以参考之前的博文: SpringBoot项目的创建和使用_蜡笔小心眼子!的博客-CSDN博客

 接下来,创建一个TestController类,实现用户到Spring程序的互联互通,代码如下:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller//让Spring框架启动时加载该类
@ResponseBody//返回非页面数据
public class TestController {
    @RequestMapping("/sayhi")
    //该注解是路由规则 映射浏览器输入的URL
    public String sayHi() {
        return "hello world";
    }
}

 在浏览器输入“localhost:8080/sayhi"(因为Spring MVC默认情况下的端口号是8080),就可以访问到该后端方法并打印相关信息了:

 2,@RequestMapping注解介绍

@RequestMapping 是 SPring Web 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的(路由映射:指的是当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫做路由映射);@RequestMapping既可以修饰类也可以修饰方法

2.1 @RequestMapping是post请求还是get请求

使用Postman测试@RequestMapping是否可以接受 Get 或 Post请求:

测试Get:

测试Post:

所以@RequestMapping既可以接收Post请求也可以接收Get请求!

 2.2 @GetMapping 和 @PostMapping

上面测试出@RequestMapping既可以接收Post请求也可以接收Get请求,那么如果只想接收某种单一的请求该怎么办呢?此时就需要用到其他注解:@GetMapping(只接收Get请求) 和 @PostMapping(只接收Post请求)或者在@RequestMapping注解中设置参数确定接收某种请求。

Get 请求的三种写法:

//写法1
@RequestMappin("/sayhi")

//写法2
@RequestMapping(value = "/sayhi",method = RequestMethod.GET)

//写法3
@GetMapping("/sayhi")

Post 请求的两种写法:

//写法1
@RequestMapping(value = "/sayhi",method = RequestMethod.Post)

//写法2
@PostMapping("/sayhi")

 三,获取参数

1,传递单个参数

@RequestMapping("/say")
    public String say(String name) {
        return "hi " + name;
    }

 注意:在say方法中的参数的类型一定要设置成引用类型,因为设置成引用类型之后即使你在url中没有传入该参数最多查询的数据为null,如果是基本类型的话则会直接报错!

2,传递对象

@Data   //包含了lombok的多个注解
public class Userinfo {
    private int id;
    private String name;
    private int age;
}


@RequestMapping("userinfo")
    public Userinfo getUserinfo(Userinfo userinfo) {
        log.info(String.valueOf(userinfo));
        return userinfo;
    }

 注意:返回的对象在前端页面中是以JSON的格式进行展示的!

3,参数重命名

假设前端输入的参数名是username,后端不想使用该参数名,可以通过重命名的方式(使用@RequestParam注解)将其改成自己想要的参数名如:name

@RequestMapping("/sayhi2")
    public String sayHi2(@RequestParam(value = "username", required = false) String name,
                         @RequestParam(value = "pass", required = false) String password) {
        //required = false 表示url中输入的参数名不匹配时默认为null
        return "name: " + name + " password: " + password;
    }

 注意:@RequestParam注解中可以设置required变量为false(说明如果没有输入username这个变量就会返回null,默认是true,此时没有输入变量的情况下会直接报错,所以一般都会将其设置成false)

4,接收 JSON 对象

JSON对象需要通过Postman进行构造

@RequestMapping("/getjson")
    //接受 JSON 格式的数据必须加上 @RequestBody 注解
    public Object getJson(@RequestBody Userinfo userinfo) {
        log.info(String.valueOf(userinfo));
        return userinfo;
    }

 注意:获取JSON格式的数据时必须在参数名前面加上 @RequestBody否则获取到的则是默认零值!

 5,获取 URL 中的参数

@RequestMapping("/geturl/{name}/{password}")
    public String getUrl(@PathVariable String name, @PathVariable String password) {
        return "name: " + name + " password: " + password;
    }

 注意:

  • 在路由中需要用{}设置参数名;
  • 在参数名前要加上@PathVariable注解.

6,上传文件

假设此时需要上传一张图片,需要在配置文件中设置需要保存的地址然后通过Postman来进行上传

//配置文件
imgpath:D:\\Users\\date\\

//从配置文件中读取到文件的保存路径
    @Value("${imgpath}")
    private String imgpath;

    @RequestMapping("/upimg")
    public boolean upimg(Integer id, @RequestPart("img") MultipartFile file) {
        boolean result = false;
        //1.目录
        //2.图片名称(图片名不能重复)[UUID]
        //3.获取原上传图片的格式
        String fileName = file.getOriginalFilename();//得到原图片的名称
        fileName = fileName.substring(fileName.lastIndexOf("."));//得到图片后缀
        fileName = UUID.randomUUID().toString() + fileName;
        //保存图片到本地目录
        try {
            file.transferTo(new File(imgpath + fileName));
            result = true;
        } catch (IOException e) {
            log.error("图片上传失败: " + e.getMessage());
        }
        return result;
    }

 

 7,获取Cookie

获取Cookie之前需要提前在控制台(F12打开控制台)输入一个Cookie,方式如下:

//方法一:通过 HttpServletRequest 获取所有的cookie
    @RequestMapping("/cookie")
    public void getCookie(HttpServletRequest request) {
        //获取所有的cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie item: cookies) {
            log.info("CookieName: " + item.getName() + " CookieValue: " + item.getValue());
        }
    }
    //方法二:通过注解获取指定cookie
    @RequestMapping("/cookie2")
    public String getCookie2(@CookieValue("bit") String cookie) {
        return "CookieValue: " + cookie;
    }

方式一:

 方式二:

8,获取Header

    //方法一:通过 HttpServletRequest
    @RequestMapping("/header")
    public String getHeader(HttpServletRequest request) {
        return request.getHeader("User-agent");
    }
    //方法二:通过注解
    @RequestMapping("/header2")
    public String getHeader2(@RequestHeader("User-agent") String userAgent) {
        return userAgent;
    }

 方式一:

 方式二:

 9,获取Session

获取Session之前需要先存储一个Session,代码如下:

    //session的存储
    @RequestMapping("/setsess")
    public boolean setSession(HttpServletRequest request) {
        boolean result = false;
        HttpSession session = request.getSession(true);//没有就创建一个会话
        session.setAttribute("userinfo","张三");
        result = true;
        return result;
    }

获取Session代码如下:

    //方法一:通过 HttpServletRequest 获取
    @RequestMapping("/getsess")
    public String getSession(HttpServletRequest request) {
        String result = null;
        HttpSession session = request.getSession(false);
        if(session != null && session.getAttribute("userinfo") != null) {
            result = (String) session.getAttribute("userinfo");
        }
        return result;
    }
    //方法二:通过注解获取
    @RequestMapping("/getsess2")
    public String getSession2(@SessionAttribute(value = "userinfo",required = false) String userinfo) {
        return userinfo;
    }

方式一:

 方式二:

 四,返回数据

通过上面的学习,默认请求下无论是 Spring MVC 或者是 Spring Boot 返回的是视图 (xxx.html),而现在都是前后端分离的,后端只需要返给给前端数据即可,这个时候我们就需要使用@ResponseBody 注解了。

1,返回静态页面

创建前端页面 hello.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.
0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>hello,spring mvc</title>
    <script src="index.js"></script>
</head>
<body>
<h1>Hello,Spring MVC.</h1>
</body>
</html>

2,返回text/html

  @RequestMapping("/aaa")
    public String print() {
        return "<h1>Hello Spring MVC</h1>";
    }

 五,案例练习

1,实现计算器的相加功能

可使用Postman传递参数,或使用form表单的方式提交参数;

前端页面:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.
0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>计算器示例</title>
</head>
<body>
<form action="/calc">
    <h1>计算器</h1>
    数字1:<input name="num1" type="text"><br>
    数字2:<input name="num2" type="text"><br>
    <input type="submit" value=" 点击相加 ">
</form>
</body>
</html>

后端代码:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CalcController {
        @RequestMapping("/calc")
        public String calc(Integer num1,Integer num2) {
                if(num1 == null || num2 == null) {
                        return "<h1>参数错误!</h1><a href='javascript:history.go(-1);'>返回</a>";
                }
                return "<h1>结果: " + (num1 + num2) + "</h1><a href='javascript:history.go(-1);'>返回</a>";
        }
}

2,实现登录功能

前端使用ajax,后端返回json给前端;

前端代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="js/jquery-1.9.1.min.js"></script>
    <title>Document</title>
    <script>
        // ajax 提交
        function mysub(){
            // 1.判空
            var username = jQuery("#username");
            var password = jQuery("#password");
            if(jQuery.trim(username.val())==""){
                alert("请先输入用户名!");
                username.focus(); // 光标重制到此元素
                return;
            }
            if(jQuery.trim(password.val())==""){
                alert("请先输入密码!");
                password.focus(); // 光标重制到此元素
                return;
            }
            jQuery.ajax({
                url:"/user/login3",
                type:"POST",
                contentType:"application/json",
                data:JSON.stringify({"username":username.val(),
            "password":password.val()}),
                success:function(result){
                    alert(JSON.stringify(result));
                }
            });
        }
    </script>
</head>
<body>
<div style="text-align: center;">
    <h1>登录</h1>
    用户:<input id="username">
    <br>
    密码:<input id="password" type="password">
    <br>
    <input type="button" value=" 提交 " onclick="mysub()" style="margin-top: 20px;margin-left: 50px;">
</div>
</body>
</html>

后端代码:

 @RequestMapping(value = "/login")
 @ResponseBody
 public HashMap<String,Object> login(String username, String password){
     HashMap<String,Object> res = new HashMap<>();
     int succ = 200;
     if(username!=null && password!=null &&
     username.equals("admin") && password.equals("admin")){
         res.put("msg","登录成功");
     } else{
         res.put("msg","登录失败");
     }
     res.put("succ",succ);
     return res;
 }

MVC项目的理解
m0_46350939的博客
09-08 929
MVC的基本概念:  MVC是三种ASP.NET 编程模式中的一种。  MVC(Model View Controller模型-视图-控制器)。  Model(模型)表示应用程序核心(引入数据库的列表)  View(视图)显示数据(显示页面,前台代码,数据库记录)  Controller(控制器)处理输入(后台代码,接入视图,写入数据库记录) MVC解决方案的理解 MVC的解决方案讲解: 在解决方案中个人一般在Controllers里面放主控制器 然后新建立一个区域Areas放其他的控制器。 E
Spring MVC 框架搭建配置方法及详解
01-20
不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入  Spring 2.5.6:spring.jar、spring-webmvc.jar、...
Tomcat设置编码方式
chilai2005的博客
05-12 1070
默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" re...
@RequestMapping 用法详解之地址映射(转)
weixin_34163553的博客
05-30 411
引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST、PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, 而且服务器端通过request.getReader() 打出的数据里确实存在浏览器提交的数据。为了找出原因,便对参数绑定(@RequestParam、 @RequestBody、 @...
史上最全SpringMVC教程,从零开始带你深入♂学习(一)——SpringMVC快速入门、注解开发
最新发布
2401_84048338的博客
04-20 974
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
SpringMVC应用篇】SpringMVC请求参数接收处理
输入技术、输出想法
07-21 2177
2、Post方式的Body请求体传参。
@GetMapping/@PostMapping和@RequestMapping的区别
qq_36380180的博客
11-08 1433
@GetMapping是@RequsetMapping(method = RequestMethod.GET)的缩写,只接受get方式的请求 @PostMapping是@RequestMapping(method = RequestMethod.POST)的缩写,只接受post方式的请求   @RestController相当于@ResponseBody+@Controller @Rest...
@RequestMapping
weixin_42910765的博客
09-17 1282
@RequestMapping 是一个用来处理请求地址映射的注解,可以作用在类上,代表该类的所有方法的父路径,作用在方法上,代表具体的请求路径.被该注解修饰的方法会将返回值当做跳转路径,当使用异步请求的时通常我们会加上@ResponseBody注解将返回内容加入到HTTP response Body中进行返回 参数: @RequestMapping有6个请求参数: 1.value:指定请求的具体地...
@RequestMapping 用法详解
热门推荐
weixin_40009737的博客
03-21 1万+
@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上则是对方法进行注解以产生访问的路径。 类定义处:规定初步的请求映射,相对于web应用的根目录; 方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL...
Request Mapping细节详解
xiao_yan_的博客
10-02 3726
@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 (RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 ) RequestMapping注解可以作用在方法和类上 作用在类上:第一级的访问目录 作用在方法上:第二级的访问目录 细节:路径可以不编写 / 表示应用的根目录开始 细节:${ pageContext.request.contextPath }也可以
RequestMapping注解的使用和常见的GET和POST请求方式
相关项目可以查看https://gitee.com/fan-pl或https://github.com/fpl1116
01-09 1279
RequestMapping注解的使用和常见的GET和POST请求方式
Spring MVC--2.@RequestMapping 映射请求
02-08
Spring MVC--2.@RequestMapping 映射请求
spring mvc项目
01-21
springmvc测试及配置
springmvc开发文档
09-10
介绍使用springmvc。常用源码剖析
springmvc 中文手册详细带书签.pdf
08-15
springmvc 中文手册详细带书签.pdfspringmvc 中文手册详细带书签.pdfspringmvc 中文手册详细带书签.pdfspringmvc 中文手册详细带书签.pdf
springmvc中文文档
11-03
如果大家需要更多的资源,或者学习java过程又什么问题需要交流 的欢迎加群
Spring MVC数据绑定概述及原理详解
08-18
主要介绍了Spring MVC数据绑定概述及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring MVC注解式开发使用详解
08-27
本篇文章主要介绍了Spring MVC注解式开发使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
详解Spring mvc ant path的使用方法
10-19
主要介绍了详解Spring mvc ant path的使用方法的相关资料,希望大家通过本文能掌握这部分内容,需要的朋友可以参考下
spring mvc 详解
07-27
Spring MVC 是一种基于 Java开发框架,用于构建 Web 应用程序。它是 Spring 框架的一部分,提供了一种模型-视图-控制器(MVC)的架构模式,帮助开发人员将应用程序的不同方面进行解耦。 在 Spring MVC 中,应用...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • strlen和sizeof的区别 29118
  • MySQL数据库约束(主键约束,外键约束详解) 4913
  • 深入讲解printf和scanf格式控制符 4582
  • SpringBoot配置文件(properties与yml详解) 4230
  • 请求重定向(redirect)和请求转发(forward)的区别详解(看这一篇就够了) 3769

分类专栏

  • Stream流 3篇
  • Spring系列学习 13篇
  • Redis 6篇
  • SpringCloud微服务 8篇
  • RabbitMQ 5篇
  • 计算机基础学习 29篇
  • OJ题目讲解 24篇
  • MySQL学习 8篇
  • Java数据结构 7篇
  • JavaSE 10篇
  • C语言学习 9篇

最新评论

  • 请求重定向(redirect)和请求转发(forward)的区别详解(看这一篇就够了)

    qq_43765242: 什么时候需要重定向,什么时候需要请求转发呢,有没有场景

  • strlen和sizeof的区别

    dwxmxy: strlen只用于字符串吧

  • HashMap的死循环及数据覆盖问题

    卡达裘: 唉,抄都抄不清楚,列位看客,看这个吧:https://blog.csdn.net/2301_77752359/article/details/135029387

  • strlen和sizeof的区别

    江上酒123: int a[3] = {111,111,1}; printf("%d",strlen(a));这种数字的数组怎么算的呢

  • strlen和sizeof的区别

    2301_81514218: 表情包表情包表情包表情包表情包表情包

大家在看

  • CSS自定义属性
  • 618火热来袭,网络安全书单推荐 2885
  • 【纯血鸿蒙】——如何实现多端部署?(开发重点建议收藏) 751
  • Linux进程替换 && 自主shell程序 1244
  • Facebook企业户、Facebook广告投放效果不好你可能是没注意到这些问题!

最新文章

  • Optional的使用
  • Stream流的使用
  • 函数式接口及lambda表达式优化函数式接口
2024年23篇
2023年73篇
2022年29篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司广州模板制作金昌网站建设报价漳州企业网站改版多少钱铜陵网站优化推广多少钱巢湖seo公司邯郸网页设计报价遵义关键词按天收费报价吴忠百度标王玉林网络营销哪家好天水优秀网站设计公司太原建设网站公司沧州SEO按效果付费聊城企业网站建设价格梅州关键词排名包年推广杭州百度标王报价泉州百度标王价格南通网络广告推广多少钱黄冈关键词排名报价延安网站优化按天收费价格南通品牌网站设计报价莆田网站制作设计价格南山网站搜索优化多少钱舟山网页制作价格渭南网络营销报价金华如何制作网站价格惠州网站推广方案多少钱衡水seo报价西宁网站开发报价包头网站推广价格锦州网页制作推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化