Java学习之:JavaWeb

JavaWeb

1、基本概念

  • JavaWeb,是一种使用 Java技术解决相关 web互联网领域的技术栈。网络由:网络服务端和网络客户端两部分组成。客户端应用 Java的 Java Applet虽然很少使用,但 Java在服务器端的应用非常丰富,如 Servlet, JSP,第三方框架等。JavaScript技术给 Web领域的发展注入了强大的动力。

2、常见的服务器

  1. Tomcat:
    Tomcat服务器是一种免费的、开放源代码的 Web应用服务器,属于轻量级应用服务器,广泛用于中小型系统和并发访问用户,是开发和调试 JSP程序的首选。

  2. WebLogic:
    它是一个 Java应用服务器,用于开发、集成、部署和管理大型分布式 Web、网络和数据库应用程序。在大型网络应用的开发、集成、部署和管理中引入 Java的动态功能和 Java企业标准的安全性。

  3. WebSphere:
    它是 IBM 的软件平台。WebSphere Application Server 是该设施的基础,其他所有产品都在它之上运行。WebSphere Process Server 基于 WebSphere Application Server 和 WebSphere Enterprise Service Bus,它为面向服务的体系结构 (SOA) 的模块化应用程序提供了基础,并支持应用业务规则,以驱动支持业务流程的应用程序。

  4. JBoss:
    在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。

  5. Resin:
    Resin是CAUCHO公司的产品,是一个application server,对servlet和JSP提供了良好的支持,性能也比较优良,Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强。

3、Http协议

  • HTTP协议称为超文本传输协议,是客户端与服务器通信的一种标准。客户端和副武器都遵循HTTP协议,就能从彼此发送的信息中提取自己想要的数据。
  • 特点:http协议遵循请求/相应模型;由于每次请求/相应后,服务器和客户端的链接会断开,这样服务器会认为每次请求的用户都是新用户。http协议是一种无状态的协议。
    http协议占用80端口
    http协议工作流程
    1、客户端和服务器建立连接
    2、客户端向服务器发送http请求
    3、服务器产生http响应,回发给客户端
    4、关闭连接
  • http协议的请求信息
    组成:
    请求行:描述请求方式,请求URL地址,http协议的版本
    请求头:以键值对方式,描述客服机相关的信息。
    空行:标识请求头的结束
    消息体(POST):描述客户端请求的表单数据,数据库
    请求方式:
    GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE,CONNECT
  • 什么是GET请求:
    用户在浏览器中输入网址
    用户点击超链接
    用户提交表单,表单的method属性为GET或默认
  • 什么是POST请求:
    用户提交表单,表单的method属性为POST
  • GET请求和POST请求的区别
    1、流格式的区别。GET请求的表单数据是附加在URL后面的,所以没有消息体。而POST请求有消息体,在消息体中描述表单数据。
    2、用途的区别。GET请求主要用于服务器资源的查找。而POST请求主要用于数据的传输,也就是如何将客户端本地的数据提交给服务器处理。
    3、传输性能的区别。
    1、GET方式只能传输小文本数据,而POST方式可以传输大文本数据,而且可以传输二进制数据
    2、GET方式提交表单数据时,会在浏览器地址栏中显示表单数据,很不安全。而POST方式表单数据在消息体中,提交表单时,浏览器地址栏中不会显示表单数据,相对安全。
    3、GET方式在浏览器中可以缓存,可以通过后退键回到之前的网页。而POST方式不会缓存。
    http协议的响应信息
    组成
    1、状态行:描述http版本、状态码,以及响应描述
    2、响应头:以键值对方式描述服务器相关的信息
    3、空行:表示响应头的结束
    4、消息体:服务器发送给客户端的具体的数据
    状态码
    100-199:表示信息代码,表示客户端采取的其他动作,请求正在进行
    200-299:表示客户端请求成功
    300-399:表示已与已经移走的资源文件,指示新的地址
    400-499:表示由客户端引发的错误
    500-599:表示服务器端引发的错误
  • MIME类型
    MIME类型是设定某种扩展名的文件,用一种应用程序来打开的方式类型。当扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
    常见的MIME类型:
    text/html:html网页数据
    image/jpeg:jpg图片数据
    application/json:json数据
    text/xml:xml数据

