Servlet接口 --- 定义了Servlet所应该具有的最基本的方法,所有的Servlet 都应该直接或间接的实现自这个接口
|
|---GenericServlet ,对Servlet接口的默认实现,是通用Servlet实现,init方法、destory方法进行了空实现,将service方法设计为抽象方法,供继承者实现
|
|---HttpServlet,继承子GenericServlet,在GenericServlet实现的基础上,对HTTP协议进行了进一步的增强,实现了GenericServlet中未实现的Service方法,在此service方法中判断请求方式,根据请求方式对应调用对用的处理方法,在HttpServlet的子类中不要覆盖service方法,直接覆盖doGet或doPost方法,处理get
/Post请求
MyEclipse下开发web工程
web.xml中Servlet对外访问路劲的配置
(1)一个<Servlet>标签可以对应多个<servlet-mapping>,也就是说一个Servlet可以有多个对外访问路径
(2)可以使用*匹配符,但是使用*匹配符时只能是两种方式:以正斜杠开头,以正斜杠星结尾。*.后缀,哪个最像找哪个,同时*.后缀方式优先级最低。
(3)在<Servlet>标签中可以配置<load-on-startup>标签,其中的值必须是一个正整数,配置过该选项的servlet,将随着服务器的启动而创建。其中配置的数值用来指定servlet启动的顺序。
(4)缺省Servlet,一个Servlet 如果对外访问路径被配置为一个斜杠,则其他Servlet 都不处理的请求由缺省Servlet处理。在tomcat/conf/web.xml是爸爸web.xml其他web.xml都继承自此web.xml,这个web.xml中配有默认的缺省Servlet,当我们放问静态web资源时就是此缺省servlet做出的响应。浏览器对服务器的访问,无乱访问的是什么资源,最终都是一个Servlet做出的响应。
ServletContext对象,代表当前整个web应用
(1)是一个域对象,是javaweb开发阶段的四大作用域之一。(最大的一个域)可以在整个web应用范围内共享数据
生命周期:随着web应用加载而创建,随着服务器被关闭或者web应用被移除出容器,销毁。
作用范围:整个web应用
(2)可以获取整个web应用的初始化信息
(3)请求转发:访问一个web资源时,可以在服务器内部流转,使用另一个web资源进行输出
(4)获取资源
获取资源:ServletContext.getRealPath("相对于当前web应用的路径"),则此方法在传入的路径之前拼接上当前web应用的真实硬盘路径,以此来获得资源的真实硬盘路径。
ServletContext.getResourceAsStream("相对于当前web应用的路径"),此方法和上面的方法原理相同,唯一不同的是直接返回一个指向该资源的流。
利用类加载器去加载资源:
String path = ClassLoader.getResource("相对与类加载的目录的路径").getPath();
ClassLoader.getResourceAsStream("相对与类加载的目录的路径");此方法和上面的方法原理相同,唯一不同的是直接返回一个指向该资源的流。
路径专题:
web开发学习阶段的路径:
此路径是给浏览器使用的还是给服务器使用的
如果路径是给浏览器使用的,则路径是相对于当前虚拟主机,路径中要写上当前web应用的名称。
如果路径是给服务器用的,则路径是相对于当前web应用,路径中不要写上当前web应用名称了。
servletCotnext.getRequestDispacher("/servlet/Demo1").forward();
servletContext.getRealPath("/1.jpg");
servletContext.getResourceAsStream("/1.jpg");
javase学习阶段的路径(根据具体情况具体分析):
new File("");
new FileInputStream(""); ---- 相对的是程序的启动目录
ClassLoader.getResource();
ClassLoader.getResourceAsStream(); ---- 相对于类加载器加载类的目录
相对路径和绝对路径
绝对路径:以/开头的路径叫做绝对路径,工作原理:将当前路径直接拼接到相对于的那个目录上
相对路径:不以/开头的路径叫做相对路径,工作原理:相对于当前的路径,计算相对路径的真实路径。
由于相对路径要根据当前路径随时进行计算,如果分析不好的话有可能会导致路径不正确,所以尽量使用绝对路径,只有当绝对路径没有办法使用时才使用相对路径。