目录
Servlet
-
1. API核心包
- javax.servlet:其中包含定义Servlet和Servlet容器之间的锲约类和接口
- javax.servlet.http:其中包含定义HTTP Servlet和Servlet容器之间的契约类和接口
- javax.servlet.annotation:其中包含标注Servlet,Filter,Listener的标注,它还为被标注元件定义元数据
- javax.servlet.descriptor:其中包含提供程序化登录Web应用程序的配置信息的类型
-
2. Servlet实现
- 2.1 核心
- Servlet接口,所有Servlet类必须直接或间接实现。
- 2.2 其他类
- GenericServlet对Servlet进行了简单的包装,为HttpServlet提供了更好的支持。
- 注:GenericServlet中的service(ServletRequest req, ServletResponse res)是抽象方法,要继承该类,必须实现service()
- HttpServlet可以针对协议的请求方式,来获取相应的方法来实现业务。
- 注意:HttpServlet中的service(ServletRequest req, ServletResponse res)
- 将ServletRequest的req、res强转为HttpServletResponse
- 之后调用自身的service() -> service(HttpServletRequest req, HttpServletResponse resp)
- service(HttpServletRequest req, HttpServletResponse resp)
- 拿到请求后,获取请求方式。根据请求方式,来决定使用doXXX()
- 注意:HttpServlet中的service(ServletRequest req, ServletResponse res)
- GenericServlet对Servlet进行了简单的包装,为HttpServlet提供了更好的支持。
- 2.1 核心
-
3. Servlet接口中3个重要的方法
- init()
- 只有第一次请求时,Servlet容器才会调用该方法。
- service()
- 每次请求,每次调用该方法。
- destory()
- 销毁Servlet(程序关闭/卸载)时,Servlet容器才会调用该方法。
- 注意
- Servlet实例只会有一个,在一个应用程序中,被所有用户共享。因此,不建议使用类变量,尽量保证线程安全。
- 其他方法还有doGet()、doPost()
- doGet()主要用于查询数据
- doPost()主要用于提交数据
- init()
-
4. ServletConfig
- 将一些信息(初始化参数:由key和value组成)封装到ServletConfig中,在初始化/实例化的时候将这些信息从类中获取到。
- 可以通过init(ServletConfig config)来初始化参数,内部进行赋值,并调用无参的init()
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
chanceNumber= Integer.parseInt(config.getInitParameter("chanceNumber"));
}
<servlet>
<!--Servlet的内部名称,主要给自己看-->
<servlet-name>ConfigServlet</servlet-name>
<!--Servlet的实现类-->
<servlet-class>com.qqy.servlet.ConfigServlet</servlet-class>
<!--初始化参数-->
<init-param>
<param-name>chanceNumber</param-name>
<param-value>10</param-value>
</init-param>
</servlet>
-
5. ServletContext
- 每个Web应用程序只有一个上下文,在将一个应用程序同时部署到多个容器的分布式环境中,每台Java虚拟机上的Web应用都会有一个ServletContext对象。
- 通过 config.getServletContext() 可以获得ServletContext
- 可以共享从应用程序中的所有资料处访问到的信息,并且可以动态注册Web对象。
-
6. 功能特性
- 表单提交
- 数据查询
- 文件上传