JAVAweb之servlet 2018-04-07

Servlet技术(重点)

Servlet简介

1.什么是Servlet:以后看javaee的文档。

    * Servlet是一个接口,下面有5个方法。

    * Servlet有两个实现类,GenericServlet和HttpServlet

2.Servlet作用:

    * Servlet是一个小的java程序,运行在服务器端。

    * Servlet接收和响应从客户端发送过来的请求,使用的HTTP的协议。

    * Servlet开发中的角色(看图)

编写一个Servlet程序

1.编写一个类,实现Servlet接口,重写5个方法。

2.在web.xml文件中编写Servlet配置文件(记住)


     


        ServletDemo1


        cn.itcast.servlet.ServletDemo1



     


        ServletDemo1


        /demo1


3.把day09项目发布到服务器中,启动服务器,访问ServletDemo1的程序。

4.Servlet被访问的浏览器

Servlet生命周期(面试题)

1.什么是生命周期:从人的角度人的出生、服务社会、死亡。

2.Servlet实例的生命周期:从Servlet实例被创建,提供服务,Servlet销毁。在生命周期提供一些方法。

3.生命周期相关的方法

    * Servlet被创建之后(被服务器创建),立即调用init方法初始化Servlet init()

    * 从客户端发送过来的任何请求,都会使用service方法进行处理。          service()

    * Servlet从服务器中移除,调用destroy方法进行销毁的操作.                destroy()

4.总结:Servlet实例被Tomcat服务器来创建,第一次访问的时候创建(在内存有一个实例(单例模式)),立即调用init方法进行初始化的操作,使用service方法对外提供服务(有一个请求,实例开启一个新线程,处理请求的内容),service有一次请求,service被调用一次。Tomcat服务器关闭或者移除项目的时候,Servlet被销毁,但是在销毁之前调用destroy方法进行一些销毁操作(释放一些资源),调用destory的方法一次。

Servlet在Tomcat服务器怎么运行的

1.看图03

Servlet的类之间的关系

1.Servlet接口

2.GenericServlet实现类

3.HttpServlet实现类

    Servlet接口

        |

    GenericSerlvet (5个方法全部都重写了)

        |

    HttpServlet (service方法进行重写了)

        |

    MyServlet(相当于重写了5个方法,)

4.问题:

    * 编写一个类继承GenericServlet,里面有两个init方法,重写init重写哪一个呢?

        *  如果以后想要重写init方法,重写init()方法。

    * 编写一个类,继承HttpServlet,重写了两个service方法,分别干嘛用?

        ServletRequest(请求)          ServletResponse(响应)

                |                                  |

        HttpServletRquest              HttpServletResponse

    * HttpServlet类中有两个service方法,其中一个service的方法的内部,判断请求的方式(get和post),如果是get请求方式,默认调用doGet方法。如果post请求,默认调用doPost的方法。

    * 现在在网络上就使用两种请求,一种get和post。如果编写一个类,继承HttpServelt,重写doGet和doPost方法。因为service方法默认去调用doGet或者doPost方法。开发中最简单的方式。

5.开发Servlet程序(最简单的步骤)

    * 编写一个类,继承HttpServlet

    * 重写两个方法doGet和doPost方法

    * 在web.xml中编写配置文件

6.一般的情况下,doGet和doPost方法中的逻辑都是相同,互相调用,简化编程。

修改Servlet开发的模板

1.修改Servlet的模板,先找到MyEclipse的安装路径。

2.找到该jar包com.genuitec.eclipse.wizards.xxx.jar

3.不要解压 -- 右键 -- 用解压工具打开 -- 找templates目录 -- Servlet.java -- 修改该文件 -- 把doGet和doPost方法的注释和代码删除,在doPost方法的里面编写已经 doGet(request,response);

4.重启MyEclipse。创建Servlet程序。

Servlet配置自动加载

1.Servlet是第一次被访问的时候创建Servlet实例,立即调用init方法进行初始化。

2.假如:AServlet(非常销毁时间的操作),第一次访问的时候,需要等待的时间非常长。

    * 可以配置Servelt自动加载来解决这一类问题。服务器一启动,自动加载Servlet加载。

    * 在web.xml的配置文件中,在标签的中间


        2

3.注意:值是正整数,值越小优先级越高。

Servlet配置访问路径

1.学会怎么配置?学会怎么来访问?优先级,谁的优先级高先访问谁。

