开发 Servlet 有三种方式:
- 实现 Servlet 接口
- 继承 GenericServlet 抽象类 service 是抽象方法
- 继承 HttpServlet 抽象类 实现了 service ,虽然是抽象类,但是没有抽象方法,需要被继承
继承体系:
Servlet 是接口,开发需要实现接口中的所有方法。
|
+– GenericServlet 抽象类,实现了 Servlet 接口,
abstract void service(ServletRequest req, ServletResponse res)
{ 抽象方法需要自己实现 }
|
+– HttpServlet 抽象类,继承 GenericServlet,默认实现了里面的
抽象方法,只需要重写 doGet doPost 即可。这两个 do 方法
其实就是对 Servlet 中的 service 方法进行了封装。
方式一:实现 Servlet 接口
public class Servlet_1 implements Servlet {
// 初始化 Servlet ,就是把该 Servlet 装载到内存中,只执行一次。
public void init(ServletConfig config) throws ServletException {
}
// 销毁该Servlet,从内存中清除掉,只调用一次。
public void destroy() {
}
// 得到 ServletConfig 对象
public ServletConfig getServletConfig() {
return null;
}
// 得到Servlet信息。
public String getServletInfo() {
return null;
}
// 是服务函数,业务逻辑代码写到这里,该函数每次都被调用。
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
}
}
方式二:继承 GenericServlet 接口
重写 service( ) 方法
方式三:继承 HttpServlet 接口
重写 doPost( ) doGet( ) 方法
注意:
MyEclipse 中是没有 Servlet 规范的,Myeclipse 中的插件导入了关于 JavaEE 的包并设置 classpath
Servlet 的配置:
为什么 Servlet 需要配置?
浏览器访问 Tomcat 服务器时,是和 Web 服务模块打交道。
Web 服务模块根据用户的请求,去 Servlet 容器找到对应的资源文件。
配置文件的用处就是帮助 Web 服务器找到对应的资源文件。
配置方法:
<servlet>
<!-- 注册一个Servlet -->
<!-- 给 Servlet 取一个名字,可以随意起,但是必须要保证和下面的配置一样 -->
<servlet-name>Demo1</servlet-name>
<!-- Servlet 的位置 -->
<!-- 项目下的 Servlet 文件位置,包名 . 文件名,不要加.java -->
<servlet-class>Servlet_Test_1.Servlet_1</servlet-class>
</servlet>
<servlet-mapping>
<!-- 根据注册的 Servlet 进行映射 -->
<!-- 给 Servlet 取一个名字,但是必须要保证和下面的配置一样 -->
<servlet-name>Demo1</servlet-name>
<!-- URL 的访问路径 -->
<!-- 根据注册的 Servlet 进行映射 -->
<url-pattern>/ABC</url-pattern>
</servlet-mapping>
<!-- 一个已经注册的Servlet可以有多个映射 -->
<servlet-mapping>
<!-- 根据注册的 Servlet 进行映射 -->
<!-- 给 Servlet 取一个名字,但是必须要保证和下面的配置一样 -->
<servlet-name>Demo1</servlet-name>
<!-- URL 的访问路径 -->
<!-- 根据注册的 Servlet 进行映射 -->
<url-pattern>/DEF</url-pattern>
</servlet-mapping>
映射通配符:
① *.扩展名 没有斜杠!
例如 *.do
<servlet>
<servlet-name>First</servlet-name>
<servlet-class>Test01.Demo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>First</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
// http://localhost/ServletDemo1/Demo1.do 访问即可
② 以 / 开头,同时 /* 结尾
例如 /a/*
<servlet>
<servlet-name>First</servlet-name>
<servlet-class>Test01.Demo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>First</servlet-name>
<url-pattern>/a/*</url-pattern>
</servlet-mapping>
// 访问时,/a 下的资源都访问这个文件
映射通配符优先级:
① 谁的匹配度高,谁就命中
② *.do 的优先级最低