一、Servlet简介
Servlet是sun公司提供的一门用于动态web资源的技术
sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤:
- 编写一个Java类,实现Servlet接口
- 把开发好的java类部署到web服务器中。
二、Servlet的运行过程
Servlet是由Web服务器调用,web服务器收到客户端的Servlet访问请求后:
- web服务器首先检查是否已经装载并创建了该Servlet的实例对象,如果是,则直接执行第4步,否则执行第2步
- 装载并创建Servlet的一个实例对象
- 调用Servlet实例对象的init()方法
- 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表Http响应消息的HttpServletResponse对象,然后调用Servlet的service方法,并将请求和响应对象作为参数传进去。
- web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory方法
三、Servlet运行图
四、Eclipse开发创建Servlet
五、Servlet开发细节
- Servlet访问URL映射设置
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet若想被外界访问,必须把Serlvet程序映射到一个URL地址上,这个工作在web.xml文件中完成。
<servlet> <!-- servlet-name是指servlet名字 --> <servlet-name>ServletDemo1</servlet-name> <!-- servlet对应的类的完整类名 --> <servlet-class>com.atguigu.servlet.ServletDemo1</servlet-class> </servlet> <!-- 映射一个已经注册servlet的对外访问路径 --> <servlet-mapping> <servlet-name>ServletDemo1</servlet-name> <url-pattern>/servletDemo1</url-pattern> </servlet-mapping>
- Servlet访问URL使用*通配符映射
- Servlet与普通java类的区别
Servlet是一个供其他java程序调用的java类,它不能独立运行,它的运行完全是Servlet引擎来控制和调度。
针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出,实例对象才销毁。
在Servlet整个生命周期中,init()方法只被调用一次,而对于一个Servlet的每次访问请求,都会导致Servlet引擎调用一次Servlet的service方法。对于每次访问请求,servlet引擎都会创建一个新的HttpServletRequest和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传入它调用的service方法中,service方法再根据请求方式分别调用。。。方法。
- 缺省Servlet
如果某个Servlet的映射路径仅仅为一个 / ,那么这个Servlet就成为当前web应用程序的缺省Servlet
<servlet> <servlet-name>ServletDemo2</servlet-name> <servlet-class>com.atguigu.servlet.ServletDemo2</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo2</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
在tomcat的安装目录\conf\web.xml文件中,注册一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,这是一个缺省Servlet
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
当访问tomcat中的某个静态HTML和图片时,实际上就是在访问这个缺省Servlet.
- Servlet的线程安全问题