JavaWeb开发(四)4.1——Spring MVC 详解

12 篇文章 2 订阅
订阅专栏

一、MVC模式与三层架构

1、MVC 模式

MVC 模式,全称为 Model-View-Controller(模型-视图-控制器)模式,它是一种软件架构模式,其目标是将软件的用户界面(即前台页面)和业务逻辑分离,使代码具有更高的可扩展性、可复用性、可维护性以及灵活性。

MVC 模式将应用程序划分成模型(Model)、视图(View)、控制器(Controller)等三层,如下图所示:
在这里插入图片描述

分层描述
Model(模型)它是应用程序的主体部分,主要由以下 2 部分组成: 实体类 Bean:专门用来存储业务数据的对象,它们通常与数据库中的某个表对应,例如 User、Student 等。业务处理 Bean:指 Service 或 Dao 的对象,专门用于处理业务逻辑、数据库访问。一个模型可以为多个视图(View)提供数据,一套模型(Model)的代码只需写一次就可以被多个视图重用,有效地减少了代码的重复性,增加了代码的可复用性。
View(视图)指在应用程序中专门用来与浏览器进行交互,展示数据的资源。在 Web 应用中,View 就是我们常说的前台页面,通常由 HTML、JSP、CSS、JavaScript 等组成。
Controller(控制器通常指的是,应用程序的 Servlet。它负责将用户的请求交给模型(Model)层进行处理,并将 Model 层处理完成的数据,返回给视图(View)渲染并展示给用户。在这个过程中,Controller 层不会做任何业务处理,它只是 View(视图)层和 Model (模型)层连接的枢纽,负责调度 View 层和 Model 层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。

2、三层架构

和 MVC 模式类似,三层架构同样将系统划分成了 3 层:

  • 表示层(UI):用来实现与用户的交互,接收用户请求,并将请求交给业务逻辑层(BLL)和数据访问层(DAL)进行处理,最后将处理结果返回给用户。
  • 业务逻辑层(BLL):起到承上启下的作用,接收表示层传递来的请求,并针对业务对数据进行处理,以实现业务目标。
  • 数据访问层(DAL):用于实现与数据库的交互和访问,例如从数据库中获取数据、保存或修改数据库中的数据等。

虽然三层架构和 MVC 模式一样,都是将应用划分成了 3 层,但它们的划分方式是不同的。
下图展示了三层架构的划分方式,我们可以很清楚地分辨出它与 MVC 模式的不同。
在这里插入图片描述
从上图可以看出,三层架构是由表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三个层次构成的,而 MVC 则是由视图(View)层、控制(Controller)层以及模型(Model)层,且它们之间并不是一一对应的。

三层架构将应用中的各个模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)等三层,各层之间采用接口相互访问,并通过实体类作为数据传递的载体。不同的实体类一般对应于数据库中不同的数据表,且实体类的属性与数据库表的字段名一一对应 。

3、MVC 模式和三层架构中各层对应关系

  • 三层架构中的表示层(UI)包含 HTML、JSP 等前台页面以及后台的 Servlet,即它相当于 MVC 模式中的 View 层 + Controller 层。
  • 三层架构中的业务逻辑层(BLL),则只包含了 Service 接口及其实现类(Servicelmpl)的代码,即它相当于 MVC 模式中 Model 层的一部分,并不包含 Dao 和实体类。
  • 三层架构中的数据访问层(DAL),则只包含了 Dao 接口及其实现类(DaoImpl)的代码,即它相当于 MVC 模式中 Model 层的一部分,并不包含 Service 和实体类。

从上面的划分方式来看,三层架构和 MVC 模式确实是不一样的,但从它们的核心来看,两者又是一样的,它们的核心都是“分层、解耦”。

二、MVC 的工作流程及优缺点

1、MVC 的工作流程

MVC 的工作流程如下:

  1. 用户发送请求到服务器;
  2. 在服务器中,请求被控制层(Controller)接收;
  3. Controller 调用相应的 Model 层处理请求;
  4. Model 层处理完毕将结果返回到 Controller;
  5. Controller 再根据 Model 返回的请求处理结果,找到相应的 View 视图;
  6. View 视图渲染数据后最终响应给浏览器。

2、MVC 的优点

MVC 模式具有以下优点:

  • 降低代码耦合性:在 MVC 模式中,三层之间相互独立,各司其职。一旦某一层的需求发生了变化,我们就只需要更改相应层中的代码即可,而不会对其他层中的代码造成影响。
  • 有利于分工合作:在 MVC 模式中,将应用系统划分成了三个不同的层次,可以更好地实现开发分工。例如,网页设计人员专注于视图(View)层的开发,而那些对业务熟悉的开发人员对 Model 层进行开发,其他对业务不熟悉的开发人员则可以对 Controller 层进行开发。
  • 有利于组件的重用:在 MVC 中,多个视图(View)可以共享同一个模型(Model),大大提高了系统中代码的可重用性。

