• web开发概述——Servelt技术


    web开发技术概述

    WEB,它用于表示Internet主机上(服务器)供外界访问的资源 Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处是用户很容易访问应用程序。用户只需要有浏览器即可,不需要再安装其他软件。

    应用程序有两种模式C/SB/S

    C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。

    B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助服务器运行,需要IE等浏览器来查看运行结果。

    B/S架构

    浏览器/服务器架构Browser/Server简称B/S能够很好地应用在广域网上,成为越来越多的企业的选择。 浏览器/服务器架构相对于其他几种应用程序体系结构的优点:

            1、这种架构采用Internet上标准的通信协议(通常是TCP/IP协议)作为客户机同服务器通信的协议。 这样可以使位于Internet任意位置的人都能够正常访问服务器。对于服务器来说,通过相应的Web服务和数据库服务可以对数据进行处理。对外采用标准的通信协议,以便共享数据

            2、在服务器上对数据进行处理,就处理的结果生成网页,以方便客户端直接下载

            3、在客户机上对数据的处理被进一步简化,将浏览器作为客户端的应用程序,以实现对数据的显示。 不再需要为客户端单独编写和安装其他类型的应用程序。这样,在客户端只需要安装一套内置浏览器的操作系统,如Windows或直接安装一套浏览器,就可以实现服务器上数据的访问。而浏览器是计算机的标准设备。

    web应用资源

    Internet上供外界访问的Web资源分为:

    静态web资源(htmlcssjs页面):指web页面中供人们浏览的数据始终是不变

    动态web资源(JSPPHPASP):指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

    常用静态web资源开发技术:htmlcssjs技术

    常用动态web资源开发技术: JSP/Servlet(JAVA)ASP(微软.net)PHP

    javaweb就是使用java技术开发web页面,供浏览器访问的项目。

            Web是一种分布式应用架构,旨在共享分布在网络上的各个Web服务器中的所有相互链接信息 。

            Web采用客户/服务器通信模式,客户与服务器之间用HTTP协议通信 。

            Web使用超级文本技术(HTML)来链接网络上的信息。信息存放在服务器端,客户机通过浏览器(IEChrome)就可以查找网络中的各个Web服务器上的信息。

    Web相关的一个概念是WWW(World Wide Web)WWW是指全球范围内的Web,它以Internet为网络平台,Internet是来自世界各地的众多相互连接的计算机和其他设备的集合,而WWW则是Internet的一种分布式应用结构。

    web工作原理

    1、浏览器根据用户输入的地址查找对应的服务器,不同的网站对应不同的服务器,这个服务器通常称为web服务器,可以接收浏览器发送的请求【DNS域名服务 】

    2、web服务器根据请求的内容调用不同的服务器端程序,服务器端程序通常也是一个服务器,称为应用服务器

    3、应用服务器接收到请求之后,查找相应的文件,加载并执行相应的任务,如果涉及数据处理,则需要与数据库服务器交互

    4、处理完数据,将处理结果返回给应用服务器,服务器端程序的执行结果通常是一个html文档。

    5、应用服务器把执行的结果返回给web服务器,web服务器再把这个结果返回给客户端浏览器 。

    6、浏览器解析html文档,然后把解析后的网页显示给最终用户。

    web应用详解

    客户端根据用户输入的地址信息请求服务器,服务器在接收到用户的请求后进行处理,然后将处理结果响应给客户端,客户端将响应结果渲染显示给用户---请求响应模型

    请求:客户端根据用户地址信息将数据发送给服务器的过程

    响应:服务器将请求的处理结果发送给浏览器的过程

    协议:是指通信的双方,在通信流程或内容格式上,共同遵守的标准

    web开发又分为前端和后端。前端主要负责页面的展示,后端则是业务逻辑的实现,简单理解:能看到的界面就是前端所产生的,后端是与数据打交道,数据处理完后交由前端以符合人审美的方式显现出。


    简介HTTP协议

    超文本传输协议Hyper Text Transfer Protocol是互联网上应用最为广泛的一种网络协议,是互联网的基础协议,也是网页开发的必备知识。Http协议是TCP/IP协议簇中应用层协议,实际上就是在TCP数据传输的基础上添加了数据传输的格式规定。

    是一个基于请求与响应模式的、无状态的的协议,基于TCP的连接方式,HTTP 1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。

    作用:规范了浏览器和服务器的数据交互

    http工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。首先DNS地址解析

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户 来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    http总结1DNS解析。2TCP连接。3、发送HTTP请求。4、服务器处理请求并返回HTTP文。5、浏览器解析渲染页面。6、连接结束

    HTTP协议特点

    1、简单快速,由于协议简单,使用http服务器的程序规模小,因而通信速度很快,适用于分布式超媒体信息系统

    2、灵活。http允许传输任意类型的数据对象,正在传输的数据格式类型由Content-Type加以标记

    3、不保持连接【断开式连接,http1.1连接默认都是持久连接】。限制每次连接只处理一个请求,服务器处理完毕客户端的请求后,在收到客户端应答后会自动断开连接。采用这种方式可以节省传输时间,节约服务器资源的占用

    4、无状态。http协议是无状态协议。无状态是指协议对于事务处理没有记忆功能。缺少状态意味着如果后续处理需要前面的信息,则只能重传。这样可能导致每次连接传送的数据量增大。另一方面在服务器不需要先前信息时应答方式就比较快

    HTTP协议响应

    在接收和解释请求消息后,服务器返回一个HTTP响应消息。

    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。最重要的是响应状态码。

    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值

    1xx指示信息--表示请求已接收,继续处理

    2xx成功--表示请求已被成功接收、理解、接受

    3xx重定向--要完成请求必须进行更进一步的操作

    4xx客户端错误--请求有语法错误或请求无法实现

    5xx服务器端错误--服务器未能实现合法的请求

    常见状态代码:

    200 OK客户端请求成功

    304 NOT MODIFIED该资源在上次请求之后没有任何修改,这通常用于浏览器的缓存机制

    400 Bad Request客户端请求有语法错误,不能被服务器所理解

    401 Unauthorized请求未经授权

    403 Forbidden服务器收到请求,但是拒绝提供服务

    404 Not Found请求资源不存在,如输入了错误的URL

    500 Internal Server Error服务器发生不可预期的错误。


    Servlet技术

    Servlet规范是JavaEE规范中的一个部分,是用于扩展服务器功能的运行在服务器中的小型Java程序(即服务器端小应用程序),是实现了Servlet接口通过http接收和响应web客户端请求的类

    Servlet概述

    Servlet是一种用于扩展服务器功能的服务器端组件技术 ,用于实现动态网页编程

    要求直接或者间接的实现Servlet接口

    运行在服务器端,执行结果是一个html文档

    有三种:Servlet Filter xxxListener

    实例演示:

    Servlet接口不在JavaSE中,需要因为servlet-api依赖

    1. <dependency>
    2. <groupId>javax.servletgroupId>
    3. <artifactId>javax.servlet-apiartifactId>
    4. <version>4.0.1version>
    5. <scope>providedscope> scope=provider表示该jar包在编译阶段使用,并不会打包到应用中dependency>

    1、定义一个类实现Servlet接口

    1. public class HelloServlet implements Servlet { //所谓的Servlet就是直接或者间接的实现Servlet接口
    2. @Override
    3. public void init(ServletConfig config) throws ServletException {
    4. }
    5. @Override
    6. public ServletConfig getServletConfig() {
    7. return null;
    8. }
    9. @Override
    10. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { // Servlet组件用于对外提供服务的方法
    11. //接收用户提交数据,不管是使用get还是post提交
    12. String username=req.getParameter("username");
    13. if(username==null ||username.trim().length()<1)
    14. username="Servlet";
    15. String message="Hello "+username+"!";
    16. //使用rep生成针对客户端请求的响应信息
    17. PrintWriter pw=res.getWriter();
    18. pw.println("

      "+message+"

      "
      );//生成html文档
    19. pw.flush();
    20. pw.close();
    21. }
    22. @Override
    23. public String getServletInfo() {
    24. return null;
    25. }
    26. @Override
    27. public void destroy() {
    28. }
    29. }

    2、在web应用的核心配置文件web.xml中将Servlet和一个URL地址建立对应关系,当用户请求对应的URL地址时则触发Servlet运行

    Servlet类中没有main方法,所以程序的执行是由服务器按照规则进行调用的

    由客户端对特定路径发起请求触发执行

    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    4. http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <servlet>
    7. <servlet-name>helloServletservlet-name>
    8. <servlet-class>com.yan.action.HelloServletservlet-class>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>helloServletservlet-name>
    12. <url-pattern>/hello.dourl-pattern>
    13. servlet-mapping>
    14. web-app>

    3、启动Tomcat服务器

    4、在浏览器中输入请求URL地址 http://localhost:8080/demo1_war/hello.do

    5、使用get提交数据 http://localhost:8080/demo1_war/hello.do?username=zhangsan

    Servlet的特征

    一般采用单实例多线程的方式对外提供服务,一个客户请求对应一个线程

    如果在Servlet类中定义属性,则需要考虑线程安全问题

            1、Servlet用MIME过滤数据,由javax.servletjavax.servlet.http两个包组成Java Servlet API框架 。

            2、编写Servlet必须直接或间接实现作为Servlet的核心javax.servlet.Servlet接口,通常是实现javax.servlet.http.HttpServlet的子类,可以覆盖继承doGet()或者doPost()方法,两者分别对应于Http(s)中的Get请求和Post请求 。

    Servlet的优点

    1、高效。

    在服务器上仅有一个Java虚拟机在运行,它的优势在于当多个来自客户端的请求进行访问时,Servlet为每个请求分配一个线程而不是进程

    Servlet加载执行后会常驻服务器内存中,当再次受到客户端的请求时,服务器会产生新的线程而不是进程为客户端服务,这样就提高了响应速度。 -- Java是最差的内存性价比

    2、方便。

    Servlet提供了大量的实用工具例程,例如处理很难完成的HTML表单数据、读取和设置HTTP头、处理Cookie和跟踪会话等。

    3、跨平台可移植性。

    Servlet是用Java类编写的,它可以在不同的操作系统平台和不同的应用服务器平台下运行。

    4、灵活性和可扩展性。

    采用Servlet开发的Web应用程序,由于Java类的继承性、构造函数等特点,使得其应用灵活,可随意扩展。

    5、共享数据。

    Servlet之间通过共享数据可以很容易地实现数据库连接池。它能方便地实现管理用户请求,简化Session和获取前一页面信息的操作。而在CGI之间通信则很差。由于每个CGI程序的调用都开始一个新的进程,调用间通信通常要通过文件进行,因而相当缓慢。同一台服务器上的不同CGI程序之间的通信也相当麻烦。

    6、安全。

    有些CGI版本有明显的安全弱点。即使是使用最新的标准和PERL等语言,系统也没有基本安全框架。而Java定义有完整的安全机制,包括SSL/CA认证、安全政策等规范。

    Servlet具有类型检查特征,并利用Java的垃圾收集和没有指针的设计,使得Servlet避免了内存管理等问题 。

    Servlet缺陷

            不能所见即所得的实现页面的开发和开发测试不方便

            生成html文档需要通过一系列的输出完成,非常的繁琐低效

    解决方案是JSP

    Servlet生命周期

    1、当前应用的所有Servlet接口实现类的实例对象,只能由服务器负责创建,开发人不能手动创

    2、默认情况下以单实例多线程的方式对外提供服务

    3、Servlet实例一旦创建则常驻内存,只有当服务器资源不足而导致当前Servlet对象被调度或者服务器关闭时才会被销毁

    4、默认情况下,服务器接收到对于当前Servlet接口实现类的第一次请求时自动创建这个Servlet接口实现类的实例对象

            可以手动配置要求服务器在启动时自动创建某个Servlet接口实现类对象

  • 相关阅读:
    治疗 | 如何识别和处理消极想法
    【C++14算法】make_unique
    SpringCloud Alibaba-Sentinel保姆级教程
    Java教程之String类的底层原理和版本演变
    如何在本地搭建Oracle数据库实现公网环境下通过PLSQL工具进行远程访问
    B模块数据库安全加固
    Ajax+Axios+前后端分离+YApi+Vue-ElementUI组件+Vue路由+nginx【全详解】
    【JavaGuide学习笔记】Day.1
    Kafka SASL认证授权(六)全方位性能测试
    Twitter图片数据优化的细节
  • 原文地址:https://blog.csdn.net/qq_51074048/article/details/126191277