(10)Servlet编程重要(三部分:servlet的生命周期,Config对象,Context对象)

1 Servlet概念

                  1.1servlet的特点

                            1)sevlet是一个普通的java类,继承HttpServlet类。

                            2)其实只要是实现了Servlet接口的java类,才是一个Servlet类。

                            3)servlet程序需要交给tomcat服务器运行!

2 Servlet执行过程

                            浏览器:http://localhost:8080/day09/hello

            2.1步骤

                   前提: tomcat服务器启动时会把每个网站的web.xml文件加载进内存。

 

                            1)在浏览器输入;http://localhost:8080/day09/hello

                            2)  截取URL的字符串,得到需要访问的资源名称: /hello

                            3)在day09网站下的web.xml信息中搜索是否存在 /hello 匹配的url-pattern。

                            4)匹配到对应的url-pattern之后,取出当前映射信息中的servlet-name的名称,然后在web.xml信息中搜索是否存在一个相同名称的servlet-name的servlet配置信息。

                            5)找到对应的servlet配置信息之后,取出当前配置信息的servlet-class的内容

                                     字符串:gz.itcast.a_servlet.HelloServlet

                            6)创建HelloServlet对象,然后调用HelloServlet类中的方法。

                            7)Servlet就把内容返回给浏览器用户。

3 映射路径

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>gz.itcast.a_servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

4 缺省路径

      4.1 什么是缺省路径

                   在tomcat服务器内部配置了一个缺省路径<url-pattern>/</url-pattern>, 这个缺省路径在tomcat服务器内部被一个缺省Servlet(DefaultServlet)匹配。缺省的这个Servlet的作用是专门用于处理所有网站中的静态网页

5 Servlet的生命周期(重点)

     5.1 概念

                   研究servlet的生命周期,就是研究servlet这个在什么时候创建对象,在什么时候调用什么方法,在什么时候销毁对象。

                  

                   以前: new Student();

                   现在:  servlet是由tomcat服务器执行的生命周期。

                  

   5.2 Servlet的四个重要的生命周期方法

                            构造方法:创建servlet对象时调用,只调用1次,证明了sevlet是单例的。

                            init方法: 创建完对象之后调用。只调用1次。该方法用于初始化对象。

                            service方法:在每次请求时调用,调用n次。该方法入口方法,我们的逻辑代码在这里被调用。

                            destory方法:在servlet对象销毁之后调用。只调用1次。重新部署网站或者停止服务器,servlet对象就会销毁了。

 

5.3 用伪代码演示tomcat服务器如何调用四个方法

                   字符串:gz.itcast.a_servlet.HelloServlet

                   1)通过反射,创建HelloServlet的对象

                            1.1得到HelloServlet的CLass对象

                                               Classclass = Class.forName("gz.itcast.a_servlet.HelloServlet ")

                            1.2通过class对象调用构造方法

                                               Objectobj  =  class.newInstance();  调用无参的构造方法。  --1)构造方法被调用

 

                   2)通过反射,调用init方法

                                     2.1得到init方法对象

                                               Methodm = class.getDeclaraeMethod("init",ServletConfig.class);

                                     2.2调用方法

                                               m.invoke(obj,config);                      --2)init方法被调用

                  

                   3)通过反射,调用service方法

                                     3.1得到service方法对象

                                               Methodm =

                                               class.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);

                                     3.2调用方法

                                               m.invoke(obj,request,response);          --3service方法被调用

                           

                   4)通过反射,调用destroy方法

                                     4.1得到destroy方法对象

                                               Methodm= class.getDeclareMethod('destroy",null);

                                     4.2调用方法

                                               m.invoke(obj,null);                --4)destroy方法被调用

6 Servlet的线程并发问题

单实例多线程,这句话很重要,一次会话只有一个servlet对象

7 Servlet的init方法

              7.1 两个init方法作用

                            init(ServletConfig):这个有参数的init方法的作用就是Servlet的其中一个重要的生命周期方法。这个方法一定会被tomcat服务器调用。

                            init():这个无参的init方法的作用就是为了提供给开发者方便去覆盖,覆盖这个方法,可以在此方法编写初始化的逻辑。这个方法才是真的给开发者做初始化逻辑的方法。

 

                                     小结:

                                                        Servlet开发中涉及的对象:

                                                                 HttpservletRequest对象:请求对象

                                                                 HttpServletResponse对象:响应对象

                                                                 ServletConfig对象: servlet配置对象

                                                                 ServletContext对象: servlet的上下文对象

8 ServletConfig对象

              8.1 引入

                   servletconfig是配置对象,主要把servlet的初始化参数封装到这个对象中。一个网站中可能会存在多个ServletConfig对象,一个ServletConfig对象就封装了一个servlet的配置信息。

<servlet>
    <servlet-name>ConfigDemo</servlet-name>
    <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
    <!-- servlet的初始化参数 -->
    <init-param>
    	<param-name>path</param-name>
    	<param-value>e:/aaa.txt</param-value>
    </init-param>    
  </servlet>

在servlet中获取初始化参数

                                     config.getInitParameter("name");  根据参数名称获取参数值

                                     config.getInitParameterNames();   获取所有参数名称

9 ServletContext对象

       9.1 引入

                   ServletContext对象叫servlet上下文对象。 一个网站只会创建一个ServletContext对象。代表的是整个网站的环境信息。          

       9.2 获取ServletContext对象

                            this.getServletConfig().getServletContext();  通过ServletConfig对象来获取到ServletContext对象的!!

                   伪代码:

                            ServletContext对象:启动的时候创建

                            ServletConfig对象:调用init方法之前创建的,在ServletContext对象创建之前

                                    

                                     publicServletCofig{

                                               ServletContextcontext;

                                               publicServletConfig(context){

                                                        this.context=context;

                                               }

                                               publicServetContxt getServletContext(){

                                                        return;

                                               }

                                     }

                                    

                                     ServletConfigconfig = new ServletConfig(context);

                            publicMyServlet extends HttpSevlet{

 

                                               publlicinit(ServletConfig config){

                                                        SevletContextcontext= config. getServletContext();

                                               }

                            }

 

         9.3ServletContext的5大作用

                            1)获取web的上下文路径

                                             getContextPath()                 

                            2)获取全局参数

                                               getInitParameter(java.lang.String name) 

                                               getInitParameterNames() 

                            3)和域对象相关的

                                             setAttribute(java.lang.String name, java.lang.Object object) 

                                             getAttribute(java.lang.String name) 

                                             removeAttribute(java.lang.String name)

 

                                               什么是域对象?

                                               域对象在不同的资源之间来共享数据。保存数据,获取数据。

                                               Servlet三个域对象:

                                                                 ServletContext

                                                                 HttpServletRequest

                                                                 HttpSession

                                                                                                               

 

                            4)请求转发的

                                            RequestDispatcher(java.lang.String path)

 

                                     在servlet跳转页面:

                                     请求重定向:

                                               1)地址栏会发送改变,变成重定向到的地址。

                                               2)可以跳转到项目内的资源,也可以跳转项目外的资源

                                              3)浏览器向服务器发出两次请求,那么就不能使用请求来作为域对象来共享数据。

 

                                     请求转发:

                                               1)地址栏不会改变。

                                               2)只能跳转到项目内的资源,不能跳转到项目外的资源

                                               3)浏览器向服务器发出一次请求,那么可以使用请求作为域对象共享数据。

                                   

                            5)读取web项目的资源文件

                                               getRealPath(java.lang.String path) 

                                               getResourceAsStream(java.lang.String path) 

                                               getResource(java.lang.String path) 






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值