4、Web容器

  • 在java中,WEB容器完成底层操作。预留Servlet接口,交给开发者书写业务操作。WEB容器调用Servlet业务方法,动态产生响应信息。

  • WEB容器的作用:
    1、通信支持,WEB容器可以将请求响应信息封装成请求和响应对象,以便更好的提取客户端的请求数据,以及更好的发送数据到客户端。
    2、Servlet生命周期管理
    Servlet是Servlet规范中预留给开发者书写业务操作的接口。WEB容器负责调用Servlet的业务方法,Servlet对象的产生、销毁、方法调用都由WEB容器产负责。
    3、多线程的支持
    WEB容器负责多线程的产生、销毁、线程同步等。
    4、jsp支持
    WEB容器提供jsp引擎的支持,将jsp页面翻译成java文件
    5、处理安全性

  • WEB服务器的缺陷:
    传统的WEB服务器在产生响应时,只能产生静态的html数据,极大的影响响应信息的灵活性。
    解决方案是,在WEB服务器之后,增加辅助应用。辅助应用可以在WEB服务器接收客户端请求后,进行一系列的业务处理,并以数据库为介质,完成信息的保存和提取,从而动态的产生响应信息。
    java提供辅助应用的解决方案是:WEB容器+Servlet。

5、Servlet

  • 什么是Servlet?
    Servlet是运行在Web服务器或应用服务器上的Java程序,是Web容器和开发者业务组件通信的标准。由Sun规范了其功能;
    开发者通过实现Servlet接口书写业务操作,Web容器通过Servlet接口调用方法,可以屏蔽开发者业务类的差异;
    Servlet由容器来管理生命周期与Web服务器交互。

  • Servlet的API结构:
    在Servlet规范中,Servlet是业务接口,提供service方法,供开发者书写业务操作。ServletConfig是配置接口,用于配置Servlet相关的信息;
    GenericServlet同时实现了Servlet接口和ServletConfig接口,并将两个接口的大部分方法提供了简单实现,但是没有实现service方法,该方法需要由不同的子类根据不同协议的特点,分别书写;
    HttpServlet是GenericServlet的子类,根据Http协议的特点重写了service方法,该service方法根据不同的请求方式分别调用"do…()",如果开发者使用http协议,那么,只需要继承HttpServlet,重写doGet和doPost就可以了。

  • Servlet生命周期:
    1、容器加载并实例化Servlet;
    2、调用init方法完成初始化;
    3、当请求到达,调用service方法,处理请求,产生响应;
    4、销毁阶段,调用destroy()方法,完成资源清理;
    在整个生命周期中,1,2,4都只进行一次,只有第3步每次请求都会执行。而Servlet实现类是一个单实例,多线程的类。

6、状态跟踪

  • 因为http协议是一种无状态的协议,当请求和响应完成后,会断开连接,以释放服务器的内存资源。所以服务器无法保存客户端的状态,服务器会认为每次请求的客户端都是新用户。但是,很多时候,我们需要得到客户端的状态,完成一系列的商务活动,这时候就需要状态跟踪。
  • 状态跟踪的四种方式:
    1.隐藏表单:
    在客户端表单中添加隐藏表单,在隐藏表单中,提交代表该客户的唯一标识。服务器在两次得到用户唯一标识时,发现两次的唯一标识一致,就认为是同一个用户。
  • 缺点:
    1、不同客户的唯一标识需要开发者生成,在服务器端也需要开发者对不同的用户进行身份的识别;
    2、在客户端的每个网页中都需要添加代表身份的唯一标识,实现比较繁琐。

