Servlet整理
author:lxy 1.什么是Servlet? 运行在Servlet容器中,由服务器服务器直接解析运行的Java应用小程序, 2.怎样创建一个Servlet 实质:通过继承或实现接口类并重写方法。 步骤:[1].创建一个类,继承HttpServlet(实现Servlet接口 或 继承GenericServlet类也可以) [2].重写方法;doGet、doPost等(接口中需要将所有方法重写,但是service方法是处理请求) [3].在web.xml文件中配置 3.Servlet的生命周期: 大致过程: [1].创建Servlet对象,并调用init()方法对web进行资源初始化 [2].通过service方法来处理请求 [3].通过destroy来销毁Servlet 细节: [1].当创建一个Servlet后,第一次访问web时会创建一个Servlet对象,并调用init一次方法,同时开启一个线程来调用service方法,init只调用一次 [2].当第二次访问时再开启一个线程来调用service方法处理请求 [3].Servlet常驻内存,一般情况只会创建一次。 [4].如果在Servlet中创建了成员变量要处理线程安全,开发中尽量避免创建 4.Servlet接口和HttpServlet类中的 doGet和doPost 方法的关系? [1].一个Servlet被访问时,默认service方法处理请求, [2].service方法在Servlet中定义,但是在HttpServlet中复写具体内容 [3].在HttpServlet 的service方法中,会根据请求方法调用不同的方法 [4].根据多态,在调用doGet 、doPost时,调用的是自己Servlet的方法 补充:模板设计模式: public abstract class Car { public abstract void fire(); // 打火 public abstract void run();// 行驶 public abstract void stop();// 停止 //模板 public void drive() { fire(); run(); stop(); } } //继承Car接口的Bmw类 public class Bmw extends Car { @Override public void fire() { System.out.println("bmw fire"); } @Override public void run() { System.out.println("bmw run"); } @Override public void stop() { System.out.println("bmw stop"); } } //测试 public class Test { public static void main(String[] args) { Car c = new Bmw(); c.drive(); } } 5.认识TomCat中文件夹: |-bin 存放启动、关闭等服务器程序 |-conf 存放配置信息 |-lib 存放jar包 |-logs 存放日志文件 |-temp 存放临时文件 |-webapps 存放部署应用,内部有几个文件夹就有几个应用 |-WEB-INF |-classes Java类 |-lib Java类运行所需jar包 |-web.xml wab应用的配置文件 |-images 图片等媒体文件 |-work 服务器工作目录 6.Servlet的自动加载: [1].通过在web.xml文件<servlet>标签中加上<load-on-startup>2</load-on-startup> 让Servlet跟随服务器启动而创建 [2].作用:加载资源 [3].标签中取值1--10,数值小优先级高,优先级相同按照配置顺序加载。 7.Servlet配置中的url-pattern: [1].一个Servlet 是否可以映射到多个路径?可以 [2].url-pattern 的写法(有无*) a.完全匹配 要求必须以"/"开始 b.目录匹配: 以"/"开始以 * 结尾 c.扩展名匹配: 以*.xxx结尾 以上三种写法优先级:a > b > c; 8.web开发中的路径问题: [1].浏览器访问服务器有几种方式? a.浏览器地址栏输入URL b.超练级 <a href="http://www.itheima.com" >黑马</a> c.表单 <form action="...." method="post">...</form> //常用请求方式post get,除了表单可以post,其他都是get d.javascript [2].访问Servlet路径 a.绝对路径: |--带协议 一般用于访问站外资源,开发不常用 <a href="http://www.baidu.com" >百度</a> |--不带协议 在浏览器端写一个"/",相当于是服务器的路径,后面加上工程名,再加上资源名就可以 一般用于访问站内资源,开发中常用 <a href="/day7_2/demo1">demo1Servlet</a> 相当于:http://localhost:8080 b.相对路径: |-- ./XXX 同处于第二目录(工程名下)的路径 |-- ../XXX 退回上一级目录寻找目标 结论:开发中推荐使用不带协议的绝对路径 "/工程名/servlet-pattern的值" 9.Servlet接口中的init方法: [1].为什么在Servlet接口中init方法是有参数的而我们所覆写的方法没有参数? |--父类中已将init(ServletConfig config)方法重写,我们重写的方法不是接口中的方法而是其父类中定义的 [2].ServletConfig是什么,有什么作用? |--ServletConfig对象代表的是Servlet的配置对象,由服务器创建, 每一个Servlet都有一个自己的ServletConfig对象,不可公用 |--作用: public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } |---获得初始化参数 当第一次访问一个Servlet时,就会创建一个ServletConfig对象,通过init方法传递到Servlet,那么我们就可以在Servlet中获取其配置信息 |---可以获得Servlet的name 获取ServletConfig对象:this.getServletConfig(); |---可以获得ServletContext对象 ServletConfig的常用API: |--public String getServletName(); //用于获取Servlet名称 |--public String getInitParameter(String name); //用于获取init-parent中指定的value值 |--public Enumeration getInitParameter(String name); //用于获取所有的init-param中的name名称 |--public Servlet ServletContext getServletContext(); //用于获取一个ServletContext对象 10.关于ServletContext对象 [1].ServletContext代表的是一个web应用 [2].获取ServletContext对象 ServletConfig。getServletConfig(); [3].作用: a.获取全局初始化参数 String getInitParameter(String name) EnumerAtion getInitParameterNames() 在web.xml文件中可以配置 全局初始化参数 <context-param> <param-name>name</param-name> vparam-value>tom</param-value> </context-param> 此配置针对于整个web应用 b.让Servlet实现信息共享 ServletContext是一个域对象(相当于一个Map,它的作用是整个Web应用中) c.可以获取路径(资源)*-* 在web开发中,要想获取资源,必须使用绝对的磁盘路径。 实例总结:1.web中访问不到MyEclipse WebRoot以外的文件,部署只有此文件中内容才会被部署进服务器
时间: 2024-10-08 09:15:16