是运行在Web服务器或应用服务器上的Java程序
在Web上创建动态内容的有效而强大的解决方案
由容器来管理生命周期与Web服务器交互
由Sun规范了其功能
Servlet规范的组成
Web应用程序Servlet与HTTPServlet
过滤器
安全
国际化
Servlet编码和部署
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
第一步:编译
将Servlet类库包含进来的方法
将servlet-api.jar 放置在CLASSPATH中
将servlet-api.jar 放置在 JDK安装目录\jre\lib\ext目录下
第二步:部署Servlet(1)
创建部署描述文件 (web.xml)
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4">
</web-app>
Servlet2.4使用Schema定义web.xml文件中的元素和顺序
第二步:部署Servlet(2)
在容器中注册Servlet
第二步:部署Servlet(3)
映射Servlet
Servlet URL映射路径
精确模式匹配。这种类型的模式用于将请求一对一映射到指定的Servlet。
扩展名匹配“*.扩展名”。在这种情况下,所有以指定扩展名结尾的URL都转向指定的Servlet。
路径映射。路径映射必须以'/'开始,以'/*'结尾,在这之间可以出现任意字符。路径匹配通常用于将对某个目录的所有请求转向一个指定的Servlet。
默认的Servlet,'/'。默认的Servlet映射用于定义一个在没有给出路径信息时请求转向的Servlet。
Servlet生命周期
Servlet与HTTP协议
Servlet配置
为Servlet提供初始化配置信息
配置信息由web.xml声明中的字符串组成
<servlet>
…
<init-param>
<param-name>name</param-name>
<param-value>Tiger</param-value>
</init-param>
</servlet>
Servlet在编译的代码之外有初始化参数,当参数改变时,不需要重新编译Servlet
每个servlet都有一个与之相联的对象ServletConfig
ServletContext 应用上下文
属于整个Web应用程序
可以访问到Web应用程序资源的本地输入流
把资源的虚拟路径转换为物理路径
记录事件日志
绑定一个对象在整个Web应用程序中共享
ServletContext与ServletConfig的关系
初始化Web应用程序参数
<web-app>
…
<context-param>
<param-name>admin email</param-name>
<param-value>admin@lovobook.com</param-value>
</context-param>
…
</web-app>
在应用程序级上提供初始化配置,以使所有的Servlet都可以访问
在Servlet中共享信息
为所有的Servlet设置一个实时变化的参数值
在Web应用程序中共享一个对象
servletContext.setAttribute("password", "tiger");
String password = (String) servletContext.getAttribute("password");
虚拟路径转换为物理路径
Web应用程序的所有资源都被抽象到一个虚拟路径上
以根‘/’开始,后面接上Web资源所在子目录的虚拟路径
http://localhost:8080/lovobook/index.html
不能直接使用虚拟路径来获得物理资源的位置
getResourcePaths(java.lang.String path):
getResourceAsStream(java.lang.String path):
getResource(java.lang.String path)