动态网页技术
随着互联网技术的逐渐普及和互联网需求的提高,旧的静态网页已不再适应。我们看到,今天的网页不仅是Flash,视频,等等,但很明显。
在过去,静态网页显示是无法解决的。为了解决这个问题,太阳公司提供了一个解决上述问题的技术,即servlet技术。
Servlet是Sun提供的开发动态Web资源的技术。
太阳公司在API中提供了servlet接口。如果用户想要使用一个动态的网络资源,即开发一个java程序将数据输出到浏览器,我们需要完成以下2个步骤。
写一个java类实现Servlet接口。
部署开发的java类的Web服务器。
二、servlet的运行过程:
servlet程序由Web服务器调用,Web服务器接收客户机的servlet访问请求:
1个Web服务器首先检查它是否已经加载并创建了servlet的实例对象。如果是这样,则第四步直接执行,否则,执行第二个步骤。
2。加载并创建servlet的实例对象。
三.调用servlet实例对象的init()方法。
创建封装HTTP请求消息和代表对象的HTTP响应消息httpservletresponse HttpServletRequest对象,然后调用服务()方法,通过servlet的请求和响应对象作为参数。
在4.web应用停止或重启,servlet引擎(在Web服务器的类调用servlet)将卸载Servlet调用销毁()前卸载Servlet方法。
三,servlet的生命周期:
1。当谈到生命周期时,我们必须提到循环的概念,那么生命周期的概念是什么
生命周期的定义:当一个事物诞生的时候,当它死了,在它的生存阶段的某个阶段,它将被事件触发,这被统称为事物的生命周期。
servlet的生命周期:
通常,服务器在servlet(servlet诞生时)第一次调用servlet中的servlet类,一旦创建,servlet实例将驻留在内存中,用于后续请求服务;直到Web容器退出,servlet对象将被销毁(servlet死亡)。
在servlet的整个生命周期中,servlet的init方法只有在servlet被创建时才会调用一次。
每个访问Servlet请求导致Servlet引擎调用servlet的服务方法一次。每个访问请求,servlet引擎创建一个新的HttpServletRequest请求对象和一个新的httpservletresponse响应对象。
两个对象作为参数传递的服务()方法的servlet,它是所谓的,和服务方法调用分别根据请求模式的doxxx方法。破坏()方法之前调用servlet被破坏。
2 . servlet接口的实现类:
我们知道,如果我们想要实现servlet接口,我们必须实现它的所有方法,但是里面的所有方法都不是我们想要的。那么这个方法在这个时候有什么用呢
因此,为了解决这个问题,我们通常没有实现接口,但将继承这个类的实现类,所以我们只需要实现我们想要的方式。
2.1sun提供常用的实现类:
Servlet接口中定义了两个默认实现类:太阳genericservlet,HttpServlet。
一个是servlet可以处理HTTP请求。它在原始servlet接口上添加了一些HTTP协议处理方法,这比servlet接口更强大。因此,开发人员通常应该在编写servlet时继承这个类,而不是直接实现servlet接口。
当HttpServlet实现了Servlet接口,它覆盖的服务方法。正文中的代码自动决定用户请求的方式。为了得到要求的文件,将调用doGet方法。如果使用POST请求,然后调用doPost方法。因此,开发商写servlet,
通常你只需要重写doGet或doPost方法,而不是覆盖的服务方法。
因为客户端访问资源的Web服务器的URL地址,如果servlet程序想被外界访问,它必须映射到一个servlet程序的URL地址,这是由元素和元素的web.xml文件来实现。
元素用于登记的servlet,它包含两个主要元素:和,分别建立servlet的注册名称和servlet的全称。
元素用于映射已注册servlet的外部访问路径。它包含两个子元素:和,用于指定servlet的注册名和servlet的外部访问路径:
复制代码代码如下所示:
U3000 U3000
servlet3
cn.baidu.serlvet.demo3servlet
U3000
servlet3
/ demo3
在2.2servlet一些小细节:
细节1:
同一个servlet可以映射到多个URL,即对多元素的子元素的设定值可以是同一个servlet注册名称。
在Servlet映射到URL也可以使用通配符,但有两个固定的格式:格式是*。扩展,另一种格式是在开头和结尾用()。
复制代码代码如下所示:
anyname
*的事。
anyname
动作/ *
细节2:
对于以下映射关系:
servlet1地图 / / * ABC
映射servlet2 /
servlet3地图 / ABC
servlet4地图做*。
问题:
当一个请求的URL / / / a.html ABC,ABC / *和servlet,这是 / *,响应
servlet引擎将调用servlet1。
当URL请求是/ ABC,两者都匹配时,哪个servlet响应
servlet引擎将调用servlet3。
当URL请求 / /一起都ABC,ABC / / *和*做匹配,该servlet响应。
servlet引擎将调用servlet1。
当请求/ a. URL,和*。做 / *匹配,该servlet响应
servlet引擎将调用servlet2。
当请求 / / /一起XXX YYY的URL,和*。做 / *匹配,该servlet响应
servlet引擎将调用servlet2。
细节3:
如果在元素中配置了一个元素,那么当Web应用程序启动时,它将加载并创建servlet的实例对象和init()方法来调用servlet实例对象。
举一个例子:uff1a
复制代码代码如下所示:
调用
org.apache.catalina.servlets.invokerservlet
二
目的:写一个Web应用initservlet,它被配置为启动时加载,创建整个Web应用程序所需的数据库表和数据。
细节4:线程安全
当对servlet客户端进行多个并发访问时,Web服务器为每个客户机请求创建一个线程,并在该线程增加中使用服务servlet方法,因此如果访问相同资源的服务方法,则可能导致线程安全问题。
如果一个servlet实现的singlethreadmodel接口,然后servlet引擎将调用其在单线程模式服务的方法。
没有一种方法是在singlethreadmodel接口定义的,只要对singlethreadmodel接口实现声明添加到servlet类的定义。
Servlet实现singlethreadmodel接口,servlet引擎还支持多线程并发访问servlet。它采用的方法是生成多个servlet实例对象,并发线程调用独立的servlet实例对象。
singlethreadmodel接口的实现并不能真正解决Servlet的线程安全问题,因为servlet引擎将创建Servlet对象的多个实例,真正解决多线程安全问题是指由多个线程Servlet对象的一个实例在同一时间的问题。
事实上,在Servlet API 2.4,singlethreadmodel已被标记为过时的(过时的)。
四,servlet中常用的对象:
1.servletconfig对象
1.1在servlet配置文件中,可以使用一个或多个标记来配置servlet的一些初始化参数。
1.2、当servlet配置初始化参数,Web容器自动初始化这些初始化参数ServletConfig对象创建servlet实例对象时。
当Servlet的init方法被调用时,该ServletConfig对象传递给servlet。此外,程序员可以通过ServletConfig对象获取当前servlet
初始化参数信息。
2.servletcontext对象
当2.1web容器启动时,它创建一个Web应用程序的一个相应的ServletContext对象,它表示当前的Web应用程序。
2.2servletconfig对象保持ServletContext对象的引用。当Servlet开发,开发者可以通过servletconfig.getservletcontext获得ServletContext对象。
2.3,因为在一个Web应用程序共享相同的ServletContext对象的所有servlet,servlet对象可以通过ServletContext对象沟通。
ServletContext对象通常被称为上下文域对象。