2.在web.xml中,配置,怎么来访问Servlet程序。

    * /servlet/demo1 -- 完全路径匹配 -- 访问:http://localhost/day09/servlet/demo1

    * /* -- 目录匹配 -- 访问:http://localhost/day09/xxx

    * *.do或者 *.action -- 扩展名 访问:http://localhost/day09/xxx.do

3.总结

    * 完全路径匹配    /demo1  以/开头        访问:http://localhost/day09/demo1

    * 目录匹配      /*      以/开头    访问:http://localhost/day09/xxx

    * 扩展名匹配    *.do    不能以/开头  访问:http://localhost/day09/yyy.do

4.优先级(一个WEB程序中有多个Servlet程序,到底是访问哪个Servlet呢?)

    * 完全路径匹配 > 目录匹配 > 扩展名匹配

Servlet开发中WEB阶段的路径问题

1.学习编写路径

2.相对路径和绝对路径

    * 不能以/开头

    * 相对路径:当前的这个文件和比对的文件的位置关系。

    * 在WEB服务器中开发相对路径的写法

        * 先访问aa.html  http://localhost/day09/aa.html

        * 访问demo5写法      http://localhost/day09/demo5

        * 在aa.html的文件中直接访问demo5   

            * aa

            * aa

        * 先访问bb.html  http://localhost/day09/bb/bb.html

        * 访问demo5写法      http://localhost/day09/demo5

        * 在bb.html的文件中访问demo5

            * bb

3.总结:相对路径的写法,需要先找这两个文件之间关系。但是如果一旦文件的位置改变了,写的相对的路径写法存在问题。解决这种问题,写绝对路径。 

4.编写绝对路径

    * 以/开头的

    * http://localhost/day09/demo5

    * 简便写法: /day09/demo5

5.在绝对路径中有分成两种

    * 客户端绝对路径

        * 包含项目名称    /day09/demo5

    * 服务器端绝对路径

        * 不包含项目名称  /demo5

ServletConfig对象

1.和在web.xml的配置文件中相关的一个对象。

2.ServletConfig对象的方法

    * String getServletName()      获取配置Servlet的名称(ServletDemo5)

    * String getInitParameter(String name)      获取初始化参数

    * Enumeration getInitParameterNames()      获取初始化参数

    * ServletContext getServletContext()        获取ServletContext对象

3.总结:配置初始化参数只能针对当前的Servlet,不能在其他的Servlet程序中来获取。

ServletContext对象(重要)

ServletContext对象的简介

1.在javaweb的开发中,一共存在(JSP)4个域对象。在Servlet中一共存在3个域对象。

2.学习的第一个域对象。

3.ServletContext对象

    * 一个WEB项目只有一个ServletContext对象

    * 可以被WEB项目中的所有的Servlet所共享,可以通过ServletContext来传递数据。

    * 与天地同寿。Tomcat服务器一启动,会为每一个WEB应用创建一个ServletContext对象。服务器关闭的时候ServletContext销毁。

获取ServletContext对象

1.可以通过ServletConfig获取ServletContext对象

2.可以直接使用该方法:ServletContext getServletContext() 

域对象

1.域对象可以在多个Servlet中传递数据。以后需要学习JSP技术(JSP和Servlet程序之间通过域对象来传递数据)

2.可以向域对象中存入数据 

    * setAttribute("属性名称","值");        setAttribute("xx","123")    setAttribute("xx","456")

3.可以从域对象中获取数据

    * Object getAttribute("属性名称");

4.从域对象中删除属性

    * removeAttribute("属性名称");

获取ServletContext作用

1.获取全局的初始化参数

    * String getInitParameter(String name)     

    * Enumeration getInitParameterNames() 

    * 配置全局的初始化参数

2.实现数据的共享(*****)

    *  void setAttribute(String name, Object object)    设置属性的值

    *  Object getAttribute(String name)                获取属性的值

    *  void removeAttribute(String name)                删除属性的值

    *  Enumeration getAttributeNames()                  获取属性的名称们

    * 统计访问的次数

3.读取资源文件(*****) String path的写法

    * InputStream getResourceAsStream(String path)      通过文件的路径获取文件的输入流

    * String getRealPath(String path)                  通过文件的路径获取文件的绝对磁盘路径

4.总结:读取资源文件path路径的写法

    * 如果db放在src目录下:    path = "/WEB-INF/classes/db.proterties";

    * 如果db放在某个包下:          path = "/WEB-INF/classes/cn/itcast/context/db.proterties";

    * 如果db放在WebRoot目录下: path = "/db.proterties";

5.使用类的加载器来读取资源文件

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容