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

企业网站建设需要哪些资料信息如何在大学网站做宣传

企业网站建设需要哪些资料信息,如何在大学网站做宣传,互联网网站开发,定州住房和城乡建设局网站文章目录HTTP请求和HTTP响应从0手写一个Web服务器#xff0c;看看能有多累人使用Servlet实现一个服务器#xff0c;看看多简单Serlvet的创建Servlet的运行Servlet的其他问题Servlet这么爽#xff0c;我们简单地探索一下它的原理JSP跟Servlet合作啦#xff0c;我们来看一下他… 文章目录HTTP请求和HTTP响应从0手写一个Web服务器看看能有多累人使用Servlet实现一个服务器看看多简单Serlvet的创建Servlet的运行Servlet的其他问题Servlet这么爽我们简单地探索一下它的原理JSP跟Servlet合作啦我们来看一下他们能干点啥MVC框架其实你已经学完了SpringMVC从应用入手我们看看SpringMVC是怎样执行的从原理入手我们看看SpringMVC是怎样执行的SpringMVC常用注解参考文章廖雪峰入门Servlet参考文章MVC参考文章SpringMVCHTTP请求和HTTP响应 HTTP请求这是通过Socket.InputStream进来的信息 GET / HTTP/1.1 Host: www.sina.com.cn User-Agent: Mozilla/5.0 xxx Accept: */* Accept-Language: zh-CN,zh;q0.9,en-US;q0.8HTTP响应这是通过Socket.OutputStream出去的信息 HTTP/1.1 200 OK Content-Type: text/html Content-Length: 21932 Content-Encoding: gzip Cache-Control: max-age300html...网页数据...从0手写一个Web服务器看看能有多累人 这么多代码也太棒了吧童鞋这只是打印了一个HelloWorld这么多代码会不会过分复杂了 public class Server {public static void main(String[] args) throws IOException {ServerSocket ss new ServerSocket(8080); // 监听指定端口System.out.println(server is running...);for (;;) {Socket sock ss.accept();System.out.println(connected from sock.getRemoteSocketAddress());Thread t new Handler(sock);t.start();}} }class Handler extends Thread {Socket sock;public Handler(Socket sock) {this.sock sock;}public void run() {try (InputStream input this.sock.getInputStream()) {try (OutputStream output this.sock.getOutputStream()) {handle(input, output);}} catch (Exception e) {try {this.sock.close();} catch (IOException ioe) {}System.out.println(client disconnected.);}}private void handle(InputStream input, OutputStream output) throws IOException {System.out.println(Process new http request...);var reader new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));var writer new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));// 读取HTTP请求:boolean requestOk false;String first reader.readLine();if (first.startsWith(GET / HTTP/1.)) {requestOk true;}for (;;) {String header reader.readLine();if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕break;}System.out.println(header);}System.out.println(requestOk ? Response OK : Response Error);if (!requestOk) {// 发送错误响应:writer.write(HTTP/1.0 404 Not Found\r\n);writer.write(Content-Length: 0\r\n);writer.write(\r\n);writer.flush();}else {// 发送成功响应:String data htmlbodyh1Hello, world!/h1/body/html;int length data.getBytes(StandardCharsets.UTF_8).length;writer.write(HTTP/1.0 200 OK\r\n);writer.write(Connection: close\r\n);writer.write(Content-Type: text/html\r\n);writer.write(Content-Length: length \r\n);writer.write(\r\n); // 空行标识Header和Body的分隔writer.write(data);writer.flush();}} }使用Servlet实现一个服务器看看多简单 Serlvet的创建 这就写完了对的我已经通过pw.writer将h1Hello, world!/h1输出了剩下的HTTP响应部分让Serlvet帮我补齐就行了。 WebServlet(urlPatterns /) public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 设置响应类型:resp.setContentType(text/html);// 获取输出流:PrintWriter pw resp.getWriter();// 写入响应:pw.write(h1Hello, world!/h1);// 最后不要忘记flush强制输出:pw.flush();} }因此在JavaEE平台上处理TCP连接解析HTTP协议这些底层工作统统扔给现成的Web服务器去做我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的JavaEE提供了Servlet API我们使用Servlet API编写自己的Servlet来处理HTTP请求Web服务器实现Servlet API接口实现底层功能 当然你要别人帮你干活那肯定要指定一下谁来帮你干活所以还要简单的配置一下Serlvet pom.xml文件 project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.itranswarp.learnjava/groupId !--可修改--artifactIdweb-servlet-hello/artifactId !--可修改--packagingwar/packaging !--打包类型不是jar而是war表示Java Web--version1.0-SNAPSHOT/versionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetjava.version17/java.version/propertiesdependenciesdependencygroupIdjakarta.servlet/groupIdartifactIdjakarta.servlet-api/artifactIdversion5.0.0/versionscopeprovided/scope !--表示编译时使用但不会打包到.war文件中因为运行期web服务器本身已经提供了Servlet API相关的jar包--/dependency/dependenciesbuildfinalNamehello/finalName !--可修改Web App叫hello--/build /projectServlet的运行 省流工程打包后放入tomcat的webapps启动tomcat就可以访问了 运行Maven命令mvn clean package在target目录下得到一个hello.war文件这个文件就是我们编译打包后的Web应用程序。 普通的Java程序是通过启动JVM然后执行main()方法开始运行。但是Web应用程序有所不同我们无法直接运行war文件必须先启动Web服务器再由Web服务器加载我们编写的HelloServlet这样就可以让HelloServlet处理浏览器发送的请求。 无论使用哪个服务器只要它支持Servlet API 5.0因为我们引入的Servlet版本是5.0我们的war包都可以在上面运行。这里我们选择使用最广泛的开源免费的Tomcat服务器。 把hello.war复制到Tomcat的webapps目录下然后切换到bin目录执行startup.sh或startup.bat启动Tomcat服务器 $ ./startup.sh Using CATALINA_BASE: …/apache-tomcat-10.1.x Using CATALINA_HOME: …/apache-tomcat-10.1.x Using CATALINA_TMPDIR: …/apache-tomcat-10.1.x/temp Using JRE_HOME: …/jdk-17.jdk/Contents/Home Using CLASSPATH: …/apache-tomcat-10.1.x/bin/bootstrap.jar:… Tomcat started. 在浏览器输入http://localhost:8080/hello/即可看到HelloServlet的输出 Servlet的其他问题 Servlet版本问题 要务必注意servlet-api的版本。4.0及之前的servlet-api由Oracle官方维护引入的依赖项是javax.servlet:javax.servlet-api编写代码时引入的包名为import javax.servlet.*;而5.0及以后的servlet-api由Eclipse开源社区维护引入的依赖项是jakarta.servlet:jakarta.servlet-api编写代码时引入的包名为import jakarta.servlet.*;对于很多仅支持Servlet 4.0版本的框架来说例如Spring 5我们就只能使用javax.servlet:4.0.0版本这一点针对不同项目要特别注意。 Servlet路径问题 上述项目中为啥路径是/hello/而不是/ 因为一个Web服务器允许同时运行多个Web App而我们的Web App叫hello因此第一级目录/hello表示Web App的名字后面的/才是我们在HelloServlet中映射的路径。省流第一个\是给Tomcat中全部项目的第二个\是才是给hello项目的 Servlet这么爽我们简单地探索一下它的原理 整体的一个交互就是zei个样子的啦 Web Server让Servlet运行起来的Web服务器例如Tomcat。 Servlet ContainerServlet容器就是用来装Servlet的。 Servlet以init、service、destroy为生命周期 在走进来看看Servlet Container中的Serlvet一个工程有多个Class每个Class就是一个Serlvet。像这里的就有三个Serlvet啦。 WebServlet(urlPatterns /hello) public class HelloServlet extends HttpServlet {... }WebServlet(urlPatterns /signin) public class SignInServlet extends HttpServlet {... }WebServlet(urlPatterns /) public class IndexServlet extends HttpServlet {... }并且通过Dispatcher来选择路径指定的Servlet 我们来看看一个Servlet里面会有什么拿HelloServlet看看只列出了常用方法 WebServlet(urlPatterns /hello) public class HelloServlet extends HttpServlet {//在 Servlet 的生命期中仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。init();//缺省服务 如果 HTTP 请求方法为 GET则缺省情况下就调用 doGet() 否则调用doPostservice(HttpServletRequest req, HttpServletResponse resp);//执行动作doGet/doPost二选一doGet(HttpServletRequest req, HttpServletResponse resp);//执行动作doGet/doPost二选一doPost(HttpServletRequest req, HttpServletResponse resp);//destroy() 方法仅执行一次即在服务器停止且卸装Servlet 时执行该方法。destroy()} }什么你还想看doGet/doPost做了什么动作自己去上面看实例吧 JSP跟Servlet合作啦我们来看一下他们能干点啥 省流JSP就是Servlet通过Servlet JSP分离前后端代码实际上是将一个Servlet任务分给了两个Servlet去完成。 好了好了上面我们小打小闹完成了HelloWord现在我们要大打大脑把整个html网页输出。就像把www.hao123.com那个网页输出那样。我们来看看代码。 WebServlet(urlPatterns /) public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 设置响应类型:resp.setContentType(text/html);// 获取输出流:PrintWriter pw resp.getWriter();// 写入响应:pw.write(html);pw.write(body);pw.write(h1Welcome, name !/h1);pw.write(/body);pw.write(/html);// 最后不要忘记flush强制输出:pw.flush();} }其实能看我这篇文章的童鞋也大概知道前端跟后端的区别了上述这段代码明显就是前端跟后端整合在一起了这样好吗这样不好。那就把它给分开咯。 下面换一个实例来演示如何使用JSPServlet将前后端分离。 省流下面这个实例就是通过一个forward()函数从Servlet跳转到JSP完成前后端分离 首先编写两个JavaBean public class User {public long id;public String name;public School school; }public class School {public String name;public String address; }在UserServlet中我们可以从数据库读取User、School等信息然后把读取到的JavaBean先放到HttpServletRequest中再通过forward()传给user.jsp处理 WebServlet(urlPatterns /user) public class UserServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 假装从数据库读取:School school new School(No.1 Middle School, 101 South Street);User user new User(123, Bob, school);// 放入Request中:req.setAttribute(user, user);// forward给user.jsp:req.getRequestDispatcher(/WEB-INF/user.jsp).forward(req, resp);} }在user.jsp中我们只负责展示相关JavaBean的信息不需要编写访问数据库等复杂逻辑 % page importcom.itranswarp.learnjava.bean.*% %User user (User) request.getAttribute(user); % html headtitleHello World - JSP/title /head bodyh1Hello % user.name %!/h1pSchool Name:span stylecolor:red% user.school.name %/span/ppSchool Address:span stylecolor:red% user.school.address %/span/p /body /html我们在浏览器访问http://localhost:8080/user请求首先由UserServlet处理然后交给user.jsp渲染 从上面这个例子不难看出项目整个运行流程 需要展示的User被放入HttpServletRequest中以便传递给JSP因为一个请求对应一个HttpServletRequest我们也无需清理它处理完该请求后HttpServletRequest实例将被丢弃把user.jsp放到/WEB-INF/目录下是因为WEB-INF是一个特殊目录Web Server会阻止浏览器对WEB-INF目录下任何资源的访问这样就防止用户通过/user.jsp路径直接访问到JSP页面JSP页面首先从request变量获取User实例然后在页面中直接输出此处未考虑HTML的转义问题有潜在安全风险。 这样我们就把从数据库获取数据的业务逻辑留给了Serlvet后台把输出HTML网页的任务交给了JSP前端。 思考一下为什么我们能够将一个前后端Servlet分成后端Servlet前端JSP其实给人的感觉就是Java跟C语言一起跑一个项目有点不可思议。其实不是这样的因为JSP就是Servlet。 我们现在将JSP转化成Servlet其实就是这样 html headtitleHello World - JSP/title /head body%-- JSP Comment --%h1Hello World!/h1p%out.println(Your IP address is );%span stylecolor:red% request.getRemoteAddr() %/span/p /body /htmlJSP对应Servlet package org.apache.jsp; import ...public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {...public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {...out.write(html\n);out.write(head\n);out.write( titleHello World - JSP/title\n);out.write(/head\n);out.write(body\n);...}... }是不是看傻了我再给你看一个东西我把JSP文件放在tomcat\webapps下 span stylefont-size:14px;% page contentTypetext/html; charsetgb2312 languagejava % !DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN” HTML HEAD TITLE第一个JSP页面/TITLE /HEAD BODY %for(int i0;i10;i) { out.println(i); % br/ %}% /BODY /HTML所以我们最后的一个总结就是 JSP就是Servlet通过Servlet JSP分离前后端代码实际上是将一个Servlet任务分给了两个Servlet去完成。 MVC框架其实你已经学完了 Of courseI am 确定童鞋们真的已经学完了MVC不信你们看一张图。 按照鄙人浅薄的项目经历大二来说你以后做的项目确实就是差不过是这样子的流程了只不过在业务处理那块会复杂一些把后端业务处理分成controller、Service、Mapper三层架构。 接下来就要开始SpringMVC学习啦太快了受不了那你自己去一旁休息一下吧哥哥是老司机要带其他童鞋上高速了dududu~ SpringMVC 前言 我曾经遇到一篇很牛逼的文章上来直接跟我说SpringMVC组件看的我两眼发光。我使劲背又使劲忘背忘背忘背忘背忘背忘背忘…最后都忘了背了。所以如果你不看我前面对Servlet精彩的讲解那你就先不要看这里因为要讲SpringMVC必须基于Servlet 跟 MVC 屏幕前的读者可能有一部分已经做过SpringBoot项目了你们可能会根据自己SpringBoot项目经历结合网上的SpringMVC组件讲解去理解SpringMVC我个人认为不要这么做因为SpringBoot你知道的简化了很多东西。最好从一个原始的SpringMVC项目开始下面就给你们带来一个完整的SpringMVC原始实例。 从应用入手我们看看SpringMVC是怎样执行的 导包包导个jar包 !--测试-- dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope /dependency !--日志-- dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.7.21/version /dependency !--J2EE-- dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/version /dependency dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.2/version /dependency dependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version /dependency !--mysql驱动包-- dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.35/version /dependency !--springframework-- dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.2.3.RELEASE/version /dependency dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.3.RELEASE/version /dependency dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.3.RELEASE/version /dependency dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.2.3.RELEASE/version /dependency dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.2.3.RELEASE/version /dependency dependencygroupIdcom.github.stefanbirkner/groupIdartifactIdsystem-rules/artifactIdversion1.16.1/versionscopetest/scope /dependency dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.8.9/version /dependency !--其他需要的包-- dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.4/version /dependency dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.1/version /dependencySpring MVC 应用时需要在 web.xml 中部署 DispatcherServlet。 其中我们需要重点注意的是DispatcherServlet会怎样寻找我们定义的Servlet的配置文件。如果我们使用了init-param标签指定了路径那就使用该路径来查找我们的Servlet配置文件如果没有就按照默认路径应用程序的 WEB-INF 目录下查找我们的Servlet配置文件。 Servlet 是 DispatcherServlet 类型它就是 Spring MVC 的入口并通过 load-on-startup1/load-on-startup 配置标记容器在启动时就加载此 DispatcherServlet即自动启动。然后通过 servlet-mapping 映射到“/”即 DispatcherServlet 需要截获并处理该项目的所有 URL 请求。 ?xml version1.0 encodingUTF-8? web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://java.sun.com/xml/ns/javaee xmlns:webhttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsdxsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0display-namespringMVC/display-name!-- 部署 DispatcherServlet --servletservlet-namespringmvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!--配置DispatcherServlet会去哪里找我们自定义的Servlet--!--如果没有init-param这个标签那就开始使用默认路径扫描--init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc-servlet.xml/param-value/init-param!-- 表示容器再启动时立即加载servlet --load-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringmvc/servlet-name!-- 处理所有URL --url-pattern//url-pattern/servlet-mapping /web-app为我们自定义的Servlet创建配置文件 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd!-- LoginController控制器类映射到/login --bean name/loginclassnet.biancheng.controller.LoginController/!-- LoginController控制器类映射到/register --bean name/registerclassnet.biancheng.controller.RegisterController/ /beans创建Controller package controller;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;public class LoginController implements Controller {public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {return new ModelAndView(/WEB-INF/jsp/register.jsp);} }package controller;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;public class RegisterController implements Controller {public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {return new ModelAndView(/WEB-INF/jsp/login.jsp);} }创建View index.jsp这个文件不要不要不要放在WEB-INF中还记得我说过不能直接访问WEB-INF里面的内容吗 % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html head meta http-equivContent-Type contenttext/html; charsetUTF-8 titleInsert title here/title /head body未注册的用户请a href${pageContext.request.contextPath }/register 注册/abr / 已注册的用户去a href${pageContext.request.contextPath }/login 登录/a /body /html在 WEB-INF 下创建 jsp 文件夹将 login.jsp 和 register.jsp 放到 jsp 文件夹下 login.jsp % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html head meta http-equivContent-Type contenttext/html; charsetUTF-8 titleInsert title here/title /head body登录页面 /body /htmlregister.jsp % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8 % !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html headmeta http-equivContent-Type contenttext/html; charsetUTF-8titleInsert title here/title body注册页面 /body /html /head将 springmvcDemo 项目部署到 Tomcat 服务器。首先访问 index.jsp 页面。 在下图所示的页面中当用户单击“注册”超链接时根据 springmvc-servlet.xml 文件中的映射将请求转发给 RegisterController 控制器处理处理后跳转到 /WEB-INF/jsp 下的 register.jsp 视图。同理当单击“登录”超链接时控制器处理后转到 /WEB-INF/jsp下的 login.jsp 视图。 那么我们来看一下总的流程是什么顺道用到了SpringMVC的哪些组件。 通过web.xml注册DispatcherServlet并向HandlerMapping发送请求HandlerMapping根据请求返回Controller执行链通过HandlerAdapter完成Controller的对接。因为SpringMVC中的Handler可以是任意形式只要能处理请求就可以但是Servlet需要的处理方法的结构却是固定的都是以request和response为参数的方法。如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢这HandlerAdapter要做的事情。接下来就是执行controller里面的方法并且返回一个ModelAndView对象ModelAndView就是指定的.jsp我们需要解析然后返回给view。最后DispatcherServlet将view返回给浏览器 从原理入手我们看看SpringMVC是怎样执行的 其实你又已经学完了SpringMVC原理了因为上面已经从实例出发一步步跟你讲解了SpringMVC的运行原理我相信如果我在这里单独讲原理你是绝对不会看第二遍甚至第一遍就粗略看一下而已。所以恭喜你整个Web服务你已经入门了。 SpringMVC常用注解 参考文章 这里根据自己需求记录笔记我这里就只记录自己不熟悉的注解好了 RequestMapping RequestMapping注解有六个属性 value指定请求的实际地址method 指定请求的method类型 GET、POST、PUT、DELETE等consumes指定处理请求的提交内容类型produces指定返回的内容类型params 指定request中必须包含某些参数值是才让该方法处理headers指定request中必须包含某些指定的header值才能让该方法处理 PathVariable RequestMapping(value/user/{userId}/roles/{roleId},method RequestMethod.GET) public String getLogin(PathVariable(userId) String userId, PathVariable(roleId) String roleId){}RequestParam RequestMapping(value/dept/get/{id},method RequestMethod.GET) public String getLogin(RequestParam(value id) int id, PathVariable(roleId) String roleId){}
http://www.hkea.cn/news/14314071/

