Servlet
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1.编写一个Java类,实现servlet接口。
2.把开发好的Java类部署到web服务器中
Servlet的执行过程
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序。
Servlet的运行过程
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
- Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是, 则直接执行第④步,否则,执行第②步。
- 装载并创建该Servlet的一个实例对象。
- 调用Servlet实例对象的init()方法。
- 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
- WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet的生命周期
生命周期 : 从出生到死亡经历的过程
Servlet的作用:
接受请求数据(url) / 解析web.xml匹配请求,获得全类名,反射调用service方法(处理请求) / 写出响应
init(ServletConfig config)
- 调用时机 : 第一次访问时
- 调用次数 : 只会执行一次
- 调用者 : Tomcat服务器
- 用途 : 初始化Servlet
service(ServletRequest req,ServletResponse res)
- 调用时机 : 被访问时
- 调用次数 : 每次请求服务器都会开启一个新的线程,执行该方法一次
- 调用者 : Tomcat服务器
- 用途 : Tomcat服务器会在每次调用service()方法时,为该方法创建Request对象(封装了客户端传递过来的数据)和Response对象(可以用于生成响应),所以该方法可以用于处理请求和生成响应.
destroy()
- 调用时机 : 服务器正常关闭或Servlet被移除时
- 调用次数 : 只会执行一次
- 调用者 : Tomcat服务器
- 用途 : 销毁Servlet
在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。
Servlet中API的简介
获取客户端传递的请求参数
-
request.getParameter(String name),传入的参数就是form表单中name属性的值
-
向客户端输出数据
-
response.getWriter().write()
-
response.getWriter().print()
-
以上两个方法其实是一样的,print()是对write()方法的封装,可以输出更多类型的数据
-
url-pattern的三种配置方式
一个Servlet是可以配置多个访问路径的
完全路径匹配,以/开始,例如:/hello /init
目录匹配,以/开始,例如:/* /abc/*
" / "代表当前Web应用的根目录," * "代表匹配所有
扩展名匹配,*不能以 / 开始**,例如:.do *.action
典型错误 /*.do
优先级:** 完全匹配 > 目录匹配 > 扩展名匹配 具体>不具体**
其他Servlet配置参数
load-on-startup :如果希望Servlet跟随服务器的启动而被创建,可以设置该属性.Struts1框架就使用这种方式加载配置文件 。
缺省Servlet
-
如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet
-
凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求
-
当客户端访问静态资源的时候,实际上就是在访问这个缺省的servlet
配置主页
-
在web.xml文件中,可以通过指定welcome-file-list节点来指定当前应用的主页.
-
如果有多个值的话,会从上向下进行查找,找到后,就不会再向下执行
-
如果本应用没有配置welcome-file-list节点,会使用Tomcat服务器的默认配置
相对路径和绝对路径
结论:一律使用绝对路径
相对路径
-
../ 代表上级目录. 例如: ../css
-
./或者什么都不写 代表同级目录. 例如: ./img 等同于 img
绝对路径
-
带有协议和主机名的,这种路径能够访问所有的页面.例如:
-
不带协议和主机名的,这种路径只能访问服务器内部资源.例如: /day13/index.html
ServletConfig的使用
作用
- 获取Servlet的名称
- 获取Servlet的初始化参数
- 获取上下文ServletContext
创建
-
在Tomcat服务器创建Servlet时,创建该对象,并通过init()方法传递给当前Servlet
-
获取方法
-
getServletConfig()
-
-
API
-
getServletName(): 获取Servlet的名称.就是web.xml中servlet-name节点的值
-
getInitParameter(String name) : 获取web.xml中<font color='red'>当前Servlet</font>对应的<param-value>标签的值
-
getInitParameterNames() : 获取web.xml中<font color='red'>当前Servlet</font>对应的所有<param-name>标签的值
-