3、MVC 的缺点

MVC 模式存在以下不足之处:

  • 增加了系统结构和实现的复杂性:对于简单的应用,如果也严格遵循 MVC 模式,按照模型、视图与控制器对系统进行划分,无疑会增加系统结构的复杂性,并可能产生过多的更新操作,降低运行效率。
  • 视图与控制器间的联系过于紧密:虽然视图与控制器是相互分离的,但它们之间联系却是十分紧密的。视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了它们的独立重用。
  • 视图对模型数据的低效率访问:视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

4、SpringMVC概述

SpringMVC 是一种基于 Java 实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,它和 Struts2 都属于表现层的框架,属于 Spring FrameWork 的后续产品,Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成 为最优秀的 MVC 框架,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

SpringMVC是一种基于Java实现MVC模型轻量级框架, 底层基于Servlet封装。

三、SpringMVC环境搭建(注解启动方式)

1、创建Maven项目

在这里插入图片描述

2、导入Maven依赖

在pom.xml中添加 Maven 依赖。

<!-- 整合springmvc框架依赖  -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

3、创建控制器层

  • 创建java文件夹,并创建控制器层。

在这里插入图片描述

  • 控制器:
package com.qizekj.controller;

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

import java.util.HashMap;
import java.util.Map;

/**
 * @author chenqun
 * @date 2023/3/18 13:03
 */
@Controller
public class QizekjController {
    /**
     * 1.@Controller作用:需要在我们的类上加上@Controller注解 标记该类是为springmvc控制类
     * 2. @RequestMapping:定义url映射
     * 3. @ResponseBody:该接口返回我们的json数据
     */
    /**
     * 访问到该请求 返回json数据
     * @return
     */
//    @RequestMapping("/getQizekj")
//    @ResponseBody
//    public Map<String, Object> getQizekj() {
//        HashMap<String, Object> result = new HashMap<>();
//        result.put("code", "200");
//        result.put("msg", "ok");
//        //访问该接口的 返回json数据
//        return result;
//    }
    @RequestMapping("/getQizekj")
    @ResponseBody
    public String getQizekj() {
        return "{code:'200',msg:'ok'}";
    }

}


4、创建配置类

package com.qizekj.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author chenqun
 * @date 2023/3/18 13:07
 */
@Configuration
@ComponentScan("com.qizekj.controller")
public class SpringMVCConfig {
    /**
     * 1.@Configuration  定义SpringMVCConfig.xml配置文件
     * 2.需要将我们的控制类注入到ioc容器 @ComponentScan("com.qizekj.springmvc")
     * @ComponentScan("com.qizekj.springmvc")将该包下所有的类 注入到IOC容器种
     * 3.在springmvc原理 所有请求过来先达到DispatcherServlet 分发具体控制类 方法执行
     */
}

5、注册配置类

package com.qizekj.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * @author chenqun
 * @date 2023/3/18 13:09
 */
public class ServletInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        // 注册我们的 springmvc config 配置类
        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext
                = new AnnotationConfigWebApplicationContext();
        annotationConfigWebApplicationContext.register(SpringMVCConfig.class);
        return annotationConfigWebApplicationContext;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

6、maven tomcat插件运行

  • pom.xml中添加tomcat插件代码
<build>
    <plugins>
        <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat8-maven-plugin</artifactId>
                <version>3.0-r1655215</version>
                <configuration>
                    <port>85</port>
                    <path>/</path>
                    <ignorePackaging>true</ignorePackaging>
                </configuration>
            </plugin>
    </plugins>
</build>
  • 如果下载不了tomcat8插件就要添加本地仓库:
<pluginRepositories>
   <pluginRepository>
       <id>alfresco-public</id>
       <url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
   </pluginRepository>
   <pluginRepository>
       <id>alfresco-public-snapshots</id>
       <url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshots</url>
       <snapshots>
           <enabled>true</enabled>
           <updatePolicy>daily</updatePolicy>
       </snapshots>
   </pluginRepository>
   <pluginRepository>
       <id>beardedgeeks-releases</id>
       <url>http://beardedgeeks.googlecode.com/svn/repository/releases</url>
   </pluginRepository>
</pluginRepositories>
  • 配置Tomcat执行:

在这里插入图片描述

  • 执行Tomcat:

在这里插入图片描述

  • 运行结果:

在这里插入图片描述

  • 通过浏览器访问:

http://localhost:8081/getQizekj
在这里插入图片描述

7、搭建环境常见问题

  • 扫包范围填写错误 @ComponentScan(“com.qizekj.controller”)
  • 在控制类没有加上@Controller 导致接口访问404

四、SpringMVC环境搭建(xml启动方式)

1、Maven依赖

