Servlet 是由 server applet 两个单词拼接而成,指的是运行在服务器端的小程序,它本质上是一个接口,它定义了 Java 类被浏览器访问到(被tomcat识别到)的规则。使用时需要我们自定义一个类来实现 Servlet 接口,并复写其中的方法。
这里提供几个关于 Servlet 的学习资料或平台:
J2EE API 在线文档菜鸟教程HOW2J我这里演示的开发环境是 IDEA_2019.2.3 和 Tomcat_9.0.26,关于 IDEA 配置 Tomcat 的方法,推荐一篇博文 IDEA 配置 Tomcat ,讲的相对详细。
创建 JavaWeb 项目(Web Application)。
定义一个类,实现 Servlet 接口,复写其中方法。
package servlet.demo1; import javax.servlet.*; import java.io.IOException; public class ServletDemo implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("项目启动了!"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("hello servlet!"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("项目关闭了!"); } } 在 web.xml 中配置 Servlet 的资源路径,后面会介绍注解配置,这里作为了解。 <!-- 在web.xml中配置 --> <!-- 配置servlet--> <servlet> <!-- 这里给模块命名,与后面的mapping相对应 --> <servlet-name>demo1</servlet-name> <!-- 这里写全类名 --> <servlet-class>com.base.servlet.ServletDemo1</servlet-class> </servlet> <!--配置路径--> <servlet-mapping> <!-- 这里的 name 属性与上面对应 --> <servlet-name>demo1</servlet-name> <!-- 这里是浏览器访问资源的 资源路径 --> <url-pattern>/demo1</url-pattern> </servlet-mapping> 配置 Tomcat 的虚拟路径启动Tomcat,到浏览器访问链接:http://localhost:8080/Serv/demo1
查看看控制台输出
关于init()方法:
默认情况下,Servlet 第一次被访问时才会去创建对象。通过配置可以改变 Servlet 对象的创建时机。具体操作如下: <!-- 在<servlet>标签下配置 --> <!-- 第一次被访问时创建对象,则设置值为任意的 负数 即可。 --> <load-on-startup>-5</load-on-startup> <!-- 在服务器启动时创建对象,则设置值为任意 正数 或 0 即可。--> <load-on-startup>5</load-on-startup> -->Servlet 中的 init()、service()、destroy() 三个方法可以代表 Servlet 的生命周期。
被创建:调用 init() 方法,对象被创建后会调用一次。提供服务:执行service()方法,对象每次被访问都会执行。被销毁:执行destroy()方法,服务器正常关闭前会被调用一次。注意:
Servlet是单例的,多个用户同时访问时,可能存在安全问题,所以尽量不在 Servlet 中定义成员变量,可以定义常量用 final 修饰。
Servlet3.0 后的新特性,可以通过注解的方式配置 Servlet ,不用在 web.xml 中配置。
配置方法:在类上使用@WebServlet("/资源路径")注解,如下所示:
//@WebServlet(urlPatterns = "/demo2") //value属性可以省略属性名 @WebServlet("/demo2") public class ServletDemo implements Servlet { //类方法...... }注意:
urlPatterns 是 Servlet 的资源访问路径。一个 Servlet 可以有多个资源访问路径:@WebServlet({"/demo1","/demo2","/demo3"})。路径定义规则 /XXX —— 一层路径/XXX/XXX —— 多层路径*.后缀名 —— *代表任意字符,只要访问资源路径的后缀名是提前设定的字符,就可以访问成功。注意:
用的较多的是 HttpServlet 接口。其中具体的方法,这里不做介绍了,具体查看文章开头提供的 API 文档。实现 HTTPServlet 的类需要重写 doGet() 和 doPost() 方法。2019年11月1日19:43:11
