zoukankan      html  css  js  c++  java
  • javaWeb基础核心之一Servlet

      既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆。

      第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂。

      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。
     

      简单来说,servlet就是运行在服务器端的java程序。Servlet是javaEE的规范(接口),如果想将我们写的程序让客户端访问到,创建一个类实现Servlet接口。Servlet作用是动态生成页面。

      学习的时候都会说服务器一启动就会创建servlet对象,servlet里有几个方法,简单介绍一下:

      public void service(ServletRequest req, ServletResponse res) 

      这个是servlet的核心方法,程序代码放置到service方法中,每一次都会执行(每次客户端请求都会执行一次)

      其中的参数:

      ServletRequest:代表请求,内部封装的是请求的信息

      ServletResponse:代表响应,内部封装的要响应给客户端的信息

      一般来说,开发时继承HttpServlet,为什么不是实现servlet接口呢?

      查看一下源码就可以看到,自定义的Servlet 继承 HttpServlet 它又继承GenericServlet 实现Servlet接口 

      还有,继承httpservlet是没有service方法的,但是会有doGet和doPost方法

      为什么没有覆盖service方法 而是覆盖doGet和doPost?默认不是执行service方法吗?

      看一下源码就会发现啦:

      

    实际访问流程是:

    客户端提交请求---->tomcat容器---->创建servlet对象----->调用service方法----->HttpServlet的service(ServletRequest,ServletResponse)方法 ----->HttpServlet的service(HttpServletRequest,HttpServletResponst)----->doGet()/doPost()

      public void init(ServletConfig config) 

      init方法是Servlet的初始化方法,Servlet对象创建时调用的方法

      其中的参数:ServletConfig代表是Servlet的配置对象,内部封装的是此Servlet 的配置信息

      public void destroy()

      destory是Servlet销毁的方法,Servlet对象销毁的时候执行

      

      Servlet的基本配置(web.xml 了解一下)

      <servlet>

      <servlet-name>随意写</servlet-name>

      <servlet-class>Servlet的全包名</servlet-class>

      </servlet>

      <servlet-mapping>

      <serlvet-name>与上面的name一致</servlet-name>

      <url-pattern>/servlet对外访问的虚拟路径</url-pattern>

      </servlet-mapping>

      url-patten标签里的配置:

      完全匹配:访问虚拟的资源与配置的完全一样

      目录匹配:格式:/开始 *结束

      扩展名匹配:格式: 以*开始  以扩展名结束

     

     

      插一下静态资源访问过程:

      在页面访问index.html静态资源

      tomcat会按照index.html名字找一个servlet,找不到,会找缺省 servlet

      DefaultServlet内部帮你找一个名字叫index.html的静态资源,

      第一种结果:找到index.html资源 缺省的servlet逐行输出静态资源

      第二种结果:找不到 返回一个默认的错误页面404

      以myeclipse为例,创建web项目

      myeclipse里可以直接创建servlet文件,可以省去我们各种配置的麻烦。

      默认实现的方法我们实际上一般只需要勾选doget和dopost就可以啦,最常用的两种提交。

      mapping url就是我们设置虚拟目录的名字,在这写了就不用去xml里配置了。

      然后就可以在servlet写东西了。

      再介绍一些常用的方法吧!

      首先要介绍一个对象:

      ServletContext中文译成 Servlet上下文对象,代表的是一个Web应用的环境对象,内部封装的与web应用整体相关的数据。服务器一启动就会创建ServletContext对象,一个web应用只有一个ServletContext对象。

      获得这个对象有两个方法:

      config.getServletContext();

    (在自定义的Servlet中直接使用 getServletConfig();返回的就是一个config对象,它代表是Servlet对象的配置对象,ServletConfig对象内部封装的是该Servlet对象的配置信息,一个Servlet就有一个对应的ServletConfig对象。当Servlet对象创建时,web容器会调用init方法,同时会创建该Servlet对象的配置对象ServletConfig作为参数传递给init方法。)

      getServletContext();

      ServletContext的作用

      (1)获取web应用的初始化参数

      (2)ServletContext对象可以作为域对象存储数据

      域对象:区域对象,存数据

      只要是域对象,必然有下面三个方法

      setAttribute(name,value)---向域对象中设置值

      getAttribute(name)---从域中获取值

      removeAttribute(name)---从域中删除某个数据

      (3)获得web应用中的资源的绝对路径(这个比较常用)

      资源在服务器上的绝对路径  context.getRealPath(相对于web应用根目录地址);

      最后在贴一张简单明了的流程图,看到这张图可以容易理解servlet生态环境。

      顺带提一下Servlet的生命周期

      什么时候创建Servlet对象:

      默认第一次访问时创建Servlet对象,会将servlet放置到web容器的内存中, 等待为后面的访问服务,某一个Servlet对象只有一个。执行init方法

      什么时候销毁Servlet对象:

      服务器关闭或web应从服务器中移除Servlet销毁,销毁时会执行destory方法

      本文作者冯如,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处,有问题欢迎与我讨论,共同进步。

  • 相关阅读:
    解决mongod端口占用问题
    MongoDB操作
    ssh 带密码私钥 输入密码
    sequence
    使用plsql导入dmp文件缺少imp*.exe
    oracle查看锁表进程,杀掉锁表进程
    oracle
    常用shell命令
    ORA-03113: end-of-file on & ORA-07445
    ORA-39126: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS
  • 原文地址:https://www.cnblogs.com/fengru/p/5447761.html
Copyright © 2011-2022 走看看