Java Web的基础--Servlet
原创
©著作权归作者所有:来自51CTO博客作者zhuhuix的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
1、Servlet的概念
- Servlet是Server和Applet的这两个单词的组合,即运行在服务器上的小程序。
- Servlet就是一个接口,定义了Java类被浏览器访问到的规则。
- Java程序员自定义一个类,实现Servlet接口并重写接口中的方法,Web服务器(如Tomcat等)就可以识别并执行这个程序。
2、Servlet的快速入门
- 创建JavaEE项目
- 定义一个类,实现Servlet接口,实现接口中的方法
/**
* 定义一个实现Servlet接口的类
*
* @author zhuhuix
* @date 2020-08-23
*/
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
// Demo服务
@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() {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
- 运行
- 访问http://localhost:8080/servlet_war_exploded/demo路径
3、Servlet的执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求的URL路径,获取访问的Servlet的资源路径
- 查找web.xml,是否有对应的url-pattern标签体内容
- 如果存在以上标签体内容,则找到其对应的servlet-class标签体中标注的类名
- 接着由web服务器根据全类名对应的的字节码文件加载进内存,并且创建对应的对象
- 最后调用该对象的相应方法
4、Servlet的生命周期
// 初始化方法
// 在Servlet被创建时执行,只会执行一次
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}
// 获取Servlet配置
@Override
public ServletConfig getServletConfig() {
return null;
}
// 提供服务的方法
// 每一次Servlet被访问时执行,执行多次
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...");
}
// 获取Servlet的一些信息
@Override
public String getServletInfo() {
return null;
}
// 销毁方法
// 在web服务器正常关闭时执行,只执行一次
@Override
public void destroy() {
System.out.println("destroy...");
}
- 生命周期图
4.1 指定Servlet的创建时机
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>
<!-- 指定Servlet的创建时机
1.在服务器启动时就创建,load-on-startup配置为0或正值
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>
<!-- 指定Servlet的创建时机
2.第一次被访问时创建,load-on-startup配置为负值
-->
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
- 注意点: Servlet的init方法中尽量不要定义成员变量。
4.2 Destroy方法
- 只有服务器正常关闭时,才会执行Destroy方法
- Destroy方法在Servlet销毁之前执行,一般用于释放资源。