MVC设计模式

12 篇文章 0 订阅
订阅专栏

目录

MVC

目的:

调用关系:

MVC优缺点

优点

缺点

实例

controller:

VipController类:

dao:

VipDao接口:定义一个save方法:

VipDaoImpl类:操作数据库

entiy:

Vip实体类:

filter:

EncodingFilter:过滤器,我这个过滤器就是防止在传输过程中的时候产生乱码:

service:

VipService:注册的方法

VipServiceImpl:(脏活累活给我干)

util:工具类

DAO:

DAOImpl:

JDBCUtil

MD5Util:


MVC

MVC是一种软件架构模式,把整个软件分为三层:Model,View,Controller

Model:模型---负责获取并数据,并且处理数据,返回给controller

        entity:数据库的实体类

        service:业务控制层,其余的话都交给service

        dao:databaseObject数据模型层:只操作数据库

View:视图---看见的页面,渲染数据,渲染页面,负责展示而且允许用户编辑来自应用程序的Model对象,View对象用来构建用户界面,与用户交互。

Controller:控制器---servlet,接请求,给出响应,负责传递数据,监听各种事件,管理其他对象生命周期

目的:

耦合度(代码之间的关联关系)分层,把程序分层,改bug的时候,不用找的眼花缭乱,方便找

降低耦合,重用性,可维护性比较高

调用关系:

View层发起请求---Controller---Servlet---Dao---Servlet---Controller---View

MVC优缺点

优点

  • 多视图共享一个模型,大大提高了代码的可重用性
  • MVC 三个模块相互独立,松耦合架构,降低耦合度
  • 控制器提高了应用程序的灵活性和可配置性
  • 有利于软件工程化管理

总之,我们通过 MVC 设计模式最终可以打造出一个松耦合+高可重用性+高可适用性的完美架构。

缺点

  • 原理复杂
  • 增加了系统结构和实现的复杂性
  • 视图对模型数据的低效率访问

MVC 并不适合小型甚至中型规模的项目,花费大量时间将 MVC 应用到规模并不是很大的应用程序,通常得不偿失,所以对于 MVC 设计模式的使用要根据具体的应用场景来决定。

实例

接下来通过一个简单的项目结构,来展示一下: 

 

controller包代表的是控制器,用来接请求,给响应

dao包代表数据模型层,只用来操作数据库

entiy包代表实体类,用来储存元素并提供get/set/构造器方法

filter包代表的是过滤器,用来筛选信息的

service包代表的是业务控制层,其余的“脏活累活都交给他干”

util包代表工具类

因为是结合实例写的,所以会有关于每个类中的一些做项目时产生的问题,就直接解决了

controller:

我们之前的做法是一个servlet就只处理一个请求

那么一个servlet能不能处理过个post请求?可以,利用反射:

VipController类:

@WebServlet("*.do")
public class VipController extends HttpServlet {
    //调用service
    private VipService vipService = new VipServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的路径
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        //截取地址:截取成eg:vip
        String method =servletPath.substring(1);
        method = method.substring(method.lastIndexOf("/")+1,method.length()-3);
        //利用反射执行vip方法
//        拿到当前类对象
        try {
            Method method1 = getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
            method1.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
    private void vip(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String gender = req.getParameter("gender");
        String name = req.getParameter("name");
        System.out.println(username+password+gender+name);
        Vip vip = new Vip(username,password,gender,name);
        int i = vipService.register(vip);
        if(i>0){
            resp.sendRedirect(req.getContextPath()+"/success.html");
        }else{
            resp.sendRedirect(req.getContextPath()+"/fail.html");
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

dao:

VipDao接口:定义一个save方法:

public interface VipDao {
    int save(Vip vip) throws Exception;
}

VipDaoImpl类:操作数据库

public class VipDaoImpl extends DAOImpl<Vip> implements VipDao {
    @Override
    public int save(Vip vip) throws Exception {
        String sql ="insert into mvc(username,password,gender,name,salt) values (?,?,?,?,?)";
        System.out.println("sql");
        return update(sql,vip.getUsername(),vip.getPassword(),vip.getGender(),vip.getName(),vip.getSalt());
    }
}

entiy:

Vip实体类:

先整个序列化,然后创建对应数据库里所有的属性。并赋予get/set方法

package mvc.entiy;

import java.io.Serializable;

public class Vip implements Serializable {
    private static final long serialVersionUID=-12389731289739127L;
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String profile;
    private String name;
    private String salt;

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }
    public Vip(){
    
    }
    
    public Vip(String username, String password, String gender, String name) {
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Vip{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", profile='" + profile + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

filter:

EncodingFilter:过滤器,我这个过滤器就是防止在传输过程中的时候产生乱码:

@WebFilter("/*")
public class EncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletResponse response = (HttpServletResponse) servletResponse;
        System.out.println("filter");
        servletRequest.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

//        放行
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

service:

VipService:注册的方法

public interface VipService {
    //注册的方法
    int register(Vip vip);
}

VipServiceImpl:(脏活累活给我干)

这里面有个不算拓展的拓展:进行密码的加密处理,毕竟密码不可能直接就存到数据库里,万一数据库被黑客或者某些人攻击或者窃取,这些密码不久流失了吗

进行密码加密:

调用在工具类里写的getSalt方法,获取盐,加到密码上

利用MD5加密处理:MD5Util.stringToMD5(密码);

再把密码存到Vip的set方法里

密码在加盐加密过后登录的时候怎么办?

登录的时候,还得按照加盐加密的形式来对比,还得需要拿着123456密码和之前加密的时候的盐再按照规则加密过后再比对

问题:我们能找到上次加密的时候用的那个盐吗? 我们需要把加密时候用的盐记录下来,登录的时候还需要使用!!!

唯一的办法,就是把盐存在数据库里

public class VipServiceImpl implements VipService {
    private VipDao dao = new VipDaoImpl();
    @Override
    public int register(Vip vip) {
        //注册的业务执行的就是保存的操作
        try {
            //密码的加密处理
            //生成盐
            String salt = MD5Util.getSalt();
            String newPassword = MD5Util.stringToMD5(vip.getPassword() + salt);
            vip.setPassword(newPassword);
//            vip.setPassword(MD5Util.stringToMD5(vip.getPassword() + MD5Util.getSalt()));
            System.out.println("service");
            vip.setSalt(salt);
            return dao.save(vip);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

util:工具类

DAO:

public interface DAO<T> {

    /**
     * 更新
     * @return
     */
    int update(String sql,Object ... args) throws Exception;

    /**
     * 通用的查询所有
     */
    List<T> getForList(String sql,Object... args) throws Exception;

    /**
     * 通用的查询单个
     */
    T get(String sql,Object...args) throws Exception;

    /**
     * 查询某一个列的值,统计
     */
    <E> E getForValue(String sql,Object ... args) throws SQLException;

}

DAOImpl:

public class DAOImpl<T> implements DAO<T> {

    private QueryRunner runner = null;
    private Class<T> type;

    /**
     * 这个构造器中在做的事:
     *  为了获取Class<T> type = Teacher.class
     */
    public DAOImpl() {
        runner = new QueryRunner(JDBCUtil.getDataSource());
        // 获得当前类的带有泛型类型的父类(运行期this其实是DAOImpl的某个子类)
        ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
        type = (Class<T>) ptClass.getActualTypeArguments()[0];
    }

    /**
     * 通用的增删改
     * @param sql
     * @param args
     * @return
     * @throws Exception
     */
    @Override
    public int update(String sql, Object... args) throws Exception {
        System.out.println("成功");
        return runner.update(sql,args);
    }

    /**
     * 根据sql语句查询多条记录
     * @param sql
     * @param args
     * @return
     * @throws Exception
     */
    @Override
    public List<T> getForList(String sql, Object... args) throws Exception {
        return runner.query(sql,new BeanListHandler<>(type),args);
    }

    /**
     * 根据sql语句查询一条记录
     * @param sql
     * @param args
     * @return
     * @throws Exception
     */
    @Override
    public T get(String sql, Object... args) throws Exception {
        return runner.query(sql,new BeanHandler<>(type),args);
    }

    /**
     * 根据sql语句查询某一列的值
     * @param sql
     * @param args
     * @return
     * @param <E>
     * @throws SQLException
     */
    @Override
    public <E> E getForValue(String sql, Object... args) throws SQLException {

        return (E) runner.query(sql,new ScalarHandler<>(),args);
    }
}

JDBCUtil

用德鲁伊来连接数据库

public class JDBCUtil {

    private static final DataSource DATA_SOURCE;

    static {
        Properties properties = new Properties();
        try {
            properties.load(JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
            DATA_SOURCE = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static DataSource getDataSource() {
        return DATA_SOURCE;
    }

}

MD5Util:

加密方法

public class MD5Util {
    /*
        这个方法的参数是原始密码,在controller通过request.getParameter("")接到的写在密码框中的密码
        返回值是经过加密处理过后的密码
        加盐 salt
        MD5+盐 加密
     */
    public static String getSalt(){
//        从我定义的一组数据中拿出几个字母或者数字或者符号当作盐
        String words="qwertyuioplkjhgfdsazxcvbnm,./;'[]~!@#$%^&*()_+-=0123456789";
        StringBuilder strb = new StringBuilder();
        for (int i = 0; i <8 ; i++) {
            //从我定义的数据中取x个字符当做盐,这里取了八个
//            随机取,生成一个0到字符串的长度的随机数
            strb.append(words.charAt((int)Math.floor(Math.random()*words.length()-1)));
        }
        return strb.toString();
    }
    public static String stringToMD5(String str){
        return DigestUtils.md5Hex(str.getBytes());
    }
}
MVC 模式
weixin_43250197的博客
12-06 603
MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View(视图) - 视图代表模型包含的数据的可视化。 Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并...
mvc设计模式
sharesb的博客
03-02 1643
什么是MVCMVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。   通常模型对象负责在数据库中存取数据。
MVC模式
qq_51554527的博客
04-03 250
MVC模式的流程
java中的springMVC模式调用过程
02-28
java中的springMVC模式调用过程,该图片显示了如果在java中使用springMVC的模式调用数据库过程。
mvc框架中文件与方法的大致调用过程
qq_34872835的博客
12-26 381
mvc m:model模型-&amp;gt;用来连接与操作 v:vew视图-&amp;gt;动态显示前端页面 c:controller控制器-&amp;gt;调用数据库增删改查方法,分配变量,渲染视图 框架中文件与方法的大致调用过程 浏览器中打开mvc项目,进入入口文件index.php (1)入口文件中执行的操作: ①分别将项目应用目录,网站根目录,调试模式debug设置为几个常量方便调用 ②加载框架启动文件 (2)启...
MVC设计模式.ppt
08-18
MVC设计模式讲解PPT材料,模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。MVC是一种软件设计模式,不仅仅应用于WEB。在日常生活中处处可以找到类似于MVC的例子。在WEB...
浅谈MVC设计模式(示例)
12-21
典型的MVC就是javabean(M)+JSP(V) + servlet(C )的模式,是对DAO模式的进一步解耦合,姑且可以简单认为就是在DAO基础上多了一个servlet(充当控制器),其目的就是为了实现M和V的分离,便于前后并行开发。 MVC模式组成...
MVC设计模式框图解
05-06
让你对MVC设计模式有一个更加深刻的认识,深入浅出的搞明白MVC
MVC设计模式云盘分享
02-25
MVC设计模式云盘分享JAVA课程资源。MVC设计模式云盘分享
mvc的数据是怎么调用的??
shushengyun4023的博客
11-19 337
mvc到底是什么,数据流向和调用到底是怎么样的箭头?? m代表model是根据数据库生成实体类 v是view是实体的各种展示 c是controller是业务需求的控制(比如我只选某些字段,存某些字段) controller层可以实例化model,也可以实例化view controller层就是那个中间的虚拟层来控制view和model的交互; controller控制数据流向mo...
MVC模式之mvc的简单使用(一)
what_where的博客
06-05 2676
MVC模式之mvc的简单使用1.什么是MVC ?2.MVC使用的目的3.如何正确使用MVC 1.什么是MVCMVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的...
Asp.net mvc 动作方法调用 另一个控制器的动作方法
BI
08-14 1万+
public ActionResult 动作方法() { var otherController = DependencyResolver.Current.GetService<另一个控制器的类名>(); var result = otherController.另一个动作方法(); return result; }
ASP.NET MVC项目——类库项目的引用
朱傲宇的技术博客
10-16 1137
在项目开发过程中,可以把数据模型等独立一个类库项目,和业务逻辑类放在一起,方便代码的测试与共享。 点击解决方案,右键,添加项目,选择C#中的类库(.net framework),这是修改命名要注意,名称要保留Library,例如dbLibrary、dcLibrary. 创建好类库项目后,需要引用到我们的项目里面去。在我们的项目里,选择引用里,点添加引用,项目,解决方案,选择我们需要的,点确定。 这样我们的类库就引用到项目里了。 ...
mvc配置加载类
热门推荐
霖霖侠
12-24 3万+
一、配置加载类1)首先我们要新建一个配置类,由于配置类经常会被用到,所以我们将他写成静态方法,我们需要俩个参数一个是我们就要加载的配置的名称,第二个就是我们要加载的文件,然后我们将它对应的文件放在config文件当中,然后在这个配置文件当中去定义我们在默认情况下的路由,在定义方法名与控制器名。 class conf { static $conf = array();//将配置文件放入$c
.net MVC接口编写和调用
user2041的博客
05-27 9110
1、引用:using System.Web.Mvc; using System.Net.Http; using System.Net.Http.Headers;2、后台接口: /// <summary> /// 根据手机号码与用户信息获得相关的房屋信息 /// </summary> /// <param name="model"></pa
SpringMVC工具类调用配置文件的属性
一个程序员的专栏
03-29 1334
SpringMVC中可以使用@Value("${tag}")的方式获取配置文件的内容,但是有些情况是获取不到值的,主要有(此处只是简单提一下,具体的可以自行搜索): 1、属性使用static或final修饰 2、类没有加上@Component(或者@service等),未注入到spring bean容器 3、类被new新建了实例,而没有使用@Autowired 4、属性名大写 以上是获取内容为Null的一些情况,在框架中使用的时候要注意规避。 工具类中使用配置文件内容,如果一般配置方式下还是取不
成功解决:java: 找不到符号 符号: 方法 getSort() 位置: 类型为com.atguigu.gulimall.product.entity.CategoryEntity的变量 menu1
做笔记\记录遇到的程序bug
03-01 630
成功解决:java: 找不到符号 符号: 方法 getSort() 位置: 类型为com.atguigu.gulimall.product.entity.CategoryEntity的变量 menu1
shiro盐加密和shiro认证
weixin_44347229的博客
12-01 154
1.盐加密 什么是盐加密: 加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。无论何时只要口令改变,随机数就改变。随机数以未加密的方式存放在口令文件中,这样每个人都可以读。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中。 如何使用盐加密: 1.首先导入pom依赖 <dependenc...
AndroidMVC设计模式
最新发布
12-23
Android中的MVC设计模式是一种软件架构模式,用于将应用程序的逻辑、数据和用户界面分离开来。它由三个主要组件组成:Model(模型)、View(视图)和Controller(控制器)。 1. Model(模型):模型负责处理应用程序的数据和业务逻辑。它包含数据的获取、存储和处理方法。在Android中,模型通常是指数据源,例如数据库、网络请求或文件系统。 2. View(视图):视图负责展示数据给用户,并接收用户的输入。它通常是指Android中的布局文件,例如XML文件,用于定义应用程序的用户界面。 3. Controller(控制器):控制器负责协调模型和视图之间的交互。它接收用户的输入,并根据输入更新模型和视图。在Android中,控制器通常是指Activity或Fragment,它们处理用户的交互,并更新模型和视图。 MVC设计模式的优点是可以实现代码的重用和模块化,使得应用程序更易于维护和扩展。它将应用程序的不同部分分离开来,使得每个部分都可以独立开发和测试。 下面是一个简单的示例代码,演示了Android中的MVC设计模式: ```java // Model public class UserModel { private String name; private int age; public UserModel(String name, int age) { this.name = name; this.age = age; } // Getters and setters // Controller public class UserController { private UserModel model; private UserView view; public UserController(UserModel model, UserView view) { this.model = model; this.view = view; } public void updateName(String name) { model.setName(name); } public void updateAge(int age) { model.setAge(age); } public void displayUser() { view.displayUser(model.getName(), model.getAge()); } } // View public class UserView { public void displayUser(String name, int age) { System.out.println("Name: " + name); System.out.println("Age: " + age); } } } // Usage UserModel model = new UserModel("John", 25); UserView view = new UserView(); UserController controller = new UserController(model, view); controller.displayUser(); // 输出:Name: John, Age: 25 controller.updateName("Mike"); controller.updateAge(30); controller.displayUser(); // 输出:Name: Mike, Age: 30 ```

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
87
原创
163
点赞
340
收藏
49
粉丝
关注
私信
写文章

热门文章

  • JS获取当前节点的兄弟/父/子节点 8634
  • Mysql多表练习题30道 6085
  • jQuery添加css样式/动画效果 3621
  • 2022-08-18 JDBC 2860
  • 2022-08-16 DQL数据库查询语言 2829

分类专栏

  • Spring 1篇
  • Mysql 10篇
  • Mybatis 1篇
  • Maven 2篇
  • JavaWeb 12篇
  • 活动 1篇
  • html+css+js 11篇
  • java学习日记 48篇
  • java面试题 2篇

最新评论

  • Mysql多表练习题30道

    weixin_42694713: 大佬第5题的答案是不是不大对啊?查出来数学、语文、c++、java都是有2个并列第一的同学,php有6个同学并列第一,但是查出来的结果怎么对不上... select c.name,t.max_score,s.id,s.name,s.age,s.gender from course c join ( select s2.c_id,max(s2.score) as max_score from scores s2 group by s2.c_id ) t on c.id=t.c_id left join scores s21 on t.max_score=s21.score left join student s on s.id=s21.s_id; 帮看下我这个对吗?

  • Mysql多表练习题30道

    小小白学Py: 最后两题我还以为我写错了,原来是题出错了

  • Mysql多表练习题30道

    小郁闷蓝天: 他这数据有一样的分

  • Mysql多表练习题30道

    新猿上路!: 第五题总共就五个课,你能查出10个人的信息,真 6啊

  • Mysql多表练习题30道

    weixin_60582592: 想问问大佬第五题 为什么后面还要leftjoin scores啊

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

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

最新文章

  • Spring简介------One
  • Mysql笔试+面试题积累(实时更新)
  • Mybatis框架
2022年87篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司阳泉企业网站建设金华网站优化推广多少钱长葛营销型网站建设推荐临沂优化多少钱达州营销网站哪家好大运百度seo乐山建设网站价格威海设计网站公司松岗网站建设报价赣州网站开发推荐随州网站推广多少钱长春品牌网站设计价格唐山设计公司网站价格运城网站推广工具哪家好鹰潭建设网站惠州关键词排名价格六安百度竞价推荐安顺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 网站制作 网站优化