java web应用容器容器_【java-Web】Web服务器 应用服务器以及web容器 理解

前言:今天看到一篇web服务器和应用服务器的关系,说实话。刚开始看到,我也不清楚这个概念。

所以就打算学习一波

1.什么是web服务器 应用服务器和web容器

web服务器可以理解为是以Http为核心,webUI为向导的应用。

应用服务器 以高负载 企业级特性 事务和队列 多通道通信 HTTP或更多的特性

84757bc4d386d95bd5f0d0d8bdde6391.png

2.什么是web容器

在java方法web容器一般是指servlet容器,servlet容器是与java Servlet交互的web容器的组件,

web容器负责管理Servlet的声明周期,把URL映射到特定的Servlet 确保URL请求拥有正确的访问权限和更多类似的服务。

总的来说,servlet容器就是用来运行你的servlet和维护他的生命周期的运行环境

3.什么是servlet,他们有什么作用

在java中,Servlet使你能够根据请求动态生成内容的服务端组件。

类加载器通过懒加载lazy-loading eagerloading.每一个请求都拥有一个线程 而一个servlet对象可以同时为多个线程服务,当servlet对象不在被使用时,他就被JVM当做垃圾回收掉

4.什么是ServletContext 他由谁创建

当Servlet容器启动时,他会部署并加载所有的web应用,当web应用被加载时。Servlet

会一次性的为每个应用创建Servlet上下文(ServletContext),并把它保存在内存中。

当Servet容器关闭时,他会卸载所有的web应用和ServlerContext.所有的Servlet Filter和Listenter

实例都会销毁。

11f8b134c7559659cd14ef27dd1aa2f8.png

5.ServletContext 定义了一组方法 Servlet使用这些方法来与他的Servet容器进行通信

在web应用的部署文件(deployment descriptor)标明“分布式”的情况下,web应用的每一个虚拟机都拥有一个上下文实例。在这种情况下,不能把Servlet上下文当做共享全局信息的变量(因为它的信息已经不具有全局性了)。可以使用外部资源来代替,比如数据库。

6.ServletRequest和ServletResponse从哪里进入生命周期

Servlet容器包含在web服务器中,web服务器监听来自特定的端口的Http请求。这个端口通常是80端口

当客户端发送一个Http请求时 Servlet容器会创建新的HttpSerlvetRequest和httpSerlvetRespons

对象,并且把他们传递给已经创建的Filter和URL模式与请求URL匹配的Servlet实例的方法,所有的这些

都使用同一个线程。

Request对象提供了获取Http请求的所有信息的入口,比如请求头和请求实体,

Response对象提供了控制和发送Http响应的便利方法,比如设置响应头和响应实体(通常是Jsp生成的HTml),当http响应被提交并结束后,request和response对象都会被销毁

f148c8bcd3514a7ca885ffcd4f9571db.png

7.如果管理Session cookie

当客户端第一次访问web应用或者第一次使用request.getSession()获取HttpSession时。

Servlet容器会创建session 生成一个Long类型的唯一Id(你可以使用session.getId);

并把它保存在服务器中的内存中,Servlet容器同样会在Http响应里设置一个cookie cookie的名称

JSessionID,并且cookie的值是session的唯一ID

8.如何确保多线程

所有的Http请求都在共享Serlvet和Filter这是java的一个很棒的特性,他是多线程的并且不同的

多线程可以使用同一个实例.否则为一个请求都重新创建一个实体会消费很多的资源

你要知道 你不应该使用Servlet或者Filter的实例变量来存放任何的请求或会话范围内的数据

这些数据会被其他Session的所有请求共享,这是非线程安全的。

代码演示

public class MyServlet extends HttpServlet

{

private Object thisIsNOTThreadSafe; //Don't to this

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

Object thisIsThreadSafe;

thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!

thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.

}

}

如中是因为每一个http请求都会创建一个MyServlet实例。在高并发的情况下,会出现成员变量不安全的因素。

所以为了应该将要操作的变量放到局部方法中。这样就能避免。

大概上就是这样 留个笔记 以后好复习--有什么不争取的 希望大家指正。qq 1137821448

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值