96SEO 2026-02-19 11:27 0
QQ(先去腾讯官网下载一个QQ软件,几十MB,然后把这个客户端软件安装上去,然后输入QQ号以及密码,登录之后,就可以和你的朋友聊天了,就可以使用这个软件了。

)
C/S架构的特点:需要安装特定的客户端软件。
C/S架构的系统优点和缺点分别是什么?
速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从服务器端传送过来,所以C/S结构的系统速度快)体验好(速度又快,界面又酷炫,当然体验好了。
)界面酷炫(专门的语言去实现界面的,更加灵活。
)服务器压力小(因为大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量,当然服务器压力小。
)安全(因为大量的数据是集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,就算服务器那边地震了,火灾了,服务器受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S结构的系统比较安全。
)…
升级维护比较差劲。
(升级维护比较麻烦。
成本比较高。
每一个客户端软件都需要升级。
有一些软件不是那么容易安装的。
)
服务器)http://www.baidu.comhttp://www.jd.comhttp://www.126.comB/S结构的系统是不是一个特殊的C/S系统?
实际上B/S结构的系统还是一个C/S,只不过这个C比较特殊,这个Client是一个固定不变浏览器软件。
升级维护方便,成本比较低。
(只需要升级服务器端即可。
)不需要安装特定的客户端软件,用户操作极其方便。
只需要打开浏览器,输入网址即可。
速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心的响应数据,所以B/S结构的系统在网络中传送的数据量比较大。
)体验差(界面不是那么酷炫,因为浏览器只支持三个语言HTML
JavaScript。
在加上速度慢。
)不安全(所有的数据都在服务器上,只要服务器发生火灾,地震等不可抗力,最终数据全部丢失。
)…
这个问题问的没有水平。
并不是哪个好,哪个不好。
不同结构的系统在不同的业务场景下有不同的适用场景。
娱乐性软件建议使用?
公司内部使用的系统,需要维护成本低。
公司内部使用的系统,不需要很酷炫。
公司内部使用的企业级系统主要是能够进行数据的维护即可。
B/S
注意了:开发B/S结构的系统,其实就是开发网站,其实就是开发一个WEB系统。
Java可以(Java做WEB开发我们称为JavaWEB开发。
JavaWEB开发最核心的规范:Servlet【Server
Applet服务器端的Java小程序。
】)C语言也可以C++也可以Python也行PHP也可以…
Java标准版(一套类库:别人写好的一套类库,只不过这个类库是标准类库,走EE,或者走ME,这个SE一定是基础,先学。
)
Java企业版(也是一套类库:也是别人写好的一套类库,只不过这套类库可以帮助我们完成企业级项目的开发,专门为企业内部提供解决方案的一套(多套)类库。
)别人写好的,你用就行了,用它可以开发企业级项目。
可以开发web系统。
Java比较火爆的就是这个JavaEE方向。
Java微型版(还是一套类库,只不过这套类库帮助我们进行电子微型设备内核程序的开发)机顶盒内核程序,吸尘器内核程序,电冰箱内核程序,电饭煲内核程序。
。
。
。
。
JavaEE实际上包括很多种规范,13种规范,其中Servlet就是JavaEE规范之一。
学Servlet还是Java语言。
第一步:打开浏览器第二步:找到地址栏第三步:输入一个合法的网址第四步:回车第五步:在浏览器上会展示响应的结果。
是一个域名在浏览器地址栏上输入域名,回车之后,域名解析器会将域名解析出来一个具体的IP地址和端口号等。
解析结果也许是:http://110.242.68.3:80/index.html
计算机在网络当中的一个身份证号。
在同一个网络当中,IP地址是唯一的。
A计算机要想和B计算机通信,首先你需要知道B计算机的IP地址,有了IP地址才能建立连接。
一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)。
一个计算机当中有很多软件,每一个软件启动之后都有一个端口号。
在同一个计算机上,端口号具有唯一性。
第一步:用户输入网址(URL)第二步:域名解析器进行域名解析:http://110.242.68.3:80/index.html第三步:浏览器软件在网络中搜索110.242.68.3这一台主机,直到找到这台主机。
第四步:定位110.242.68.3这台主机上的服务器软件,因为是80端口,可以很轻松的定位到80端口对应的服务器软件。
第五步:80端口对应的服务器软件得知浏览器想要的资源名是:index.html第六步:服务器软件找到index.html文件,并且将index.html文件中的内容直接输出响应到浏览器上。
第七步:浏览器接收到来自服务器的代码(HTML
请求和响应实际上说的是数据的流向不同。
从Browser端发送数据到Server端,我们称为请求。
英语单词:request从Server端向浏览器Browser端发送数据,我们称为响应。
英语单词:responseB
Tomcat(WEB服务器)jetty(WEB服务器)JBOSS(应用服务器)WebLogic(应用服务器)WebSphere(应用服务器)
应用服务器实现了JavaEE的所有规范。
(JavaEE有13个不同的规范。
)WEB服务器只实现了JavaEE中的Servlet
JSP两个核心的规范。
通过这个讲解说明了:应用服务器是包含WEB服务器的。
用过JBOSS服务器的同学应该很清楚,JBOSS中内嵌了一个Tomcat服务器。
apache官网地址:https://www.apache.org/tomcat官网地址:https://tomcat.apache.orgtomcat开源免费的轻量级WEB服务器。
tomcat还有另外一个名字:catalina(catalina是美国的一个岛屿,风景秀丽,据说作者是在这个风景秀丽的小岛上开发了一个轻量级的WEB服务器,体积小,运行速度快,因此tomcat又被称为catalina)tomcat的logo是一只公猫(寓意表示Tomcat服务器是轻巧的,小巧的,果然,体积小,运行速度快,只实现了Servlet+JSP规范)tomcat是java语言写的。
tomcat服务器要想运行,必须先又jre(Java的运行时环境)
Tomcat服务器要想运行,需要先有jre,所以要先安装JDK,配置java运行环境。
Files\Java\jdk-17.0.1PATH=%JAVA_HOME%\bin目前JAVA_HOME没有配置,思考一个问题,这样行不行呢?
目前只运行java程序是没问题的。
真的没问题吗?
绿色版本的安装很简单,直接zip包解压即可。
解压就是安装。
我有一个好习惯,在C盘的根,java开发所有相关的工具都安装到dev下有一个文件:startup.bat,通过它可以启动Tomcat服务器。
xxx.bat文件是个什么文件?
bat文件是windows操作系统专用的,bat文件是批处理文件,这种文件中可以编写大量的windows的dos命令,然后执行bat文件就相当于批量的执行dos命令。
startup.sh,这个文件在windows当中无法执行,在Linux环境当中可以使用。
在Linux环境下能够执行的是shell命令,大量的shell命令编写在shell文件当中,然后执行这个shell文件可以批量的执行shell命令。
tomcat服务器提供了bat和sh文件,说明了这个tomcat服务器的通用性。
分析startup.bat文件得出,执行这个命令,实际上最后是执行:catalina.bat文件。
catalina.bat文件中有这样一行配置:MAINCLASS=org.apache.catalina.startup.Bootstrap
(这个类就是main方法所在的类。
)tomcat服务器就是Java语言写的,既然是java语言写的,那么启动Tomcat服务器就是执行main方法。
我们尝试打开dos命令窗口,在dos命令窗口中输入startup.bat来启动tomcat服务器。
启动Tomcat服务器只配置path对应的bin
这个。
(server.xml文件中可以配置端口号,默认Tomcat端口是8080)lib
:这个,因为Tomcat服务器是Java语言编写的,这里的jar包里面都是class文件。
logs:
Tomcat服务器的日志下生成日志文件。
temp:Tomcat服务器的临时当中就是用来存放大量的webapp(web
因为所有的webapp要放到webapps下新建一个子名oa就是你这个webapp的名字。
http://127.0.0.1:8080/oa/index.html
我们在浏览器上直接输入一个URL,然后回车。
这个动作和超链接一样吗?
既然是一样的,我们完全可以使用超链接。
!--注意以下的路径,以/开始,带项目名,是一个绝对路径。
不需要添加:http://127.0.0.1:8080--
!--注意:我们目前前端上的路径都以“/”开始的,都是加项目名的。
--
href="/oa01/test/debug/d.html"d
page/ahttp://127.0.0.1:8080/oa/userList.html
访问这个地址,可以展示一个用户列表页面。
但是这个用户列表页面是写死在HTML文件当中的。
这种资源我们称为静态资源。
怎么能变成动态资源。
显然需要连接数据库。
连接数据库需要JDBC程序,也就是说需要编写Java程序连接数据库,数据库中有多少条记录,页面上就显示多少条记录,这种技术被称为动态网页技术。
(动态网页技术并不是说页面中有flas***。
动态网页技术是说页面中的数据是动态的,根据数据库中数据的变化而变化。
)
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
浏览器软件的开发团队(浏览器软件太多了:谷歌浏览器、火狐浏览器、IE浏览器…)WEB
Server这个软件也是太多了:Tomcat、Jetty、WebLogic、JBOSS、WebSphere…)DB
Server这个软件也是太多了:Oracle、MySQL…)webapp的开发团队(WEB应用是我们做为JavaWEB程序员开发的)
WebServer之间有一套传输协议:HTTP协议。
(超文本传输协议。
)webapp开发团队
遵循Servlet规范的webapp,这个webapp就可以放在不同的WEB服务器中运行。
(因为这个webapp是遵循Servlet规范的。
)Servlet规范包括什么呢?
规范了哪些接口规范了哪些类规范了一个web应用中应该有哪些配置文件规范了一个web应用中配置文件的名字规范了一个web应用中配置文件存放的路径规范了一个web应用中配置文件的内容规范了一个合法有效的web应用它的下新建一个bank,办公系统可以创建一个oa。
第二步:在webapp的根下新建一个的名字是Servlet规范中规定的,必须全部大写,必须一模一样。
必须的必须。
注意:这个下一定存放的是Java程序编译之后的class文件(这里存放的是字节码文件)。
第五步:在WEB-INF下有一个servlet-api.jar,解压这个servlet-api.jar之后,你会看到里面有一个Servlet.class文件。
重点:从JakartaEE9开始,Servlet接口的全名变了:jakarta.servlet.Servlet注意:编写这个Java小程序的时候,java源代码你愿意在哪里就在哪里,位置无所谓,你只需要将java源代码编译之后的class文件放到classes下。
第九步:在web.xml文件中编写配置信息,让“请求路径”和“Servlet类名”关联在一起。
这一步用专业术语描述:在web.xml文件中注册Servlet类。
xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeehttps://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"metadata-complete="true"!--servlet描述信息--!--任何一个servlet都对应一个servlet-mapping
--servletservlet-namefdsafdsagfdsafdsa/servlet-name!--这个位置必须是带有包名的全限定类名--servlet-classcom.bjpowernode.servlet.HelloServlet/servlet-class/servlet!--servlet映射信息--servlet-mapping!--这个也是随便的,不过这里写的内容要和上面的一样。
--servlet-namefdsafdsagfdsafdsa/servlet-name!--这里需要一个路径--!--这个路径唯一的要求是必须以
开始--!--当前这个路径可以随便写--url-pattern/fdsa/fd/saf/d/sa/fd/sa/fd/url-pattern/servlet-mapping/web-app
第十一步:打开浏览器,在浏览器地址栏上输入一个url,这个URL必须是:
http://127.0.0.1:8080/crm/fdsa/fd/saf/d/sa/fd/sa/fd非常重要的一件事:浏览器上的请求路径不能随便写,这个请求路径必须和web.xml文件中的url-pattern一致。
注意:浏览器上的请求路径和web.xml文件中的url-pattern的唯一区别就是:浏览器上的请求路径带项目名:/crm
浏览器上编写的路径太复杂,可以使用超链接。
(非常重要:html页面只能放到WEB-INF结构应该是怎样的?
webapproot|------WEB-INF|------classes(存放字节码)|------lib(第三方jar包)|------web.xml(注册Servlet)|------html|------css|------javascript|------image....浏览器发送请求,到最终服务器调用Servlet中的方法,是怎样的一个过程?
(以下这个过程描述的很粗糙。
其中还有很多步骤我省略了。
)
用户输入URL,或者直接点击超链接:http://127.0.0.1:8080/crm/fdsa/fd/saf/d/sa/fd/sa/fd然后Tomcat服务器接收到请求,截取路径:/crm/fdsa/fd/saf/d/sa/fd/sa/fdTomcat服务器找到crm项目Tomcat服务器在web.xml文件中查找/fdsa/fd/saf/d/sa/fd/sa/fd
对应的Servlet是:com.bjpowernode.servlet.HelloServletTomcat服务器通过反射机制,创建com.bjpowernode.servlet.HelloServlet的对象。
Tomcat服务器调用com.bjpowernode.servlet.HelloServlet对象的service方法。
JavaEE8JavaEE被Oracle捐献了,Oracle将JavaEE规范捐献给Apache了。
Apache把JavaEE换名了,以后不叫JavaEE了,以后叫做
9",不再是"JavaEE9"这个名字了,叫做JakartaEE9JavaEE8的时候对应的Servlet类名是:javax.servlet.ServletJakartaEE9的时候对应的Servlet类名是:jakarta.servlet.Servlet
(包名都换了)如果你之前的项目还是在使用javax.servlet.Servlet,那么你的项目无法直接部署到Tomcat10+版本上。
你只能部署到Tomcat9-版本上。
在Tomcat9以及Tomcat9之前的版本中还是能够识别javax.servlet这个包。
解决Tomcat服务器在DOS命令窗口中的乱码问题(控制台乱码)
将CATALINA_HOME/conf/logging.properties文件中的内容修改如下:
java.util.logging.ConsoleHandler.encoding
response){response.setContentType("text/html");PrintWriter
response.getWriter();out.print("h1hello
Servlet是Java程序,所以在Servlet中完全可以编写JDBC代码连接数据库。
在一个webapp中去连接数据库,需要将驱动jar包放到WEB-INF/lib的名字一致。
)第二步:新建模块(File
这里新建的是一个普通的JavaSE模块(这里先不要新建Java
Enterprise模块)这个Module自动会被放在javaweb的project下面。
这个Module起名:servlet01
第三步:让Module变成JavaEE的模块。
(让Module变成webapp的模块。
符合webapp规范。
符合Servlet规范的Module)
Application(选择的是webapp的支持)选择了这个webapp的支持之后,IDEA会自动给你生成一个符合Servlet规范的webpp中有一个web就代表webapp的根
Application生成的资源中有index.jsp文件,这里我选择删除这个index.jsp文件。
第五步:编写Servlet(StudentServlet)
Servlet这个时候发现Servlet.class文件没有。
怎么办?
将CATALINA_HOME/lib/servlet-api.jar和jsp-api.jar添加到classpath当中(这里的classpath说的是IDEA的classpath)
实现jakarta.servlet.Servlet接口中的5个方法。
第六步:在Servlet当中的service方法中编写业务代码(我们这里连接数据库了。
)第七步:在WEB-INF:lib(这个下。
第八步:在web.xml文件中完成StudentServlet类的注册。
(请求路径和Servlet之间对应起来)
xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"servletservlet-namestudentServlet/servlet-nameservlet-classcom.bjpowernode.javaweb.servlet.StudentServlet/servlet-class/servletservlet-mappingservlet-namestudentServlet/servlet-nameurl-pattern/servlet/student/url-pattern/servlet-mapping/web-app第九步:给一个html页面,在HTML页面中编写一个超链接,用户点击这个超链接,发送请求,Tomcat执行后台的StudentServlet。
href="/xmm/servlet/student"student
/html第十步:让IDEA工具去关联Tomcat服务器。
关联的过程当中将webapp部署到Tomcat服务器当中。
local在弹出的界面中设置服务器Server的参数(基本上不用动)在当前窗口中有一个Deployment(点击这个用来部署webapp),继续点击加号,部署即可。
修改
在右上角有绿色的箭头,或者绿色的小虫子,点击这个绿色的小虫子,可以采用debug的模式启动Tomcat服务器。
我们开发中建议适用debug模式启动Tomcat
第十二步:打开浏览器,在浏览器地址栏上输入:http://localhost:8080/xmm/student.html
Servlet对象什么时候被创建。
Servlet对象什么时候被销毁。
Servlet对象创建了几个?
Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的。
Servlet对象的创建,对象上方法的调用,对象最终的销毁,Javaweb程序员是无权干预的。
Servlet对象的生命周期是由Tomcat服务器(WEB
Server)全权负责的。
Tomcat服务器通常我们又称为:WEB容器。
(这个叫法你要知道【WEB
Container】)WEB容器来管理Servlet对象的死活。
思考:我们自己new的Servlet对象受WEB容器的管理吗?
我们自己new的Servlet对象是不受WEB容器管理的。
WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Servlet对象不会被WEB容器管理。
(自己new的Servlet对象不在容器当中)web容器底层应该有一个HashMap这样的集合,在这个集合当中存储了Servlet对象和请求路径之间的关系
研究:服务器在启动的Servlet对象有没有被创建出来(默认情况下)?
在Servlet中提供一个无参数的构造方法,启动服务器的时候看看构造方法是否执行。
经过测试得出结论:默认情况下,服务器在启动的时候Servlet对象并不会被实例化。
这个设计是合理的。
用户没有发送请求之前,如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有用户访问,显然这个Servlet对象是一个废物,没必要先创建。
在servlet标签中添加子标签,在该子标签中填写整数,越小的整数优先级越高。
servletservlet-nameaservlet/servlet-nameservlet-classcom.bjpowernode.javaweb.servlet.AServlet/servlet-classload-on-startup1/load-on-startup
servlet-mappingservlet-nameaservlet/servlet-nameurl-pattern/a/url-pattern
用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。
并且执行的是无参数构造方法。
)AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。
(init方法在执行的时候,AServlet对象已经存在了。
已经被创建出来了。
)用户发送第一次请求的时候,init方法执行之后,Tomcat服务器马上调用AServlet对象的service方法。
execute!根据以上输出结果得知,用户在发送第二次,或者第三次,或者第四次请求的时候,Servlet对象并没有新建,还是使用之前创建好的Servlet对象,直接调用该Servlet对象的service方法,这说明:
第一:Servlet对象是单例的(单实例的。
但是要注意:Servlet对象是单实例的,但是Servlet类并不符合单例模式。
我们称之为假单例。
之所以单例是因为Servlet对象的创建我们javaweb程序员管不着,这个对象的创建只能是Tomcat来说了算,Tomcat只创建了一个,所以导致了单例,但是属于假单例。
真单例模式,构造方法是私有化的。
)第二:无参数构造方法、init方法只在第一次用户发送请求的时候执行。
也就是说无参数构造方法只执行一次。
init方法也只被Tomcat服务器调用一次。
第三:只要用户发送一次请求:service方法必然会被Tomcat服务器调用一次。
发送100次请求,service方法会被调用100次。
Servlet的destroy方法只被Tomcat服务器调用一次。
destroy方法是在什么时候被调用的?
在服务器关闭的时候。
因为服务器关闭的时候要销毁AServlet对象的内存。
服务器在销毁AServlet对象内存之前,Tomcat服务器会自动调用AServlet对象的destroy方法。
请问:destroy方法调用的时候,对象销毁了还是没有销毁呢?
destroy方法执行的时候AServlet对象还在,没有被销毁。
destroy方法执行结束之后,AServlet对象的内存才会被Tomcat释放。
Servlet的无参数构造方法执行:标志着你出生了。
Servlet对象的init方法的执行:标志着你正在接受教育。
Servlet对象的service方法的执行:标志着你已经开始工作了,已经开始为人类提供服务了。
Servlet对象的destroy方法的执行:标志着临终。
有什么遗言,抓紧的。
要不然,来不及了。
构造方法只执行一次。
init方法只执行一次。
service方法:用户发送一次请求则执行一次,发送N次请求则执行N次。
destroy方法只执行一次。
当我们Servlet类中编写一个有参数的构造方法,如果没有手动编写无参数构造方法会出现什么问题?
报错了:500错误。
注意:500是一个HTTP协议的错误状态码。
500一般情况下是因为服务器端的Java程序出现了异常。
(服务器端的错误都是500错误:服务器内部错误。
)如果没有无参数的构造方法,会导致出现500错误,无法实例化Servlet对象。
所以,一定
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback