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

做箱包外贸哪个网站好都网站建设

做箱包外贸哪个网站好,都网站建设,wordpress rest 某类,怎么设置公司网站在我的Spring Data Solr教程的较早部分中#xff0c;我们实现了一个简单的搜索功能#xff0c;该功能用于搜索待办事项的信息。 我们搜索功能的当前实现将所有搜索结果显示在一个页面中。 对于大多数现实生活中的应用程序而言#xff0c;这不是可行的解决方案#xff0c;因… 在我的Spring Data Solr教程的较早部分中我们实现了一个简单的搜索功能该功能用于搜索待办事项的信息。 我们搜索功能的当前实现将所有搜索结果显示在一个页面中。 对于大多数现实生活中的应用程序而言这不是可行的解决方案因为搜索结果的数量可能太大以致搜索功能不再可用。 这篇博客文章描述了如何使用Spring Data Solr对查询结果或搜索功能进行分页从而为我们提供了解决该问题的方法。 这篇博客文章分为五个部分 第一部分描述了如何手动请求正确的页面并讨论了查询方法的不同返回类型。 第二部分描述了如何通过向存储库中添加自定义方法来获取搜索结果计数。 第三部分介绍了如何对查询方法的搜索结果进行分页。 第四部分教我们如何对动态查询的搜索结果进行分页。 第五部分也是最后一部分描述了如何配置和使用一种称为Web分页的技术。 注意 这些博客文章提供了其他信息可帮助我们理解此博客文章中描述的概念 使用Maven运行Solr Spring Data Solr教程Solr简介 Spring Data Solr教程配置 Spring Data Solr教程CRUD几乎 Spring Data Solr教程将自定义方法添加到单个存储库 Spring Data Solr教程动态查询 Spring Data Solr教程排序 让我们开始吧。 理论纪要 在开始对示例应用程序进行修改之前我们将简要介绍分页背后的理论。 本节分为两个小节如下所述 第一部分描述了如何指定查询的分页选项。 第二部分描述查询方法的不同返回类型。 让我们继续。 指定想要的页面 使用的分页选项是通过使用实现Pageable接口的PageRequest类指定的。 以下是典型的分页要求 获取属于单个页面的查询结果。 使用单个字段的值对查询结果进行排序时获取属于单个页面的查询结果。 使用多个字段的值对查询结果进行排序并且不同字段的排序顺序相同时获取属于单个页面的查询结果。 使用多个字段的值对查询结果进行排序并且不同字段的排序顺序不同时获取属于单个页面的查询结果。 让我们找出如何创建满足给定要求的PageRequest对象。 首先我们必须创建一个PageRequest对象该对象指定我们要获取属于单个页面的查询结果。 我们可以使用以下代码创建PageRequest对象 //Get the query results belonging to the first page when page size is 10. new PageRequest(0, 10) 其次我们必须创建一个PageRequest对象该对象指定当使用单个字段的值对查询结果进行排序时我们希望获得属于单个页面的结果。 我们可以使用以下代码创建PageRequest对象 /Gets the query results belonging to the first page when page size is 10. //Query results are sorted in descending order by using id field. new PageRequest(0, 10 Sort.Direction.DESC, id) 第三我们必须创建一个PageRequest对象该对象指定当使用多个字段对查询结果进行排序并且不同字段的排序顺序相同时我们希望获取属于单个页面的结果。 我们可以使用以下代码创建PageRequest对象 //Gets the query results belonging to the first page when page size is 10. //Query results are sorted in descending order by using id and description fields. new PageRequest(0, 10 Sort.Direction.DESC, id, description) 第四我们必须创建一个PageRequest对象该对象指定当使用多个字段对查询结果进行排序并且不同字段的排序顺序不同时要获取属于单个页面的查询结果。 我们可以使用以下代码创建该对象 //Gets the query results belonging to the first page when page size is 10. //Query results are sorted in descending order order by using the description field //and in ascending order by using the id field. Sort sort new Sort(Sort.Direction.DESC, description).and(new Sort(Sort.Direction.ASC, id)) new PageRequest(0, 10, sort); 现在我们知道如何创建新的PageRequest对象。 让我们继续讨论查询方法的不同返回类型。 确定查询方法的返回类型 当查询方法使用分页时它可以具有两种返回类型。 这些返回类型将在下面进行描述我们将假定模型类的名称为TodoDocument 当我们对分页元数据感兴趣时查询方法的返回类型必须为Page TodoDocument 获取有关Page接口的更多信息该接口声明用于获取分页元数据的方法。 当我们对分页元数据不感兴趣时​​查询方法的返回类型应为List TodoDocument 。 获取搜索结果计数 在开始对查询的搜索结果进行分页之前我们必须实现一个函数该函数用于获取与给定搜索条件匹配的待办事项条目数。 此数字是必需的以便我们可以在前端实现分页逻辑。 我们可以按照以下步骤实现此功能 将自定义方法添加到我们的存储库。 此方法用于返回搜索结果计数。 使用我们的自定义存储库方法创建一个新的服务方法。 在以下小节中将更详细地描述这些步骤。 向我们的存储库添加自定义方法 目前如果不向存储库中添加自定义方法就无法创建计数查询。 我们可以按照以下步骤进行操作 创建一个定制的存储库界面。 实现定制存储库接口。 修改实际的存储库界面。 让我们继续前进找出实现方法。 创建自定义存储库界面 我们可以按照以下步骤创建自定义存储库接口 创建一个名为CustomTodoDocumentRepository的接口。 将count方法添加到创建的接口。 该方法将使用的搜索词作为方法参数。 CustomTodoDocumentRepository接口的源代码如下所示 public interface CustomTodoDocumentRepository {public long count(String searchTerm);//Other methods are omitted }实施自定义存储库界面 我们可以按照以下步骤实现自定义存储库接口 创建一个名为TodoDocumentRepositoryImpl的类并实现CustomTodoDocumentRepository接口。 用Repository批注对类进行批注。 将SolrTemplate字段添加到类中并使用Resource注释对字段进行注释。 实现count方法。 让我们仔细看一下count方法的实现。 我们可以通过执行以下步骤来实现此方法 获取给定搜索词的单词。 通过调用私有的constructSearchConditions方法来构造使用的搜索条件并将搜索词的单词作为方法参数传递。 通过创建新的SimpleQuery对象来创建执行的查询并将创建的Criteria对象作为构造函数参数传递。 通过调用SolrTemplate类的count方法获取搜索结果计数并将创建的SimpleQuery对象作为方法参数传递。 返回搜索结果计数。 TodoDocumentRepositoryImpl类的源代码如下所示 import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.Criteria; import org.springframework.data.solr.core.query.SimpleQuery; import org.springframework.stereotype.Repository;import javax.annotation.Resource;Repository public class TodoDocumentRepositoryImpl implements CustomTodoDocumentRepository {Resourceprivate SolrTemplate solrTemplate;Overridepublic long count(String searchTerm) {String[] words searchTerm.split( );Criteria conditions createSearchConditions(words);SimpleQuery countQuery new SimpleQuery(conditions);return solrTemplate.count(countQuery);}private Criteria createSearchConditions(String[] words) {Criteria conditions null;for (String word: words) {if (conditions null) {conditions new Criteria(title).contains(word).or(new Criteria(description).contains(word));}else {conditions conditions.or(new Criteria(title).contains(word)).or(new Criteria(description).contains(word));}}return conditions;}//Other methods are omitted. }修改实际存储库界面 通过扩展CustomTodoRepositoryInterface我们可以使自定义count方法对我们的存储库用户可见。 TodoDocumentRepository的源代码如下所示 public interface TodoDocumentRepository extends CustomTodoRepository, SolrCrudRepositoryTodoDocument, String {//Repository methods are omitted. } 使用自定义存储库方法 我们可以按照以下步骤使用创建的存储库方法 修改TodoIndexService接口。 实现修改后的接口。 下面将更详细地描述这些步骤。 注意 我们还必须进行其他更改但是由于它们与Spring Data Solr不相关因此在此不再赘述。 修改服务接口 我们必须通过向其添加一个新的countSearchResults方法来修改TodoIndexService接口。 此方法将使用的搜索词作为方法参数并返回搜索结果计数。 TodoIndexService接口的源代码如下所示 public interface TodoIndexService {public long countSearchResults(String searchTerm);//Other methods are omitted. }实施修改后的接口 通过执行以下步骤我们可以实现countSearchResults方法 将countSearchResults方法添加到RepositoryTodoIndexService类。 通过调用自定义存储库方法获取搜索结果计数然后返回搜索结果计数。 RepositoryTodoIndexService类的相关部分如下所示 import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Service public class RepositoryTodoIndexService implements TodoIndexService {Resourceprivate TodoDocumentRepository repository;Overridepublic long countSearchResults(String searchTerm) {return repository.count(searchTerm);}//Other methods are omitted. }分页查询方法的查询结果 使用查询方法创建查询时可以按照以下步骤对查询结果进行分页 将新的Pageable参数添加到查询方法。 此参数指定获取的页面的详细信息。 通过将新的Pageable参数添加到TodoIndexService接口的search方法来修改服务层。 让我们开始吧。 修改存储库界面 我们可以通过向查询方法添加Pageable参数来向我们的存储库添加分页支持该方法用于构建执行的查询。 让我们看一下查询方法的声明。 从方法名称查询生成 通过使用从方法名策略生成查询来创建执行的查询时我们必须向TodoDocumentRepository接口的findByTitleContainsOrDescriptionContains方法添加Pageable参数。 我们的存储库界面的这些源代码如下所示 import org.springframework.data.domain.Pageable; import org.springframework.data.solr.repository.SolrCrudRepository;import java.util.List;public interface TodoDocumentRepository extends CustomTodoDocumentRepository, SolrCrudRepositoryTodoDocument, String {public ListTodoDocument findByTitleContainsOrDescriptionContains(String title, String description, Pageable page); }命名查询 使用命名查询时我们必须在TodoDocumentRepository接口的findByNamedQuery方法中添加Pageable参数。 TodoDocumentRepository接口的源代码如下所示 import org.springframework.data.domain.Pageable; import org.springframework.data.solr.repository.Query; import org.springframework.data.solr.repository.SolrCrudRepository;import java.util.List;public interface TodoDocumentRepository extends CustomTodoDocumentRepository, SolrCrudRepositoryTodoDocument, String {Query(name TodoDocument.findByNamedQuery)public ListTodoDocument findByNamedQuery(String searchTerm, Pageable page); }Query注释 使用Query批注创建执行的查询时我们必须在TodoDocumentRepository接口的findByQueryAnnotation方法中添加Pageable参数。 我们的存储库界面的源代码如下所示 import org.springframework.data.domain.Pageable; import org.springframework.data.solr.repository.Query; import org.springframework.data.solr.repository.SolrCrudRepository;import java.util.List;public interface TodoDocumentRepository extends CustomTodoDocumentRepository, SolrCrudRepositoryTodoDocument, String {Query(title:*?0* OR description:*?0*)public ListTodoDocument findByQueryAnnotation(String searchTerm, Pageable page); } 修改服务层 我们必须对示例应用程序的服务层进行以下修改 将一个Pageable参数添加到TodoIndexService接口的search方法。 实现新的search方法。 注意 我们还必须进行其他更改但是由于它们与Spring Data Solr不相关因此在此不再赘述。 TodoIndexService接口的源代码如下所示 import org.springframework.data.domain.Pageable; import java.util.List;public interface TodoIndexService {public ListTodoDocument search(String searchTerm, Pageable page);//Other methods are omitted. } 我们可以通过对RepositoryIndexService类的search方法进行以下更改来使用修改后的查询方法 通过调用存储库的查询方法来获取分页查询结果并将使用的搜索词和Pageable对象作为方法参数传递。 返回查询结果。 让我们来看一下search方法的不同实现。 从方法名称查询生成 通过使用从方法名策略生成查询来构建查询时可以使用TodoDocumentRepository接口的findByTitleContainsOrDescriptionContains方法获取属于特定页面的查询结果。 RepositoryTodoIndexService类的相关部分如下所示 import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Service public class RepositoryTodoIndexService implements TodoIndexService {Resourceprivate TodoDocumentRepository repository;Overridepublic ListTodoDocument search(String searchTerm, Pageable page) {return repository.findByTitleContainsOrDescriptionContains(searchTerm, searchTerm, page);}//Other methods are omitted }命名查询 当我们使用命名查询来构建执行的查询时可以使用TodoDocumentRepository接口的findByNamedQuery方法获取属于特定页面的搜索结果。 RepositoryTodoIndexService类的相关部分如下所示 import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Service public class RepositoryTodoIndexService implements TodoIndexService {Resourceprivate TodoDocumentRepository repository;Overridepublic ListTodoDocument search(String searchTerm, Pageable page) {return repository.findByNamedQuery(searchTerm, page);}//Other methods are omitted }Query注释 使用Query批注构建查询时可以通过调用TodoDocumentRepository接口的findByQueryAnnotation方法来获取属于特定页面的搜索结果。 RepositoryTodoIndexService类的源代码如下所示 import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Service public class RepositoryTodoIndexService implements TodoIndexService {Resourceprivate TodoDocumentRepository repository;Overridepublic ListTodoDocument search(String searchTerm, Pageable page) {return repository.findByQueryAnnotation(searchTerm, page);}//Other methods are omitted }分页动态查询的查询结果 我们可以按照以下步骤对动态查询的查询结果进行分页 将Pageable参数添加到我们的自定义存储库的search方法中。 通过将Pageable参数添加到TodoIndexService接口的search方法来修改服务层。 在以下小节中将更详细地描述这些步骤。 更改自定义存储库 我们必须向我们的自定义存储库添加分页支持。 我们可以按照以下步骤进行操作 通过将Pageable参数添加到其search方法来修改自定义存储库接口。 通过向其添加分页支持来更改search方法的实现。 让我们继续前进找出实现方法。 更改自定义存储库界面 我们必须在CustomTodoDocumentRepository接口中声明的search方法中添加Pageable参数。 我们的自定义存储库界面的源代码如下所示 import org.springframework.data.domain.Pageable;import java.util.List;public interface CustomTodoDocumentRepository {public ListTodoDocument search(String searchTerm, Pageable page);//Other methods are omitted. }实施自定义存储库方法 我们的下一步是向search方法的实现中添加分页支持。 通过执行以下步骤我们可以实现TodoDocumentRepositoryImpl类的search方法 获取搜索词的单词。 通过调用私有createSearchConditions方法并将搜索词的单词作为方法参数来构造使用的搜索条件。 通过创建新的SimpleQuery对象来创建执行的查询并将创建的Criteria对象作为构造函数参数传递。 通过调用SimpleQuery类的setPageRequest方法来设置查询的分页选项。 将Pageable对象作为方法参数传递。 通过调用SolrTemplate类的queryForPage方法获取搜索结果。 将创建的查询和期望的返回对象的类型作为方法参数传递。 通过调用Page接口的getContent方法来返回搜索结果。 TodoDocumentRepositoryImpl类的源代码如下所示 import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.Criteria; import org.springframework.data.solr.core.query.SimpleQuery; import org.springframework.stereotype.Repository;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Repository public class TodoDocumentRepositoryImpl implements CustomTodoDocumentRepository {Resourceprivate SolrTemplate solrTemplate;Overridepublic ListTodoDocument search(String searchTerm, Pageable page) {String[] words searchTerm.split( );Criteria conditions createSearchConditions(words);SimpleQuery search new SimpleQuery(conditions);search.setPageRequest(page);Page results solrTemplate.queryForPage(search, TodoDocument.class);return results.getContent();}private Criteria createSearchConditions(String[] words) {Criteria conditions null;for (String word: words) {if (conditions null) {conditions new Criteria(title).contains(word).or(new Criteria(description).contains(word));}else {conditions conditions.or(new Criteria(title).contains(word)).or(new Criteria(description).contains(word));}}return conditions;}//Other methods are omitted. } 使用自定义存储库 在使用修改后的存储库方法之前我们必须对示例应用程序的服务层进行以下更改 将一个Pageable参数添加到TodoIndexService接口的search方法。 实现search方法。 下面将更详细地描述这些步骤。 注意 我们还必须进行其他更改但是由于它们与Spring Data Solr不相关因此在此不再赘述。 修改服务接口 我们必须向TodoIndexService接口的search方法添加Pageable参数。 TodoIndexService的源代码如下所示 import org.springframework.data.domain.Pageable; import java.util.List;public interface TodoIndexService {public ListTodoDocument search(String searchTerm, Pageable page);//Other methods are omitted. }实施服务接口 当使用Spring Data Solr的标准API进行构建时我们可以通过调用自定义存储库的search方法并将用户搜索词和Pageable对象作为方法参数来获取查询结果。 RepositoryTodoIndexService类的源代码如下所示 import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List;Service public class RepositoryTodoIndexService implements TodoIndexService {Resourceprivate TodoDocumentRepository repository;Overridepublic ListTodoDocument search(String searchTerm, Pageable page) {return repository.search(searchTerm, page);}//Other methods are omitted. }使用网页分页 一个问题仍然没有答案。 问题是 在何处指定用于对查询的查询结果进行分页的分页选项 我们将使用称为Web pagination的技术来创建查询的分页选项。 此技术基于称为PageableArgumentResolver的自定义参数解析器类。 此类解析来自HTTP请求的分页信息并使向控件方法添加Pageable方法参数成为可能。 本节描述了如何在示例应用程序中配置和使用此技术。 它分为三个小节 第一部分描述了如何配置PageableArgumentResolver类。 第二小节介绍了如何使用它。 最后一个小节讨论了Web分页的利弊。 让我们找出如何在示例应用程序中使用此技术。 组态 本小节描述了如何配置PageableArgumentResolver类该类将用于从HTTP请求中提取分页选项。 让我们找出如何通过使用Java配置和XML配置来做到这一点。 Java配置 我们可以通过对ExampleApplicationContext类进行以下更改来添加自定义参数自变量解析器 重写WebMvcConfigurerAdapter类的addArgumentResolvers方法。 通过创建新的PageableArgumentResolver对象并将创建的对象添加到作为方法参数给出的参数解析器列表中实现addArgumentResolvers方法。 ExampleApplicationContext类的相关部分如下所示 import org.springframework.data.web.PageableArgumentResolver; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.mvc.method.annotation.ServletWebArgumentResolverAdapter;import java.util.List;//Annotations are omitted. public class ExampleApplicationContext extends WebMvcConfigurerAdapter {Overridepublic void addArgumentResolvers(ListHandlerMethodArgumentResolver argumentResolvers) {PageableArgumentResolver pageableArgumentResolver new PageableArgumentResolver();argumentResolvers.add(new ServletWebArgumentResolverAdapter(pageableArgumentResolver));}//Other methods are omitted. }XML配置 我们可以通过对exampleApplicationContext.xml文件进行以下更改来配置自定义参数解析程序 使用mvc命名空间的arguments-resolvers元素配置自定义参数解析器。 在arguments-resolvers元素内配置PageableArgumentResolver bean。 exampleApplicationContext.xml文件的相关部分如下所示 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:mvchttp://www.springframework.org/schema/mvcxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdmvc:annotation-drivenmvc:argument-resolversbean idpageagleArgumentResolver classorg.springframework.data.web.PageableArgumentResolver//mvc:argument-resolvers/mvc:annotation-driven!-- Configuration is omitted. -- /beans 用法 使用前面介绍的方法之一配置PageableArgumentResolver类后可以将Pageable方法参数添加到控制器方法中。 TodoController类的search方法就是一个很好的例子。 其源代码的相关部分如下所示 import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*;import javax.annotation.Resource; import java.util.List;Controller public class TodoController {//Fields are omitted.RequestMapping(value /api/todo/search/{searchTerm}, method RequestMethod.GET)ResponseBodypublic ListTodoDTO search(PathVariable(searchTerm) String searchTerm, Pageable page) {//Implementation is omitted.}//Other methods are omitted. } 但是将Pageable参数添加到controller方法还不够。 我们仍然必须将分页选项添加到HTTP请求。 这是通过在请求中添加特殊的请求参数来完成的。 这些请求参数描述如下 page.page request参数指定所请求的页面。 page.size请求参数指定页面大小。 page.sort请求参数指定用于对查询结果进行排序的属性。 page.sort.dir请求参数指定排序顺序。 让我们花点时间思考一下Web分页的利弊。 利弊 在决定在我们的应用程序中使用它之前我们应该意识到Web分页的优缺点。 让我们找出它们是什么。 优点 使用网页分页有一个主要好处 将分页选项从Web层转移到存储库层是一件容易的事。 我们要做的就是配置自定义参数解析器将Pageable参数添加到控制器方法并使用特定的请求参数发送分页选项。 这比处理代码中的分页选项和手动创建PageRequest对象要简单得多。 缺点 下面介绍了使用Web分页的缺点 Web分页在Web层和Spring Data之间创建依赖关系。 这意味着存储库层的实现细节会泄漏到应用程序的上层。 尽管纯粹主义者可能会声称这是一个巨大的错误但我不同意他们的观点。 我认为抽象应该使我们的生活更轻松而不是更艰难。 我们还必须记住 泄漏抽象定律规定所有非平凡抽象在某种程度上都是泄漏的。 Web分页的一个真正的缺点是只有在使用单个字段对搜索结果进行排序的情况下我们才能使用它。 尽管对于大多数用例来说这是完全可以的但在某些情况下这会成为问题。 如果发生这种情况我们必须手动处理分页选项。 摘要 现在我们已将分页搜索结果添加到示例应用程序中。 本教程教会了我们以下内容 我们学习了创建新的PageRequest对象。 我们了解到可以从两个不同的选项中选择查询方法的返回类型。 我们学习了对查询方法和动态查询的查询结果进行分页。 我们知道如何使用网页分页并且知道它的优缺点。 我的Spring Data Solr教程的下一部分描述了如何向所有Spring Data Solr存储库添加自定义方法。 PS此博客文章的示例应用程序可在Github上获得 查询方法和动态查询 。 参考 Spring Data Solr教程 Petri Kainulainen博客上我们JCG合作伙伴 Petri Kainulainen的分页 。 翻译自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-pagination.html
http://www.zqtcl.cn/news/11277/

