Servlet基础(2)

来源:互联网 发布:最大的建筑知乎 编辑:程序博客网 时间:2024/05/17 23:58

Servlet的执行流程
以Get方式为例,在前一篇里讲到的get方式请求HelloServlet

<a href="servlet/HelloServlet">

用户在网页上点击这个超链接,这个超链接请求的地址就是Servlet。以超链接这种方式的请求我们可以叫get请求。
用户在点击这个超链接之后,会提交给服务器,服务器会在web.xml中寻找与之对应的url地址,这里边我们的地址为”/servlet/HelloServlet”。提交给服务期之后,服务器就会在我们的配置文档中的servlet-mapping中去寻找相对应的servlet是哪一个。然后就找到了相对应的Servlet的名字,然后再去servlet标签中寻找相同servlet-name对应的处理类,即servlet-class。
于是就可以找到相对应的处理类,然后根据用户提交请求的方式来决定执行这个类中重写的doGet或者doPost方法,这里由于是超链接,所以就执行重写的doGet里边的方法。

<servlet>    <servlet-name>HelloServlet</servlet-name>    <servlet-class>servlet.HelloServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>HelloServlet</servlet-name>    <url-pattern>/servlet/HelloServlet</url-pattern>  </servlet-mapping>

Servlet生命周期
Servlet的生命要经历三个阶段
1.初始化阶段,调用init()方法。
在初始化方法之前,要调用这个类的构造方法,也就是要生成这个类的一个实例
2.响应客户请求阶段,调用service()阶段。由service()方法根据提交方式选择执行doGet()或者doPost()方法。
提交请求的方式是get方式则由service方法转去执行doGet方法,post方式的请求则转去执行doPost方法
3.终止阶段,调用destroy()方法。
服务器停止的时候调用
总结:当用户使用get方法时,先执行构造方法,然后执行初始化方法,再执行doGet方法,停止服务器时会执行destroy方法

在下列时刻Servlet容器装载servlet
1.Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的servlet标签之间添加如下代码<loadon-startup>1</loadon-startup>数字越小表示优先级越高。
所谓自动装载某些Servlet,就是启动时就会自动执行构造方法和初始化方法。
2.在Servlet容器启动后,客户首次向Servlet发送请求。
3.Servlet类文件被更新后,重新装载Servlet。
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

Servlet与九大内置对象
JSP九大内置对象:out、request、response、session、application、exception、page、pageContext、Config
JSP中的out等价于Servlet中的response.getWriter,从严格意义来说两者的类型是不匹配的,response.getWriter获得的是一个PrintWriter对象,而JSP中的内置对象out属于JspWriter类型对象。不过它们都可以用来给浏览器输出。
request对象在Servlet当中可以使用service方法中传进来的request参数来获得,或者通过doGet或者doPost方法传进来的request参数获得。
同样的道理,response对象也可以。
session内置对象可以通过request.getSession()来获取。
application可以通过getServletContext()来获取。
exception可以通过抛出异常的方式来获取。
page对应的就是this对象。
pageContext对应的就是pageContext对象。
Config参数可以getServletConfig函数来获取。