简述java serlvet知识原理(阿里面试没答好)

serlvet 是什么

servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面。servlet作为浏览器或者http客户端发出请求,http服务端上的数据库或者应用的中间层。Servlet是用Java编写的Server端程序,它与协议和平台无关(当我们需要一个servlet时候,自己定义个类文件,继承HttpSerlvet,并重写doGet,doPost方法)。Servlet运行于Java服务器中(如tomcat容器)。

serlvet如何生成

首先明白了serlvet是什么,在web中,我们需要在web.xml文件中对serlvet进行配置(或者用注解的方法对serlvet进行配置)如下

<servlet>

<servlet-name>hello</servlet-name>

<servlet-class>cn.Hym.servlet.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/helloworld</url-pattern>

</servlet-mapping>

serlvet的生命周期

实例化(在Servlet容器中对serlvet进行实例化)→初始化(调用容器中的init()方法)→服务(请求servlet则调用容器中的service()方法)→销毁(调用容器中的destroy()方法)

初始化步骤

init(),主要是执行serlvet实例化之后,需要进行的一些一次性操作(如对servlet的某个参数设置初始值),可以通过ServletConfig配置对象,获取初始化参数,访问ServletContext上下文环境;

servletContext是什么

 当我们使用tomcat时候,它为我们这个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,而这个servletContext中能共享数据,和管理服务器中相关资源。它可以作为整个web配置公共信息等,可以这样认为,一个web项目中,就会存在一个servletContext,而这个servletContext是唯一的(是不是感觉有点像JSP中的application)。而serlvetContext通常也会被称为context域对象。

如何对请求进行处理的?

servlet容器封装Request和Response对象传给对应的servlet的service方法,对于HttpServlet,就是HttpServletRequest和HttpServletResponse; HttpServlet中使用模板方法模式,service方法根据HTTP请求方法进一步分派到doGet,doPost等不同的方法来进行处理(这里说明了为什么我们继承了HttpServlet并不去重写service()方法,因为该方法已经为我们写好了根据http请求方法进行分派到doGet()还是doPost()方法中,并在使用了缓存机制,所以我们不需要对service()方法进行重写)

扩展问题,servletContext,和application有什么关系?首先jsp和serlvet的区别是什么?可以这样认为,因为jsp的全名为java server page,即java服务器生成页面。当tomcat运行时候会进行这样一个过程为:Tomcat服务器会将某个jsp源文件转译为某个.java文件的serlvet,然后通过编译后形成某个.class类文件,然后执行整个serlvet的生命周期,然后在原来的jsp文件中的用于显示的标签符,都可以用输出流进行println出来。这样以来,JSP的原型还是serlvet,这也导致了,为什么jsp在第一次运行时候,速度相对来说比较慢。但之后速度和servlet并无区别。正因为如此,所以servletContext和application本质上是一个东西。在jsp变成这个过程中的编译部分时,有这样一段代码

servletContext application = null;

application = pageContext.getservletContext();(注:pageContext对象代表页面的上下文)

这段代码充分的说明了,SerlvetContext 和application 他们之间的关系.

  

猜你喜欢

转载自blog.csdn.net/hym740639005/article/details/81275087