day08_servlet

  1. servlet的介绍&servlet的api 通读

 

一般 情况下 , 对于java程序员来说, 接口 象征着一种 规范. 你要实现接口 那么就要去实现接口中所有的方法

 

Sun在 其api 中定义了servlet 接口... 这里 的api 指的是 哪里 ?

 

你去找 servlet的 api 的文档 时 不要去到 jdk 中找, 而要去 javaee的api 找.

 

 

通读 玩 文档之后, 了解到 如下信息:

 

第一个:

编写一个servlet ,可以去继承 GenricServet或者HttpSerlvet

这里选中继承 HttpSerlvet

 

第二个:

Servlet有 生命周期的方法,

Init

Service

Destroy

 

一般情况下, 声明周期的方法 通常都不是你自己去调用的.

 

  1. 编写快速入门的servlet程序

Alt+shift+s 快速选择覆盖或者getter和setter

Ctrl+m MyEclipse最大化,最小化切换

第一步:

写个类去继承 HttpServlet ,并且覆盖 doGet和doPost方法

 

第二步:

每个servlet要让外界访问到, 都必须要配置对外的访问的路径.

 

去web.xml文件中配置

 

 

第三步:

启动服务器, 发布web应用,去访问

 

Http://localhost:8080/day08_servlet/hello

3.为什么继承HttpServlet

思考:genericServlet存在的意义:

防止http协议被更好的协议取代,所以定义在它上面还有一层genericservlet类,作为一个标准,否则直接定义httpservlet是不能作为标准的,也防止http协议被淘汰时需要重写太多的方法。

4.手动编写serlvet程序的实验

通过这个实现, 进一步认识到, 编写一个类的时候, 带包名去编译,

并且回顾了如何 手动的添加 classpath 路

(javac前面加想要使用的jdk版本)javac -classpath servlet.jdk(javaee的api,不是jdk的api) .helloServlet.class(当前要编译的类)

 

5.servlet在web应用的位置

 

6.serlvet的生命周期&线程安全的问题

一个对象被多个线程去访问的时候,当出现被多条线程共享的数据时(全局变量),会出现线程的安全问题

只要没有成员变量就可以了

7.秒杀的方式建servlet

直接创建一个servlet

8.doGET,doPost方法是如何被调用到的

Servlet程序不是 咱们自己调用的, 是服务器调用的.

 

Servlet在每次访问的时候都会调用service方法, 但是 俺们在访问自定义的sevlet的时候, 发现没有service方法, 只写了

DoGet和doPost, 但是 这个doGet ,doPost方法在每次请求的时候 也都相应的执行了. 那么

这里的 doGet,doPost方法是如何被调用到的呢?

 

 

 

 

生命周期的service方法, 调用了 httpservlet 自定义的那个 service方法, 而自定义的service 方法中,又 根据当前的请求

方式, 调用 了具体的doXxx方法

 

原来, doGet,doPost方法 实际上还是 通过调用了生命周期的service , 再根据请求方式 调用过来的.

9.编写servlet时要覆盖doGet,doPost

 

10.覆盖无参的init方法

第一个:

覆盖init方法时, 不要覆盖 有参数的 init方法

 

 

第二个:

根据Http请求的方式,覆盖相应的doGet或者doPost方法,无需覆盖Service方法

 

第三个:

当doGet和doPost代码逻辑相同时,可以相互调用,简化编程

 

观察 doGet和doPost,两个方法 接收的参数 是一模一样的, 只是 方法名字不一样.

 

那么 如果在开发过程中. doGet和doPost里的代码逻辑完全一致, 那么 就可以在 其中一方调用下 对方,这样可以简化编程.

11.编写servlet的注意问题&如何去更改模版

找到MyEclipse下的\plugins文件夹,搜索wizard,找到

压缩包打开

修改templates目录下的,servlet.java文件,先清空doGet和doPost方法,在一个中添加另一个方法的调用

 

12.servlet的路径的写法

通过 url-pattern 来实现映射.

 

 

这个 路径有三种写法:

 

第一种:

绝对路径 匹配, 必须要以 / 开始 -------- 例如: /aaa/bbb

第二种:

目录匹配, 必须要以 / 开始, 以 * 结束 ----- 例如: /mmm/nnn/* , /aaa/bbb/*

第三种:

扩展名匹配, 必须要以 * 开始. 扩展名结束 ---- 例如: *.do , *.xxx

 

当出现 多个servlet 都对访问 的目标路径都 匹配时, 那么 会有优先级顺序.

 

http://localhost/day08/aaa/bbb

 

优先级顺序: 第一种> 第二种> 第三种

 

经典的错误:  /*.do ---

 

 

13.servlet启动时就加载

默认的情况下, 一个serlvet类 只有在访问的时候才会创建实例. 然后驻留在内存中

但是 实现上, 对与一些 servlet ,如果 这个servlet 要完成一些特殊功能, 比方说 读取web工程中比较大的资源配置 文件,

那么在这种场景下, 你可能就需要在 web应用一启动的时候 就去 启动的serlvet, 实例化, 去读取 大的资源配置文件.

 

就需要将 servlet 配置为 web应用启动时 就 加载 .

 

 

 

14.serlvetConfig对象的使用(了解)

--- 代表 着 一次请求的时候, 关于servlet的 配置信息. 这个对象中封装的就是 针对于 某个具体的servlet的 启动

配置信息..

 

Serlvet生命周期方法中 :

 

 

这个对象是服务器 在调用init 方法时 ,传递进来的.

 

在web.xml文件中,你 注册 serlvet的时候, 是可以通过 init-param 来 配置 servlet的具体的参数信息的.

 

 

 

Tomcat服务器 会将 这些参数信息封装到一个叫做 serlvetConfig的对象中,并且将这个对象在 调用 init方法的时候

传递进来 . 那么你就可以拿到 对这个对象的引用.

 

枚举类型方法:hasMoreElements(),nextElement();

 

注意点 : 每个serlvet的都有其独占的 servletConfig对象, 用来封装各自的初始化参数 信息.

 

例如: A serlvet的配置, 是不能 够通过 B servlet的 serlvetConfig 来获得的.

 

15.servletContext对象的介绍(掌握)

ServletContext对象就代表着 一个web应用, 那么只要拿到一个SerlvetContext对象, 就 代表着一个web应用...

 

每个web应用,都有 与其相对应的唯一的servletContext对象.

 

  • 常识 :

Context --- 上下文 , 贯穿始终的 玩意 ... 一般就是一个工具类 . 可以让你去获得 一些 文件, 配置信息, 读取一些资源等等功能.

 

ServletContext -- 代表着web应用

Context --- 代表着 你的那个 app (这是安卓的)

 

16.获得web应用全局的初始化参数信息

在web.xml文件中, 可以 配置web应用的全局的初始化参数信息. 通过标签<context-param></context-param>来配置web应用的全局的初始化参数信息。

 

 

  • 如何获得对servletContext对象的引用呢?

在任何一个servlet中 通过 getServletContext() 方法 获得 对当前web应用的 serlvetContext的 引用

17.使用servletContext对象实现数据共享

对于每个web应用,都有一个唯一的sevletContext对应与其 对应, 那么 如果你在servlet1 拿到了 对serlvetContext对象引用,

向 serlvetContext 存入了一些值, 然后 现在去 servlet2, 那么 也可以获得 对serlvetContext 引用,这个时候 ,那么拿到的同一个

对象, 都是代表着 当前的web应用, 由于 拿到的是 同一个对象, 那么就可以实现数据的 共享.

 

 

  • 域对象:
  1. 域对象是一个容器,
  2. 域对象容器就会有大小(范围) 大小就是整个web应用

     

  3. 域对象都有实现数据共享的方法

    setAttribute(name,value) --- String , Object

    getAttribute(name) , 返回值是 Object ---- String

    removeAttribute(name) ------- String

     

     

    SerlvetContext 对象是一个域对象:

     

     

    18.统计网站的访问次数小练习

    具体参考

     

     

     

    19.传统的去读取资源文件

     

    传统的, 你如何 读文件 .

     

     

    在web应用中如何去读取 文件.

     

    具体的参考

     

    20-21.读取资源文件

    获取对应于虚拟路径的真实访问路径

    在web里面写路径,先写一个/再说

    22.使用类加载器去读取4.txt的路径

    23.读取资源文件的一些小细节

    Java源文件中写的相对路径是相对与Java虚拟机而言的,如果是在servlet程序上写相对路径,由于web服务器上的虚拟机是由Tomcat的/bin目录下的startup.exe启动的,所这个Java虚拟机的启动目录就是/bin目录,那么相对路径就是在/bin目录下

     

    快捷键:

    Ctrl+t 快速查看类的继承关系

    Ctrl+O 查看文档里的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值