- servlet是运行在WEB服务器中的小型Java程序(服务器端的小应用程序)。servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求.
编写第一个Servlet程序
-
a、写一个java类,实现Servlet接口(该接口在javax下)
-
b、修改web.xml,给servlet提拱一个可访问的url地址
-
c、项目部署到Tomcat服务器
-
项目完整目录
执行过程
- 1、通过URL(http://localhost:8080/项目名/uri)向Tomcat发送请求
- 2、Tomcat接收到请求找到项目下的uri
- 3、找到uri指定的类
- 4、实例化这个类
- 5、服务器调用service
这是我自己描述的
Servlet的生命周期(重要)
- 实例化-初始化-服务-销毁
- 如果想观察到销毁的方法,可以通过http://localhost:8080找到管理项目界面进行停止或删除项目,
一些tomcat在eclipase的配置,不然打不开管理界面
- 可以设置服务器一启动就实例化servlet
- 执行流程
Servlet创建的三种方式
-
实现Servlet接口(上面的第一个程序就是)
-
继承GenericServlet抽象类(适配器设计模式)
该类实现了servlet\servletConfig;
只有service()方法是抽象的在继承时必须重写,其它方法想重写就重写,这也是适配置器设计模式所带来的好处
public ServletDemo extends GenericServlet {
//重写服务的方法
public void service(ServletRequest req, ServletResponse res) {
System.out.println("----服务的方法---");
}
}
- 继承HttpServlet类(模板方法设计模式,其实原理就是多态)
一定要搞清楚他是怎么调用到doGet和doPost的,其实服务器调用的还是Servlet()但Serlvet方法又在内部调用了doGet或者doPost,详细请看HttpServlet类
映射细节
-
配置多个映射路径
-
通配符*
url-pattern:.do 以.字符串的请求都可以访问
url-pattern:/* 任意字符串都可以访问
url-pattern:/字符串/*. 以字符串开头的请示都可以访问 -
匹配规则从高到低:绝对匹配-/开关匹配-扩展名方式匹配
-
如果url-patterm的值是/,那么执行的是默认映射。所有资源都是servlet
Servlet的线程安全
- Serlvet是单实例,而service方法是多线程的
- 解决线程安全的问题:不要定义全书变量,定义局部变量
获取配置信息
- 作用:1、可以获取servlet配置信息;2、可以获得ServletContext对象
- 通过init(ServletConfig)获取配置对象
- 通过getServletConfig()获取配置对象
ServletContext(重要)
- ServletContext:代表的是整个应用。一个应用只有一个ServletContext对象,单实例;
三大作用
- 域对象:在一定范围内(当前应用下),使多个Servlet共享数据
- 获取全局配置信息
- 获取所有资源路径
String getRealPath(String path);//根据资源名称得到资源绝对路径
实现Servlet的转发
- RequestDispatcher getRequestDispatcher(String path);//表示要跳转到哪去
Servlet核心类图
- 通过参数传递的叫依赖这个参数的对象
- 通过方法获取的叫关联得到的对象