相关文章:

  • 罗湖商城网站设计价格智能科技网站模板
  • 做推广网络蚌埠网站优化
  • 广饶网站设计云搜索下载
  • 网站优化排名易下拉稳定网站维护 公司简介
  • 秀山网站建设公司东莞建设网首页
  • 北京网站搭建公司排名网站开发记科目
  • 设计师做网站效果图网站的层级
  • 做网站大概需要几步网站配色绿色
  • 网站制作谁家好房地产开发设计平台
  • 建设职业技术学院网站南京市高淳区城乡建设局网站
  • phpstudy2016快速搭建网站洛江区建设局网站
  • 呼和浩特装修网站电子商务网站项目预算
  • 做最最优秀的视频网站类似卡盟网站卖怎么做
  • 网站开发公司可行报告唐山快速建站公司
  • html5炫酷网站手机自媒体网站模板
  • 网站登录模板汕头市城市建设总公司网站
  • 一下成都网站建设公司排名网站制作与维护费用
  • 临清建设局网站商业空间设计书籍
  • 做网站建设工资多少wordpress精美博客主题
  • 重庆网站建设有限公司网站推广怎么推
  • 搭建博客网站科学规划网页的做法是
  • 大丰有做网站的重庆平台网站推广
  • 域名注册之后怎么建设网站网站 参数
  • 怎么做网站的关键词wordpress问答社区主题
  • 1688阿里巴巴国际站首页网站注册域名 免费
  • 大型门户网站建设工作总结建设网站的市场分析
  • 简洁大气企业网站模板建设工程教育网官方网站
  • 保定网站建设系统建筑设计防火规范
  • 公司网站设计规范长沙大型做网站公司
  • 江西建设网站百度官方认证