<!-- 整合springmvc框架依赖  -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

2、定义控制器

package com.qizekj.controller;

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

/**
 * @author chenqun
 * @date 2023/3/18 15:51
 */
@Controller
public class QizekjController {
    /**
     * 1.@Controller作用:需要在我们的类上加上@Controller注解 标记该类是为springmvc控制类
     * 2. @RequestMapping:定义url映射
     * 3. @ResponseBody:该接口返回我们的json数据
     */
    /**
     * 访问到该请求 返回json数据
     * @return
     */

    @RequestMapping("/getQizekj")
    @ResponseBody
    public String getQizekj() {
        return "{code:'200',msg:'ok'}";
    }
}

3、创建spring-mvc.xml并配置扫描

  • 创建resources文件夹,并创建spring-mvc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--1.配置spring创建容器时要扫描的包-->
    <context:component-scan base-package="com.qizekj.controller"></context:component-scan>
    <!--2.配置spring开启注解mvc 的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

4、web.xml配置

  • 所有请求过来都是先达到 DispatcherServlet
  • springmvc 是基于 Servlet 封装的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <!-- SpringMVC前端控制器 -->
  <!-- 配置springmvc DispatcherServlet -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--运用的是java反射机制加载-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--servlet初始化时需要加载-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!--此处配置是为了让springmvc DispatcherServlet优先加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!--客户端发送所有请求都会先达到DispatcherServlet 静态资源 控制器类中-->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

5、外部tomcat运行

  • 需要将这些jar包存入 tomcat 的 lib目录,不然会报找不到jar包的错

在这里插入图片描述

  • 运行结果:

在这里插入图片描述

SpringMVC是一款基于Java语言的Web框架
东方小神龙的博客
05-13 441
SpringMVC是一款基于Java语言的Web框架,它是Spring框架的一部分,用于开发Web应用程序。模型表示应用程序的数据,视图表示应用程序的用户界面,控制器负责处理用户请求并将其转发到适当的模型和视图。SpringMVC的应用场景非常广泛,它可以用于开发各种类型的Web应用程序,例如电子商务网站、社交网络、博客、论坛等等。总之,SpringMVC是一款非常强大的Web框架,它提供了许多有用的功能和灵活的配置选项,使得开发人员可以快速地构建Web应用程序。
java web项目添加spring MVC框架
10-29
java web项目添加spring MVC框架
第一章:Spring Web MVC入门——深入浅出学Spring Web MVC
uyehgdhg的专栏
07-24 2329
Spring Web MVC是什么 是一种轻量级的、基于MVC的 Web应用框架
java_web项目添加spring_MVC框架(JSTL表达式)
Appleseses的博客
11-19 306
java web项目添加spring MVC框架 今天花了点时间将之前整理的spring MVC项目的搭建做了下笔记,也把之前的做的个Demo一起放上来,给学习spring MVC框架的朋友一个引导吧!接下来我们就开始吧: 1. 添加spring类库(如下图所示): 在这里我们添加了Spring 2.5 Core Libraries、Spring 2.5 AOP Librari...
SpringMVC框架应用到JavaWeb中总结
huantianxidi123的博客
03-05 319
1.修改web.xml文件 2.修改dispacher-servlet.xml文件 我的项目中把jsp文件放在了WEB-INF同级目录jsp中,这里的文件前缀是相对于此xml文件的上级目录的,我的目录是这样: 3.编jsp请求文件,即发出请求的jsp: 在jsp中加入一个表单: 标签中action后面跟着的是按下submit按钮后的请求发送的地址,即相应的Ctroller 4.编Ctrol...
Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf
06-18
Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf
JavaWeb开发——JSP技术
03-24
此文章包含JSP简介、JSP运行原理、JSP标签与标签库及其使用、JSP的内置对象与作用域对象、EL表达式和MVC模式的简介,...适用于任何学习JavaWeb开发中,需要了解JSP技术的人群,希望这篇文章能对大家的学习有所帮助!
Linux下基于MVCJavaWeb开发
07-22
资源名称:Linux下基于MVCJavaWeb开发内容简介:《LINUX下基于MVCJAVAWeb开发》基于实际的JavaWeb设计流程,详尽讲解了Linux环境下MyEclipse开发工具的使用方法和基于MVC设计模式的JavaWeb开发方法。主要内容...
JavaWeb开发PPT详解
12-29
Java Web是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的...在Java中,动态web资源开发技术统称为Java Web。
JavaWeb开发详解
07-22
资源名称:JavaWeb开发详解内容简介:《Java Web开发详解:XML XSLT Servlet JSP深入剖析与实例应用》共分4部分,从XML、Servlet、JSP和应用的角度向读者展示了Java Web开发中各种技术的应用,循序渐进地引导读者快速...
Spring Framework最新版本 spring-webmvc-5.2.9.RELEASE
10-13
避免可能会绕过CVE-2015-5211对RFD攻击的保护,具体取决于通过使用jsessionid路径参数使用的浏览器。
spring-webmvc-4.1.4.RELEASE.jar
09-10
spring-webmvc-4.1.4.RELEASE.jar
spring-webmvc-5.0.8.RELEASE.jar
12-20
spring-webmvc-5.0.8.RELEASE.jar
spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE
02-25
最新版spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE
spring-webmvc.jar
01-24
spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载
Java EE使用Spring MVC框架编Web应用程序
玄衣手记
11-06 483
java ee使用spring mvc框架,maven框架编一个简单的web应用程序
Java Web添加SpringMVC的支持和使用
weixin_44543271的博客
12-04 442
一、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发Spring Web MVC也是要简化我们日常Web开发的。 SpringMVC工作原理图解请参考下面链接: https://blog.csdn.net/lin1094201572/article/details/81262264 Ja
Spring MVC 4.1.x 相关知识(一)Spring MVC的配置
iteye_13412的博客
08-18 83
 一、引言     本系列基于Spring 4.1.5,大部分内容来至Spring MVC 4.1.x的Reference Document。本文假设你已经对Spring IOC容器有一定了解,并对Spring MVC有初步认识。本文的ServletServlet 3.0规范,可能会有一些和Servlet 2.x不太一样的。   二、Spring MVC的初始化 1. Context...
