JavaWeb
JavaWeb
一、Servlet
关于系统架构
-
系统架构包括什么形式?
-
C/S架构
-
B/S架构
-
-
什么是C/S架构?
-
Client / Server(客户端 / 服务器)
-
C/S架构的软件或者说系统有哪些呢?
-
QQ
-
微信
-
只要需要安装客户端软件的都是C/S架构
-
-
C/S架构的特点:需要安装特定的客户端软件。
-
C/S架构的系统优点和缺点分别是什么?
-
优点:
-
速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从服务器端传过来,所以C/S架构的系统速度快)
-
体验好(速度快、界面炫酷)
-
界面炫酷(专门的语言去实现界面的,更加灵活)
-
服务器压力小(因为大量的数据都是集成在客户端软件中,所以服务器只需传送很少量的数据,所以服务器压力小)
-
安全(因为大量数据都集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,但是就算服务器受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S架构的系统比较安全)
-
-
缺点:
-
升级维护比较麻烦,成本高(每一个客户端软件都需要升级)
-
-
-
-
B/S架构
-
Browser / Server(浏览器 / 服务器)
-
B/S结构的系统是不是一个特殊的C/S系统?
-
实际上B/S结构的系统还是一个C/S,只不过这个C比较特殊,这个Client是一个固定不变的浏览器软件。
-
-
B/S结构的系统优点和缺点分别是什么?
-
优点:
-
升级维护方便,成本比较低。(只需要升级服务器端即可)
-
不需要安装特定的客户端软件,用户操作方便,只需打开浏览器,输入网址即可。
-
-
缺点:
-
速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心的响应数据,所以B/S结构的系统在网络中传送的数据量比较大)
-
体验差(界面不是那么炫酷,因为浏览器只支持HTML CSS JavaScript,再加上速度慢)
-
不安全(所有的数据都在服务器上,只要服务器发生火灾、地震等不可抗力,最终数据全部丢失)
-
-
-
B/S结构的系统通信原理
-
WEB系统的访问过程
-
第一步:打开浏览器
-
第二步:找到地址栏
-
第三步:输入一个合法的网址
-
第四步:回车
-
第五步:在浏览器上会展示响应的结果
-
-
关于域名:
-
www.baidu.com(是一个域名)
-
在浏览器地址栏上输入域名后,回车之后,域名解析器会将域名解析出来一个具体的IP地址和端口号等。
-
IP地址
-
计算机在网络中的一个身份证号。在同一个网络中,IP地址是唯一的。
-
有了IP地址才能建立连接。
-
-
端口号
-
一个端口代表一个软件,一个计算机当中有很多软件,每一个软件启动之后都有一个端口号。
-
在同一个计算机上,端口号具有唯一性。
-
-
什么是请求,什么是响应?
-
请求和响应实际上说的是数据的流向不同。
-
从Browser端发送数据到Servlet端,我们称为请求(request)。
-
从Servlet端向Browser端发送数据,我们称为响应(response)。
-
Web服务器软件
-
WEB服务器软件有哪些?
-
Tomcat(WEB服务器)
-
jetty(WEB服务器)
-
JBOOS(应用服务器)
-
WebLogic(应用服务器)
-
WebSphere(应用服务器)
-
-
应用服务器和WEB服务器的关系?
-
应用服务器实现了JavaEE的所有规范。(JavaEE有13种不同的规范)
-
WEB服务器只实现了JavaEE中的Servlet + JSP两个核心的规范。
-
所以应用服务器是包含WEB服务器的。
-
-
关于Tomcat
-
tomcat:开源免费的轻量级WEB服务器。
-
tomcat还有另外一个名字:Catalina(美国的一个风景秀丽的岛屿)
-
tomcat的logo是一只公猫:寓意表示Tomcat服务器是轻巧的,小巧的,运行速度快。
-
tomcat是Java语言写的。
-
tomcat服务器想要运行,必须先有jre(Java的运行时环境)。
-
-
关于tomcat服务器的目录
-
bin:这个目录是Tomcat服务器的命令文件存放的目录,比如:启动Tomcat,关闭Tomcat等。
-
conf:这个目录是Tomcat服务器的配置文件存放目录。(server.xml文件中可以配置端口号,默认Tomcat端口是8080)
-
lib:这个目录是Tomcat服务器的核心程序目录,因为Tomcat服务器是Java语言编写的,这里的jar包里面都是class文件。
-
logs:tomcat服务器的日志目录,tomcat服务器启动等信息都会在这个目录下生成日志文件。
-
temp:Tomcat服务器的临时目录,存储临时的文件。
-
webapps:这个目录当中就是用来存放大量的webapp(web application:web应用)。
-
work:这个目录是用来存放JSP文件翻译之后的Java文件以及编译之后的class文件。
-
-
启动Tomcat
-
bin目录下有一个文件: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语言编写的,所以启动tomcat服务器就是执行main方法。
-
配置Tomcat服务器需要哪些环境变量?
-
JAVA_HOME (jdk的根目录)
-
CATALINA_HOME(tomcat服务器的根目录)
-
PATH(%JAVA_HOME%\bin 和 %CATALINA_HOME%\bin)
-
启动Tomcat:startup.bat(可以省略.bat)
-
关闭Tomcat:shutdown.bat(不可以省略.bat,因为shutdown与Windows的关机命令shutdown冲突,可以在tomcat目录下重命名shutdown.bat命令,例如:stop)
-
-
测试Tomcat服务器是否启动成功
-
打开浏览器,在浏览器的地址栏输入URL即可
-
http://ip地址:端口号
-
ip地址即本机地址:127.0.0.1,或者localhost。
-
端口号:8080
-
注意:必须要在执行startup的命令下测试,关闭了则不能弹出界面。
-
关闭tomcat服务器最好是用命令关闭,不要直接关闭dos窗口。
-
-
-
实现一个最基本的web应用(就是一个纯html文件)
-
第一步:找到CATALINA_HOME\webapps目录
-
因为所有的webapp要放到webapps目录下。(如果不放到此目录下,Tomcat服务器找不到)
-
-
第二步:在CATALINA_HOME\webapps目录下新建一个子目录名,例如:temp
-
第三步:在temp目录下新建资源文件,例如:login.html
-
编写login.html文件的内容
-
-
第四步:启动tomcat服务器
-
第五步:打开浏览器,在浏览器地址栏上输入URL:
一个合法的webapp目录结构
webapproot
|-----WEB-INF
|-----classes(存放字节码)
|-----lib(第三方jar包)
|-----web.xml(注册Servlet)
|-----html
|-----css
|-----javascript
|-----image
.....
response.setContentType("text/html"); //设置响应的内容类型是普通文本或html代码
//需要在获取流对象之前设置有效
解决Tomcat服务器在DOS命令窗口中的乱码问题
将CATALINA_HOME/conf/logging.properties文件中的内容修改如下:
java.util.logging.ConsoleHandler.encoding = GBK(修改编码为GBK)
向浏览器响应一段HTML代码
public void service(ServletRequest request,ServletResponse response){
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<h1>hello servlet!</h1>")
}
在Servlet中链接数据库,怎么做?
-
Servlet是Java程序,所以在Servlet中完全可以编写JDBC代码连接数据库。
-
在一个webapp中去连接数据库,需要将驱动jar包放到WEB-INF/lib目录下。
Servlet对象的生命周期
-
什么是Servlet对象生命周期?
-
Servlet对象什么时候被创建?
-
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启动的时候创建对象呢?
-
在路径下加上<load-on-startup>0</load-on-startup>标签。中间写正整数(数字越小,优先级越高)(一般不写)
-
-
Servlet对象生命周期
-
默认情况下服务器启动的时候对象并没有被实例化。
-
当用户发送第一次请求的时候,Tomcat服务器马上调用了对象的init方法(init方法在执行的时候,对象已经存在了,已经被创建出来了)
-
用户发送第一次请求的时候,init方法执行之后,Tomcat服务器马上调用对象的service方法。
-
当用户发送第二次请求、第三次请求...的时候,Servlet对象并没有被新建,还是使用之前创建好的Servlet对象,直接调用该Servlet对象的service方法,这说明:
-
第一:Servlet对象是单例的(单实例的,但是:Servlet对象是单实例的,但Servlet类并不符合单例模式,我们称之为假单例。之所以单例是因为Servlet对象的创建我们javaweb程序员管不着,这个对象创建只能是Tomcat说了算)
-
第二:无参数构造方法、init方法只在用户第一次发送请求的时候执行。也就是说无参数构造方法只执行一次,init方法也只被Tomcat服务器调用一次。
-
第三:只要用户发送一次请求:service方法必然会被Tomcat服务器调用一次。发送100次请求,service方法会被调用100次。
-
-
Servlet的destroy方法只被Tomcat服务器调用一次。
-
destroy方法是在什么时候调用的?
-
在服务器关闭的时候
-
因为服务器关闭的时候要销毁对象的内存。
-
服务器在销毁对象内存之前,Tomcat服务器会自动调用该对象的destroy方法。
-
destroy方法执行的时候,对象还在,没有被销毁,destroy方法执行结束之后,对象的内存才会被Tomcat服务器释放。
-
-
-
关于Servlet类中方法的调用次数:
-
构造方法只执行一次
-
init方法只执行一次
-
service方法用户发送一次请求则执行一次
-
destroy方法只执行一次
-
-
-
ServletConfig
-
ServletConfig是什么?
-
javax.servlet.ServletConfig
-
显然ServletConfig是Servlet规范中的一员
-
ServletConfig是一个接口(javax.servlet.Servlet也是一个接口)
-
-
谁去实现这个接口?
-
web服务器
-
-
总结:tomcat服务器实现了ServletConfig接口
-
一个Servlet对象中有一个ServletConfig对象。100个Servlet,应该就有100个ServletConfig对象。(Servlet和ServletConfig对象是一对一)
-
ServletConfig对象是谁创建的?在什么时候创建?
-
tomcat服务器(web服务器)创建了ServletConfig对象
-
在创建Servlet对象的时候,同时创建了ServletConfig对象
-
-
- 点赞
- 收藏
- 关注作者
评论(0)