Servlet是Java Servlet的简称,称为小程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态的Web内容;Servlet运行于支持Java的应用服务器中;从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展HTTP协议的Web服务器;
Servlet编程需要用javax.servlet和javax.servlet.http两个包下面的类和接口,在所有的类和接口中,javax.servlet.servlet接口最为重要。所有的servlet程序都必须实现该接口或者继承实现了该接口的类;
上面这张图是Servlet的类关系的结构图;其中Servlet是接口,GenericServlet是实现Servlet接口的抽象类,HttpServlet是继承GenericServlet的抽象类;
-
- Servlet接口
在ServletAPI中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类,见下图;
该接口包含这五个方法:
init(ServletConfig config) ServletConfig getServletConfig() service(ServletRequest req,ServletResponse res) String getServletInfo() destroy()
- GenericServlet抽象类
对Servlet接口中的部分方法(init和destroy)添加了实现,使得开发时只需要考虑针对service()方法的业务实现即可 ,每次客户端向服务器发出请求时,服务器就会调用这个方法,service()方法有两个参数(ServletRequest和ServletResponse),ServletRequest保存了客户向服务器发送的请求,而ServletResponse用来设置如何对客户进行响应;
-
- HttpServle抽象类
- HttpServle抽象类
继承GenericServlet的基础上进一步的扩展 ;
Servlet的url-pattern配置方式
1.全路径匹配,精确匹配,url-pattern怎么写的,外界就怎么访问
在继承HttpServlet类的上面添加注解@WebServlet("/demo"); 在web.xml中添加<url-pattern>/demo</url-pattern>;
2.目录匹配,带"*"的
在继承HttpServlet类的上面添加注解@WebServlet("/demo/*"); 在web.xml中添加<url-pattern>/demo/*</url-pattern>;
3..扩展名匹配,请求的url路径只需要满足扩展名就行
在继承HttpServlet类的上面添加注解@WebServlet("*.jsp"); 在web.xml中添加<url-pattern>*.jsp</url-pattern>;
Servlet也可以使用@WebServlet注解进行配置
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default ""; String[] value() default {}; String[] urlPatterns() default {}; int loadOnStartup() default -1; WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
@WebServlet注解列表
属性名 | 类型 | 描述 |
---|---|---|
name | String | 指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名; |
value | String[] | 该属性等价于 urlPatterns 属性;两个属性不能同时使用; |
urlPatterns | String[] | 指定一组 Servlet 的 URL 匹配模式,等价于<url-pattern>标签; |
loadOnStartup | int | 指定 Servlet 的加载顺序,等价于 <load-on-startup>标签; |
initParams | WebInitParam[] | 指定一组 Servlet 初始化参数,等价于<init-param>标签; |
asyncSupported | boolean | 声明 Servlet 是否支持异步操作模式,等价于<async-supported> 标签; |
description | String | 该Servlet 的描述信息,等价于<description>标签; |
displayName | String | 该Servlet的显示名,通常配合工具使用,等价于<display-name>标签; |