springmvc组件配置简介与使用
Amour恋空的博客
10-08 498
SpringMVC的执行流程 ①用户发送请求至前端控制器DispatcherServlet。 ②DispatcherServlet收到请求调用HandlerMapping处理器映射器。 ③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 ④DispatcherServlet调用HandlerAdapter处理器适配器。 ⑤HandlerAdapter经过适配调用具体的处理器(Controller,也
javaweb实现登录注册基于(spring mvc
最新发布
06-06
1. 创建Maven项目,并添加Spring MVC依赖。 2. 在web.xml中配置DispatcherServlet,并指定Spring MVC配置文件的位置。 3. 创建Controller类,并使用@Controller注解进行标记。 4. 在Controller类中编处理登录...

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

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

热门文章

  • Java截取String字符串的几种方法 58519
  • mysql 表分区、按时间函数分区、删除分区、自动添加表分区 14119
  • Java每天/每周定时执行任务 9540
  • 报错:Error creating bean with name 'log'loginController' 解决 6574
  • 小程序调用扫描二维码功能并跳转到二维码指定的路径 5966

分类专栏

  • JavaWeb开发 12篇
  • Java多线程 3篇
  • java的IO流 3篇
  • Java集合框架 4篇
  • 信息系统项目管理师知识点总结 12篇
  • MySQL数据库 8篇
  • java开发 27篇
  • 项目部署及运维 5篇
  • JS开发 2篇
  • 开发--报错解决 5篇
  • 小程序开发 3篇

最新评论

  • Java之线程详解(二)——线程安全概述、线程安全问题发生的原因分析、synchronized锁

    qq_37944457: 这里的静态全局变量一定会有线程安全问题(先于对象初始化,只有一份),但并不代表其他“全局变量”就一定会有线程安全问题;比如常用的类实例变量,这种只会在单例模型下才会有线程安全问题,即多线程操作同一个对象的全局变量(犹如静态全局变量一样,但现实中我们很少这样干,比如我们常用的POJO,每个属性都是全局变量,但从来没人会考虑这个会不会有线程安全问题,因为每次使用都是新建实例对象,不存在多线程操作同一对象变量的情况。 至于共享变量可能有线程安全问题时,项目上一般使用ThreadLocal解决。

  • Java常用类系列(一)——包装类(Byte、Boolean、Short、Character、Integer、Long、Float、Double)

    weixin_57449907: 是lang包吧

  • 报错java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52

    nashang_HQG: 呜呜呜呜!终于解决了表情包

  • Java生成微信小程序二维码

    dai_bing_bing_: 二维码生成了,但是对应的参数缺失了,这个是生成传入的参数 {"is_hyaline":false,"auto_color":true,"page":"pages/doctor/item","scene":"id=20"}

  • Java监听器添加

    吟诗作对歌一曲: 你建的是web项目吗?如果是的可以参考https://jingyan.baidu.com/article/6c67b1d6bcc38e2787bb1e96.html这个来生成webxml文件

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • JavaWeb开发(四)4.3——Spring MVC 与其他技术的整合
  • JavaWeb开发(四)4.2——Spring MVC 的请求与响应、restful
  • JavaWeb开发(三)3.7——Spring AOP(面向切面编程) 详解
2023年10篇
2022年31篇
2021年2篇
2020年7篇
2019年33篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吟诗作对歌一曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 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 网站制作 网站优化