JavaWeb

举报
京与旧铺 发表于 2022/06/29 20:02:31 2022/06/29
【摘要】 JavaWeb一、Servlet关于系统架构系统架构包括什么形式?C/S架构B/S架构什么是C/S架构?Client / Server(客户端 / 服务器)C/S架构的软件或者说系统有哪些呢?QQ微信只要需要安装客户端软件的都是C/S架构C/S架构的特点:需要安装特定的客户端软件。C/S架构的系统优点和缺点分别是什么?优点:速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从...

JavaWeb


一、Servlet

关于系统架构

  1. 系统架构包括什么形式?

    • C/S架构

    • B/S架构

  2. 什么是C/S架构?

    • Client / Server(客户端 / 服务器)

    • C/S架构的软件或者说系统有哪些呢?

      • QQ

      • 微信

      • 只要需要安装客户端软件的都是C/S架构

    • C/S架构的特点:需要安装特定的客户端软件。

    • C/S架构的系统优点和缺点分别是什么?

      • 优点:

        • 速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从服务器端传过来,所以C/S架构的系统速度快)

        • 体验好(速度快、界面炫酷)

        • 界面炫酷(专门的语言去实现界面的,更加灵活)

        • 服务器压力小(因为大量的数据都是集成在客户端软件中,所以服务器只需传送很少量的数据,所以服务器压力小)

        • 安全(因为大量数据都集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,但是就算服务器受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S架构的系统比较安全)

      • 缺点:

        • 升级维护比较麻烦,成本高(每一个客户端软件都需要升级)

  3. B/S架构

    • Browser / Server(浏览器 / 服务器)

    • B/S结构的系统是不是一个特殊的C/S系统?

      • 实际上B/S结构的系统还是一个C/S,只不过这个C比较特殊,这个Client是一个固定不变的浏览器软件。

    • B/S结构的系统优点和缺点分别是什么?

      • 优点:

        • 升级维护方便,成本比较低。(只需要升级服务器端即可)

        • 不需要安装特定的客户端软件,用户操作方便,只需打开浏览器,输入网址即可。

      • 缺点:

        • 速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心的响应数据,所以B/S结构的系统在网络中传送的数据量比较大)

        • 体验差(界面不是那么炫酷,因为浏览器只支持HTML CSS JavaScript,再加上速度慢)

        • 不安全(所有的数据都在服务器上,只要服务器发生火灾、地震等不可抗力,最终数据全部丢失)


B/S结构的系统通信原理

  1. WEB系统的访问过程

    • 第一步:打开浏览器

    • 第二步:找到地址栏

    • 第三步:输入一个合法的网址

    • 第四步:回车

    • 第五步:在浏览器上会展示响应的结果

  2. 关于域名:

    • https://www.baidu.com/(网址)

    • www.baidu.com(是一个域名)

    • 在浏览器地址栏上输入域名后,回车之后,域名解析器会将域名解析出来一个具体的IP地址和端口号等。

  3. IP地址

    • 计算机在网络中的一个身份证号。在同一个网络中,IP地址是唯一的。

    • 有了IP地址才能建立连接。

  4. 端口号

    • 一个端口代表一个软件,一个计算机当中有很多软件,每一个软件启动之后都有一个端口号。

    • 在同一个计算机上,端口号具有唯一性。

  5. 什么是请求,什么是响应?

    • 请求和响应实际上说的是数据的流向不同。

    • 从Browser端发送数据到Servlet端,我们称为请求(request)。

    • 从Servlet端向Browser端发送数据,我们称为响应(response)。


Web服务器软件

  1. WEB服务器软件有哪些?

    • Tomcat(WEB服务器)

    • jetty(WEB服务器)

    • JBOOS(应用服务器)

    • WebLogic(应用服务器)

    • WebSphere(应用服务器)

  2. 应用服务器和WEB服务器的关系?

    • 应用服务器实现了JavaEE的所有规范。(JavaEE有13种不同的规范)

    • WEB服务器只实现了JavaEE中的Servlet + JSP两个核心的规范。

    • 所以应用服务器是包含WEB服务器的。

  3. 关于Tomcat

    • tomcat:开源免费的轻量级WEB服务器。

    • tomcat还有另外一个名字:Catalina(美国的一个风景秀丽的岛屿)

    • tomcat的logo是一只公猫:寓意表示Tomcat服务器是轻巧的,小巧的,运行速度快。

    • tomcat是Java语言写的。

    • tomcat服务器想要运行,必须先有jre(Java的运行时环境)。

  4. 关于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文件。

  5. 启动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文件)

  1. 第一步:找到CATALINA_HOME\webapps目录

    • 因为所有的webapp要放到webapps目录下。(如果不放到此目录下,Tomcat服务器找不到)

  2. 第二步:在CATALINA_HOME\webapps目录下新建一个子目录名,例如:temp

  3. 第三步:在temp目录下新建资源文件,例如:login.html

    • 编写login.html文件的内容

  4. 第四步:启动tomcat服务器

  5. 第五步:打开浏览器,在浏览器地址栏上输入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中链接数据库,怎么做?

  1. Servlet是Java程序,所以在Servlet中完全可以编写JDBC代码连接数据库。

  2. 在一个webapp中去连接数据库,需要将驱动jar包放到WEB-INF/lib目录下。


Servlet对象的生命周期

  1. 什么是Servlet对象生命周期?

    • Servlet对象什么时候被创建?

    • Servlet对象什么时候被销毁?

    • Servlet对象创建了几个?

    • Servlet对象的生命周期表示:一个Servlet对象从出生到最后的死亡,整个过程是怎样的。

  2. Servlet对象是由谁来维护的?

    • Servlet对象的创建,对象上方法的调用,对象最终的销毁,Javaweb程序员是无权干预的。

    • Servlet对象的生命周期是由Tomcat服务器(WEB Server)全权负责的。

    • Tomcat服务器通常我们称为:WEB容器。(WEB Container)

    • WEB容器来管理Servlet对象的死活。

  3. 我们自己new的Servlet对象受WEB容器的管理吗?

    • 我们自己new的Servlet对象是不受WEB容器管理的。

    • WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),只有放到这个HashMap集合中的Servlet才能被WEB容器管理,自己new的Servlet对象不会被WEB容器管理。(自己new的Servlet对象不在容器当中)

    • web容器底层应该有一个HashMap这样的集合,在这个集合当中存储了Servlet对象和请求路径之间的关系。

  4. 默认情况下,服务器在启动的时候Servlet对象并不会被实例化。(如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有用户访问,显然这个Servlet对象是一个垃圾,没必要创建)

  5. 如果要Servlet启动的时候创建对象呢?

    • 在路径下加上<load-on-startup>0</load-on-startup>标签。中间写正整数(数字越小,优先级越高)(一般不写)

  6. 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方法只执行一次

  7. 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对象

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。