相关文章:

  • 无货源电商软件白山镇seo快速排名
  • 网站推广办法友情链接网
  • 海外站推广php网站开发小程序
  • 网站集约化建设标准网站开发保密协议 doc
  • 企业建立企业网站有哪些优势?wordpress snow 3d
  • 阿里巴巴国际贸易网站推广工具宾馆网站建设
  • 设计做网站怎么找网站建设
  • 盐城市建设局网站打不开字体网站
  • 做违法网站程序员犯法吗c 网站开发案例代码
  • 许昌 网站建设网页设计与网站建设的区别
  • 网站后台里有网页代码没邯郸的互联网公司
  • 天津网站建设制作设计寻找网站建设 网站外包
  • 河北省建设厅报名网站商务推广
  • 网站建设中哪些最重要性天水做网站的
  • 做智能网站系统下载地址邢台168交友最新信息
  • 快乐麻花网站源码美橙网站建设怎么做
  • vps服务器中的网站不显示图片企业数字化管理平台
  • 微信如何绑定网站查看虚拟币行情的网站怎么做
  • 池州网站公司青海旅游网站建设方案
  • 广州化妆品网站制作在线设计logo字体
  • 深圳网站建设制作培训wordpress土豆插件
  • wap网站和app开发百度网盘在线登录
  • 做网站接雕塑业务溧阳网站建设哪家好
  • 鲜花网站数据库建设杭州手机软件开发
  • php做的网站缺点有没有帮忙做网站
  • 网站qq临时会话不需要添加好友做网站哪个公司最
  • 企业推广类网站网站建设中的主要功能
  • delphi做网站开发女生电子商务专业适合做什么
  • 个人网站推广手段有哪些百度竞价是什么工作
  • 沈阳网站托管公司wordpress去除手机版页面