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

邯郸网站建设选哪家好iis 网站 端口

邯郸网站建设选哪家好,iis 网站 端口,一款app的开发成本,php旅游类网站开发毕业设计先说说这篇文章看完你能学习到什么吧 1#xff1a;spring-web是什么原理以及组成#xff0c;2#xff1a;spring-web的搭建#xff08;以普通tomcat服务器做基础#xff09;#xff0c;3#xff1a;敲黑板 1#xff1a;spring-web是什么原理以及组成 spring-web是sp…先说说这篇文章看完你能学习到什么吧 1spring-web是什么原理以及组成2spring-web的搭建以普通tomcat服务器做基础3敲黑板 1spring-web是什么原理以及组成 spring-web是spring中提供给用户搭建web服务的框架其中的spring-webmvc是其核心部分webmvc采用MVC架构M是model层V是view层C是controller层。那我们从这三个层次去讲解这部分。首先我们用一整套访问请求来讲解原理 1-用户请求到服务器。 用户作为使用者是用游览器客户端输入网址通过域名解析访问到我们的域名主机然后域名主机会找到相应对的发布的服务java服务php服务等我们是java服务器部署在tomcat上那么tomcat就会根据程序上下文application context或者说它里面的Server.xml找到Host节点里面的Context节点找到项目的发布目录。 2-spring web的映射请求地址到相应的controllerC。 tomcat调用java服务的Servletjava第一道防线就是DispatcherServlet中央调度器。DispatcherServlet请求handlerMapping返回相应的执行器handlerDispatcherServlet通过HandlerAdapter调用相应的handler执行器。执行器handler根据url找到相应的处理器调用controller 3-controllerc进行数据处理返回数据modelAndViewM给DispatcherServlet。 controller接下来会进行数据处理比如调用service去保存或者查询数据service去通过dao进行持久化数据然后返回数据给controllercontroller把数据和需要返回的url给DispatcherServlet也就是返回modelAndView对象 4-ViewResolve进行视图解析返回viewV DispatcherServlet拿到modelAndView去找ViewResolver解析视图返回view给DispatcherServlet。 5-DispatcherServlet响应数据视图渲染 DispatcherServlet拿到view数据返回给tomcattomcat相应游览器请求并让其渲染视图。 这就是一整套请求和渲染流程采用mvc架构 2spring-web的搭建以普通tomcat服务器做基础 1-环境自己去建一个普通web项目 【jdk8】,【spring-web5.2.3】【spring-webmvc5.2.3】,【intellj idea2018】 2-WEB-INF的web.xml配置程序入口 a:配置DispatcherServlet中央调度器 ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0servletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-name!-- 这里有的地方叫dispatcher-servlet.xml都一样--   param-value/WEB-INF/spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern//url-pattern/servlet-mapping /web-app b:spring-mvc.xml配置HandlerMapping和HandlerAdapter和ViewResolver和Controller以及bean的扫描路径这里多配置了个访问拦截器。各位可以针对访问权限进行拦截 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:phttp://www.springframework.org/schema/p xmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocation http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsddefault-lazy-inittrue!--mvc注解配置方便我们使用Autowired等注解--context:annotation-config /!--自动注册注解驱动 包扣handlerMapping和handlerAdapter的注册--mvc:annotation-driven /!--使Spring支持自动检测组件如注解的Controller,这个注解包含了上面annotation-config--context:component-scan base-packagecom.wanzi.controller /context:property-placeholder locationWEB-INF/config.properties/bean idviewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolver p:prefix/ p:suffix.jsp /!-- spring3.1之前用的是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter,可以自动扫描bean上面有Controller--!--bean classorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping /--!--lt;!ndash; 启动 Spring MVC 的注解功能完成请求和注解 POJO 的映射 ndash;gt;--!--bean classorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter--!--property namemessageConverters--!--list--!--bean classorg.springframework.http.converter.StringHttpMessageConverter/bean--!--/list--!--/property--!--/bean--!-- spring3.1之后用的是RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可以自动扫描bean上面有Controller--bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping /!-- 启动 Spring MVC 的注解功能完成请求和注解 POJO 的映射 --bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namemessageConverterslistbean classorg.springframework.http.converter.StringHttpMessageConverter/bean/list/property/bean!-- 异常处理handler --bean idexceptionHandler classcom.wanzi.handler.ExceptionHandler /!-- 文件上传设置 --bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolverproperty namemaxUploadSizevalue104857600/value/property/bean!--静态资源--mvc:resources mapping/script/plugins/** location/script/plugins//!-- 拦截器配置 --mvc:interceptors!-- 系统端校验 --mvc:interceptormvc:mapping path/** /bean idsysAuthInterceptor classcom.wanzi.interceptor.SysAuthInterceptor/bean/mvc:interceptor/mvc:interceptors /beans c:配置程序上下文 ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0context-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/applicationContext.xml/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenerservletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern//url-pattern/servlet-mapping /web-app d:applicationContext.xml配置数据库连接池和持久层框架以及事务 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:aophttp://www.springframework.org/schema/aopxmlns:txhttp://www.springframework.org/schema/txxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdcontext:component-scan base-packagecom.wanzi /context:property-placeholder location/WEB-INF/config.properties/bean iddataSource classorg.apache.commons.dbcp2.BasicDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl value${mysql_url}/property nameusername value${mysql_username}/property namepassword value${mysql_password}/property namevalidationQuery valueselect database()//bean!-- 配置数据库这里选用hibernate框架连接,这个包再orm的hibernate中--bean idsessionFactory classorg.springframework.orm.hibernate5.LocalSessionFactoryBeanproperty namedataSource refdataSource/property namehibernatePropertiespropsprop keyhibernate.show_sqltrue/propprop keyhibernate.dialectorg.hibernate.dialect.MySQLDialect/prop!--千万别配置这个这个属性不生效prop keyhbm2ddl.autocreate/prop--!--这里自动更新和创建表--prop keyhibernate.hbm2ddl.autoupdate/prop/props/propertyproperty namepackagesToScan valuecom.wanzi.entity//bean!-- 这里注入hibernateTemplate,给传统的dao作为参数使用,可以使用Repository中Autowired注入--bean idhibernateTemplate classorg.springframework.orm.hibernate5.HibernateTemplateproperty namesessionFactory refsessionFactory/property/beanbean idtransactionManager classorg.springframework.orm.hibernate5.HibernateTransactionManagerproperty namesessionFactory refsessionFactory//beantx:annotation-driven transaction-managertransactionManager/ /beans e:config.properties的数据 mysql_urljdbc:mysql://127.0.0.1:3306/spring-web?characterEncodingutf-8zeroDateTimeBehaviorconvertToNulltinyInt1isBitfalseuseOldAliasMetadataBehaviortrue mysql_usernameroot mysql_password 3-commons-loggings配置这个log4j.properties必须放在classes下也就是src那一层 log4j.rootLoggerinfo,A#系统输出 log4j.appender.Aorg.apache.log4j.ConsoleAppender log4j.appender.A.TargetSystem.out log4j.appender.A.layoutorg.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern%d{yyyy-MM-dd HH:mm:ss} [%t:%p] %c %m%n 4-写个controller(C) package com.wanzi.controller.sys;import com.wanzi.annotation.UnAuth; import com.wanzi.entity.SysAdmin; import com.wanzi.service.SysAdminService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;Controller UnAuth Slf4j RequestMapping(/sys/test) public class TestController {Autowiredprivate SysAdminService sysAdminService;RequestMapping(value /test)ResponseBodypublic Object test(){log.error(权限检验通过);return test;}RequestMapping(value /index)public String index(Model model){log.error(权限检验通过);SysAdmin sysAdmin sysAdminService.getSysAdminById(1);model.addAttribute(test,我是测试传参);return /sys/test/index;} }5-写个ModelM上文的sysAdminService a:service package com.wanzi.service;import com.wanzi.dao.SysAdminDao; import com.wanzi.entity.SysAdmin; import com.wanzi.template.SimpleHibernateTemplate; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;/*** 系统管理员service*/ Service Transactional public class SysAdminService {Autowiredprivate SysAdminDao sysAdminDao;private SimpleHibernateTemplateSysAdmin, Integer sysAdminDaoH;Autowiredpublic void setSessionFactory (SessionFactory sessionFactory) {sysAdminDaoH new SimpleHibernateTemplate(sessionFactory, SysAdmin.class);}/*** 根据id获取系统管理员信息* * param id* void*/public SysAdmin getSysAdminById (int id) {return sysAdminDao.getSysAdminById(id); // return this.sysAdminDaoH.get(id);}}b:dao 这里dao我用了两种方法一种是用系统HibernateTemplate实现增删改查一种是用Session实现增删改查。 b-1:HibernateTemplate方式 上面的applicationContext.xml中有配置名字为hibernateTemplate的bean传统方式就是操作这个类实现增删改查下面是一个例子Dao package com.wanzi.dao;import com.wanzi.entity.SysAdmin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository;Repository public class SysAdminDao {Autowiredprivate HibernateTemplate hibernateTemplate;public SysAdmin getSysAdminById (int id) {return hibernateTemplate.get(SysAdmin.class,id);}}b-2:灵活的Session 上文中service操作的SimpleHibernateTemplate是自定义的dao package com.wanzi.template;import java.io.Serializable; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; /** R* Hibernate的范型基类.* * 可以在service类中直接创建使用.也可以继承出DAO子类,在多个Service类中共享DAO操作.* 参考Spring2.5自带的Petlinc例子,取消了HibernateTemplate.* 通过Hibernate的sessionFactory.getCurrentSession()获得session,直接使用Hibernate原生API.** param T DAO操作的对象类型* param PK 主键类型*/ public class SimpleHibernateTemplateT, PK extends Serializable {protected SessionFactory sessionFactory;protected ClassT entityClass;public SimpleHibernateTemplate(SessionFactory sessionFactory, ClassT entityClass) {this.sessionFactory sessionFactory;this.entityClass entityClass;}/*** 采用Autowired按类型注入SessionFactory,当有多个SesionFactory的时候Override本函数.* 这个注解会生效*/Autowiredpublic void setSessionFactory(final SessionFactory sessionFactory) {this.sessionFactory sessionFactory;}public Session getSession() {return sessionFactory.getCurrentSession();}/*** 按id获取对象.*/public T get(final PK id) {return (T) getSession().get(entityClass, id);} } c:entity这里不需要写建表语句通过spring hibernate的hibernate.hbm2ddl.auto自动更新维护表 package com.wanzi.entity;import lombok.Data;import java.util.Date;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;/*** table : sys_admin # 系统管理员数据表* * author zwm*/ Data Table(name sys_admin) Entity public class SysAdmin {/*** 管理员状态0、停用*/public static final int STATUS_DISABLE 0;/*** 管理员状态1、启用*/public static final int STATUS_ENABLE 1;IdGeneratedValue(strategy GenerationType.IDENTITY)private int id;Column(name name)private String name;Column(name password)private String password;Column(name md5_password)private String md5Password;/*** 使用者*/Column(name real_name)private String realName;Column(name status)private int status;Column(name phone_num)private String phoneNum;Column(name remark)private String remark;Column(name last_login_time)private Date lastLoginTime;Column(name last_login_ip)private String lastLoginIp;}d:扩展知识 d-1:和数据库mysql相连java采用线程池现如今java有很多好用线程池本例子采用dbcp2 在applicationContext.xml中有配置dataSource其他的数据源还有 Apache Commons DBCPApache Commons DBCP数据库连接池是Apache软件基金会的一个项目提供了一个稳定和可靠的连接池。它是许多Java应用程序的首选选择。 HikariCPHikariCP是一个轻量级、高性能的数据库连接池被广泛认为是目前性能最好的连接池之一。它专注于快速的连接获取和释放适用于高并发的应用程序。 C3P0C3P0是一个开源的数据库连接池具有许多配置选项可用于调整连接池的行为。它是一种稳定的连接池被许多Java应用程序使用。 Tomcat JDBC PoolTomcat JDBC Pool是Apache Tomcat项目的一部分提供了一个性能良好的连接池。它设计用于与Tomcat集成但也可以作为独立的连接池使用。 H2 DatabaseH2 Database是一个嵌入式数据库它包含了一个内置的连接池适用于小型应用程序和测试用例。 DruidDruid是一个开源的数据库连接池具有监控和统计功能可以帮助开发人员分析数据库连接的使用情况和性能。Bitronix Transaction ManagerBitronix是一个支持分布式事务的连接池和事务管理器适用于需要强大事务支持的应用程序。 二、当讨论连接词连接池时可以通过生活中的一个例子来形象地理解它们的区别 例子自来水供应 Apache Commons DBCP 可以类比为一个城市自来水公司它负责向一座城市供水。这个水公司连接池管理着水的分配和流动确保城市里的每户家庭都可以获得他们所需的水数据库连接。虽然它提供了稳定和可靠的供水服务但它的运作可能不一定是最高效的因为它可能需要一些时间来响应不同地区的需求。 HikariCP 就像是一家高效的自来水公司它专注于提供最快速的自来水供应。它的供水管道连接池设计得非常流畅可以迅速响应城市中不同区域的需求确保每家每户都能够获得所需的水。这家自来水公司以其高性能和响应速度而著称。 C3P0 可以比作另一家自来水公司它提供了许多不同的自来水供应计划可以根据客户的需求进行定制。这家公司提供了灵活的供水方案允许客户根据他们的特定需求来调整水的流量和质量。 Tomcat JDBC Pool 好像是一个城市自来水部门的子部门专门为城市的一座公共建筑提供自来水服务。虽然它与整个城市的自来水系统相互关联但它也可以独立运行提供高效的供水服务。 H2 Database 就像是一个小村庄的自来水泵站它供应水给村里的居民。虽然规模较小但它是自足的提供了足够的水供应来满足小村庄的需求。Druid 就像是一个有水质检测设备的自来水公司它不仅提供水供应还监控水的质量并提供统计数据以帮助客户了解他们的水消耗情况。 d-2: 事务 Transactional注解是Spring框架中用于声明式事务管理的关键注解这个方法可以作用于类和方法作用于类是整个类都开启该方法作用于方法的话该方法会被归纳到事务管理事务管理有以下几个特性原子性,一致性,隔离性,持久性。原子性表示一个事务里所有操作要么全部成功要么全部失败因为最后都是事务管理统一提交的。一致性表示事务提交前后数据库状态一致。隔离性表示多个事务提交是并行互不影响。持久性表示事务一旦提交修改数据会永久保存。那么对于事务用户有哪些要注意的呢第一事务不能作用于非public的方法第二事务注解Transactional不能被作用于多个方法调用也就是外部没有这个注解调用有这个注解的方法那么事务是无法开启第三方法开启了事务但是你自己捕捉了异常那么事务就不会被异常回滚. 6-写个拦截器 这个拦截器会优先拦截所有请求只有return true才会允许给相应controller处理 package com.wanzi.interceptor;import java.lang.reflect.Method;import com.wanzi.annotation.MenuAuth; import com.wanzi.annotation.UnAuth; import com.wanzi.bean.SysLoginAdmin; import com.wanzi.entity.SysAdmin; import com.wanzi.service.SysAdminService; import com.wanzi.util.WebUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 系统端权限登录校验*/ Slf4j public class SysAuthInterceptor extends HandlerInterceptorAdapter {Autowiredprivate SysAdminService adminService;/*** This implementation always returns {code true}.*/Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {MenuAuth menuAuth null;log.error(后端权限开始判断);HandlerMethod handlerMethod (HandlerMethod) handler;Class clasz handlerMethod.getBean().getClass();//不需要检验授权的可以跳过if (clasz.isAnnotationPresent(UnAuth.class)) {return true;}//通过匹配找到url匹配的需要检验的方法注解MenuAuthMethod[] methods clasz.getMethods();for (Method method : methods) {if (method.isAnnotationPresent(RequestMapping.class)) {if (method.isAnnotationPresent(UnAuth.class)) {RequestMapping mapping method.getAnnotation(RequestMapping.class);for (String str : mapping.path()) {if (request.getRequestURI().indexOf(str) ! -1) {return true;}}} else if (method.isAnnotationPresent(MenuAuth.class)) { // 菜单校验获取菜单RequestMapping mapping method.getAnnotation(RequestMapping.class);for (String str : mapping.path()) {if (request.getRequestURI().indexOf(str) ! -1) {menuAuth method.getAnnotation(MenuAuth.class);break;}}if (menuAuth null) {for (String str : mapping.value()) {if (request.getRequestURI().indexOf(str) ! -1) {menuAuth method.getAnnotation(MenuAuth.class);break;}}}if (menuAuth ! null) {break;}}}}log.error(进入权限判断);SysLoginAdmin loginAdmin WebUtils.getSysLoginAdmin();if (loginAdmin ! null) {SysAdmin sysAdmin adminService.getSysAdminById(loginAdmin.getId());if (sysAdmin ! null) {if (sysAdmin.getStatus() SysAdmin.STATUS_DISABLE) {throw new Exception(账号已停用请联系管理员);}if (menuAuth ! null !loginAdmin.checkMenuAuth(request.getRequestURI(), menuAuth)) {throw new Exception(无访问权限);}return true;}throw new Exception(账号不存在请重新登录);}throw new Exception(账号未登录请重新登录);} }7-写个异常处理器 package com.wanzi.handler;import java.util.HashMap; import java.util.Map;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView;/*** 异常处理*/ Slf4j public class ExceptionHandler implements HandlerExceptionResolver {Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) {try {MapString, Object model new HashMapString, Object();model.put(exception, ex);model.put(uri, request.getRequestURI());// ajax处理数据if (isAjaxRequest(request)) {return null;}// 其他处理跳转统一异常页面if(request.getRequestURI().startsWith(/m)){return new ModelAndView(exception/error_mobile, model);}return new ModelAndView(exception/error, model);} catch (Exception e) {log.error(e.getMessage(),e);}return null;}/*** 是否ajax请求*/public static boolean isAjaxRequest(HttpServletRequest request) {return request.getHeader(x-requested-with) ! null request.getHeader(x-requested-with).trim().toLowerCase().equals(xmlhttprequest);}}3敲黑板
http://www.hkea.cn/news/14563932/

相关文章:

  • 网站建设哪里学app推广团队
  • 建设银行银行号查询网站海外免费网站推广有哪些
  • 属于c2c的网站有哪些做公司网站报价
  • 杭州网络科技网站腾讯云网站建设视频教程
  • 怎么套模板做网站h5网站要多久
  • 求个国外在线网站白河网站制作
  • 国家企业信息公示信息官网网站原创内容优化
  • cnetos 做网站服务网络推广的优化方法
  • 台州网站推广山西大同专业网站建设制作价格
  • flash cms网站源码网站攻击一般有那些
  • 个人网页制作与网站建设网站建设有模板自己能制作
  • 建设一个跟京东一样的网站网页制作培训学费
  • 宁波网站设计相信荣胜网络建e网卧室设计效果图
  • 海门建设厅网站网站建设包含项目
  • 做页面设计的网站网站开发工程师中级高级
  • 网站销售策划网站的版式
  • 外贸网址建站朋友圈广告怎么投放
  • 网站的关键词在哪里设置深圳网站商城建设
  • 搜狗网站优化软件论坛网站制作
  • 网站建设如何算成本快照网站
  • 全运会网站建设方案欧莱雅的网络营销策划方案
  • 开发企业小程序公司永康好口碑关键词优化
  • 点了网站域名会跳转外网域名
  • 网站建设毕业设计文献综述深圳网站设计比较好的公司有哪些
  • 网站开发用什么编辑语言好网站服务器暂时不可用怎么办
  • 做封面的免费网站wordpress文404
  • 做网站被骗预付款怎么办网站远程图片
  • 网站建设管理职责dw做汽车网站
  • 站长之家99网站开发与维护专业前景
  • 南宁手机平台网网站建设网页设计与制作课程评价