2.cookie:

  • 工作流程:客户端请求服务器,服务器发送cookie信息给客户端。在产生响应时,会产生Set-cookie响应头,在该响应头中,以键值对方式描述cookie信息。响应信息到达客户端以后,会将cookie信息存储在客户端,当客户端再次发出请求,会将之前服务器发送给客户端的cookie信息再以Cookie请求头方式发送给服务器,服务器得到的信息和发送的信息是一致的,就认为是同一用户。
  • 优点:
    在同一个网站中,可以在用户访问不同资源时,都可以将cookie信息发送给服务器
  • 缺点:
    1、代表不同用户的唯一标识,同样由开发者编写,服务器端也需要进行不同身份的识别;
    2、cookie信息存放在客户端,容易引起安全隐患。

3.session

  • 工作流程:客户端访问服务器,服务器为了跟踪该用户的信息,为该用户产生一个唯一session对象同时为该session对象产生一个唯一标识sessionId。为了管理众多用户的session信息,以sessionId为键,以session对象为值,将session信息存放在Map集合中。
    在产生响应时,服务器将sessionId以Set-cookie以响应头的方式发送给客户端。客户端再次请求服务器时,会将sessionId再以cookie请求头的方式发送给服务器。服务器得到sessionId后从Map集合中取出session对象,从而跟踪状态。
  • 优点:
    1、数据存储在服务器,安全。
    2、session能保存Object类型数据,也就是说能存储任意数据。
    3、可存储的数据大小,理论上是无限制的。
  • 缺点:
    因为数据存储在服务器端,当用户比较多时,会占用服务器大量的内存空间,服务器资源很容易被耗尽。

4.URL重写

  • 由于cookie会引起一些安全隐患,所以有些用户为了安全,会在浏览器中禁用cookie,这样当服务器以cookie方式发送sessionId到客户端时,客户端无法保存sessionId,当客户端再次请求服务器时,由于没有sessionId提交服务器,服务器就认为是新用户,会重新分配新的session对象。这样无法跟踪客户端的状态。
  • 解决方案是采用URL重写的方式:
    URL重写是在请求的URL路径后,添加sessionId,这样sessionId就不是以cookie方式发送给服务器的,所以,客户端即使禁用cookie,同时可以将sessionId发送给服务器,服务器也能跟踪到客户端的状态
    <a href="/lovobook;jsessionId=???>Click<./a>

7、对象作用域

  • 在开发中,很多时候需要多次请求或多个用户之间进行数据共享。在Servlet的规范中,提供了三种对象进行数据的共享。
  • equest:
    在request请求对象中,绑定的共享数据,只在一次请求、响应之内有效。
  • session:
    在session会话对象中,绑定的数据可以在同一个用户的多次请求中有效。
  • ServletContext:
    在ServletContext上下文对象中,绑定的数据可以在不用的用户,不同的请求之内共享,是一种全局的共享数据。

8、监听器

  • 监听器主要用于,监听session,request,ServletContext这三个对象里存取数据的变化
  • 分类
    1、监听三个作用域对象的生命周期。在三个作用域对象创建和销毁时,执行一些业务操作。
    2、监听三个作用域对象中共享数据的变化。在三个作用域对象添加、删除、修改共享数据时,执行一些业务操作。

9、过滤器

  • 过滤器是驻留在Web服务器上的Web组件,过滤从客户端传递到服务器端的请求和响应。
  • 过滤器可以更改请求的内容,或者重新设置请求头,然后再将请求传递给目标资源
  • 在Web应用程序中部署过滤器,对客户端和目标资源来说都是透明的,他们并不需要知道过滤器的存在。
  • 过滤器链:
    在一个Web应用程序中,可以注册多个过滤器,多个过滤器之间的过滤范围可能彼此重叠。这样,一个请求到达飞起时,可能会经过几个过滤器,这就形成了过滤器链。
    过滤器链执行的顺序为,先注册的过滤器先执行,后注册的过滤器后执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值