Day15_什么是Servlet;Servlet的入门使用-xml配置方式;Servlet执行流程;生命周期(笔记)

Day15_什么是Servlet;Servlet的入门使用-xml配置方式;Servlet执行流程;生命周期(笔记)

1.Servlet的认识

1.1 什么是servlet?

Servlet(Server Applet)是Java
Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web
Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

1.2 Servlet的本质是什么?

一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。
Servlet的本质:就是一个普通java类型,继承HttpServlet,重写这个类中doGet()/或者doPost()方法(这两个方法常用的)

2.Servlet的入门使用----前期使用xml配置方式(重点掌握)

//第一步:新建一个包,在包上右键new,找到create new servlet  起一个类名,取消最下边的对钩,点击ok
//这个类会继承HttpServlet类,里边重写doget和dopost方法
public class MyFirstServlet  extends HttpServlet {
    //以后执行前端的get提交(接收前端的请求:get请求)
    @Override                       //请求对象 request               响应对象 response
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //控制台输出
        System.out.println("进入servlet了....");
        //解决服务器响应给浏览器中文乱码
        response.setContentType("text/html;charset=utf-8");

        //服务器响应给浏览器
        response.getWriter().write("Hello,这是我第一个Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //将doget复用一下 :因为get提交和post提交---这两个方法都可以获取前端的参数
        doGet(req,resp);
    }
}
<!--在web下边的WEB-INF下边的web.xml里边写如下代码-->
<!--在web-app标签中书写-->
 	<!--servelt的基本配置-->
    <servlet>
        <!--一般情况:servlet名称就是当前类名-->
        <servlet-name>MyFirstServlet</servlet-name>
        <!--当前类的全限定名称-->
        <servlet-class>com.qf.firstservlet_01.MyFirstServlet</servlet-class>
    </servlet>
    <!--servlet的映射配置-->
    <servlet-mapping>
        <!--这个servlet名称和上面的名称必须一致-->
        <servlet-name>MyFirstServlet</servlet-name>
        <!--请求servlet的访问路径:必须以"/开头",而且不能以"/"结束,自己给你的servlet访问路径起一个名字

                精确匹配 "/映射路径名称",必须唯一
        -->
        <url-pattern>/myFirst</url-pattern>
    </servlet-mapping>



<!--servlet创建对象以及初始化时机 :在tomcat容器启动的时候创建并初始化
            数字越大,优先级越小-->
        <load-on-startup>1</load-on-startup>

3.Servlet的执行流程(识记----理解)

Servlet容器的工作流程:
为了解耦,HTTP服务器不直接调用Servlet,而是把请求交给Servlet容器来处理,那Servlet容器又是怎么工作的呢?

当客户请求某个资源时,HTTP服务器会用一个ServletREquest对象把客户的请求信息封装起来,
然后调用servlet容器的serbice方法,Servlet容器拿到请求后,
根据请求的URL和Servlet的映射关系,找到相应的Servlet,
如果Servlet还没有被加载,就用反射机创建这个Servlet,
并调用Servlet的init方法来完成初始化,
接着调用Servlet的service方法来处理请求,
把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端.


1.浏览器向服务器发送请求
2.这个都是tomcat容器完成的事情,解析web.xml
	2.1 通过/myFirst--->web.xml里面的url-pattern的配置
	2.2 通过<url-pattern>--->获取到对应的servlet-name的名称--->MyFirstServlet
	2.3 ---获取Servlet里面的基本配置名称:MyFirstServlet
	2.4 通过servlet基本配置中的servlet-name获取它对应的  
		servlet-class--->com.bing.firstservlet_01.MyFirst  当前类的全限定名称
	2.5 web容器----通过全限定名称  伪代码:
		Class clazz = Class.forName("om.bing.firstservlet_01.MyFirst");
	2.6 创建当前类对象
		Object obj = clazz.newInstance();
	2.7 发射的方式获取当前类中的成员方法Method类对象
		Method m = clazz.getDeclareMethod("doGet",HttpServletRequest.class,HttpServletResponse.class);
		受保护的/私有方法,不能直接访问,通过下边的方法
		m.setAccessible(true);//取消Java语言访问检查
	2.8 调用doGet方法
		m.invoke(obj,request,response);
3.解析doGet方法---通过响应对象 给浏览器"Hello,这是我的第一个Servlet"

4.Servlet里面的一些生命周期

Servlet是一个单例的:
servlet默认创建的时机:
在访问servlet的时候才会创建当前类对象----无参构造方法执行一次,以及init(ServletConfig config):执行一次
service():方法 称为,servlet入口(业务服务方法),可以调用多次
detroy():当前tomcat正常关闭,servlet对象被销毁---->交给jvm的垃圾回收线程来回收没有更多引用的对象!

//什么时机创建Servlet对象,什么时候销毁

/**
 * Servlet的生命周期: (面试题)
 *
 * Servlet本质就单例:
 *
 * 只要访问servlet----内存中始终只有一个对象
 *          无参构造方法被调用一次----------->tomcat容器通过反射的方式,创建一次对象
 *          init(ServletConfig config)----->被初始化一次 :初始化时机---->默认在访问servlet的路径的时候,创建并初始化
 *          service方法:-------->不断的被调用----->程序的入口--一般开发中覆盖都是具体的业务方法doGet()/doPost()
 *         destroy方法:销毁方法---->当前tomcat服务器正常关闭----destroy方法执行,要将这个对象内存中释放掉--交给垃圾回收器
 *
 */
public class LifeServlet extends HttpServlet {


    //无参构造方法
    public LifeServlet(){
        System.out.println("LifeServlet的对象被创建了....");
    }

    //重写void init(ServletConfig var1) :servlet的初始化
    @Override
    public void init(ServletConfig config) throws ServletException {
        //ServletConfig ---接口----称为"Servlet配置对象",每一个Servlet都有自己的 配置对象
        //方法: String getServletName(); 可以获取当前Servlet名称
        System.out.println(config.getServletName()+"被初始化了,init方法被调用!");
    }

    //程序的入口:业务服务方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service方法被调用了");
    }

    //销毁

    @Override
    public void destroy() {
        System.out.println("servlet被销毁了....");
    }
}

//<!--servlet创建对象以及初始化时机 :在tomcat容器启动的时候创建并初始化
//            数字越大,优先级越小-->
//        <load-on-startup>1</load-on-startup>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值