一、Servlet的基本概念
- Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。
- Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态Web内容。
二、Servlet的编程步骤
1.建立一个Java Web Application项目并配置Tomcat服务器。
2.自定义类实现Servlet接口或者继承GenericServlet抽象类和HttpServlet抽象类,并重写service()方法。
3.将自定义类的信息配置到web.xml文件并启动项目。配置方式如下
<!-- 配置servlet-->
<servlet>
<!-- ServletDemo01是servlet类的别名-->
<servlet-name>ServletDemo01</servlet-name>
<!-- cn.xuguowen.servlet.ServletDemo01路径包含真实的servlet类名-->
<servlet-class>cn.xuguowen.servlet.ServletDemo01</servlet-class>
</servlet>
<!-- 映射servlet-->
<servlet-mapping>
<!-- ServletDemo01是servlet类的别名,与上述名称必须相同-->
<servlet-name>ServletDemo01</servlet-name>
<!-- /ServletDemo01是供浏览器访问地址-->
<url-pattern>/ServletDemo01</url-pattern>
</servlet-mapping>
- 在浏览器上访问的方式是:
http://localhost:8080/工程路径/url-pattern的内容
三、自定义类实现Servlet接口
1.自定义ServletDemo01类实现Servlet接口,并重写接口中的所有抽象方法
public class ServletDemo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("浏览器成功访问了ServletDemo01这个类");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
2.配置web.xml方式
<!-- 配置servlet-->
<servlet>
<!-- ServletDemo01是servlet类的别名-->
<servlet-name>ServletDemo01</servlet-name>
<!-- cn.xuguowen.servlet.ServletDemo01路径包含真实的servlet类名-->
<servlet-class>cn.xuguowen.servlet.ServletDemo01</servlet-class>
</servlet>
<!-- 映射servlet-->
<servlet-mapping>
<!-- ServletDemo01是servlet类的别名,与上述名称必须相同-->
<servlet-name>ServletDemo01</servlet-name>
<!-- /ServletDemo01是供浏览器访问地址-->
<url-pattern>/ServletDemo01</url-pattern>
</servlet-mapping>
3.在浏览器中访问该servlet
四、自定义类继承GenericServlet抽象类
1.自定义ServletDemo02类继承GenericServlet抽象类,并重写抽象类中的抽象方法
public class ServletDemo02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("继承GenericServlet类实现Servlet程序!");
}
}
2.配置web.xml
<servlet>
<servlet-name>ServletDemo02</servlet-name>
<servlet-class>cn.xuguowen.servlet.ServletDemo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo02</servlet-name>
<url-pattern>/ServletDemo02</url-pattern>
</servlet-mapping>
3.在浏览器访问该servlet并查看控制台的输出信息
五、自定义类继承HttpServlet抽象类(开发中推荐使用)
1.自定义类继承HttpServlet抽象类,并重写抽象类中的抽象方法
public class ServletDemo03 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("继承HttpServlet的方式实现Servlet程序!推荐以后的开发中使用这种方式!");
}
}
2.配置web.xml
<servlet>
<servlet-name>ServletDemo03</servlet-name>
<servlet-class>cn.xuguowen.servlet.ServletDemo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo03</servlet-name>
<url-pattern>/ServletDemo03</url-pattern>
</servlet-mapping>
3.在浏览器访问该servlet并查看控制台的输出信息
六、Servlet的生命周期
- 代码验证
/**
* @author 徐国文
* @create 2021-08-27 20:14
* Servlet的生命周期:
* 多次请求ServletDemo04之后,发现
* 1.无参构造方法执行了一次,当第一次请求ServletDemo04时调用构造方法创建Servlet实例
* 2.init()方法也执行一次,当创建好Servlet实例之后立即调用该方法实现初始化操作
* 3.service()方法被多次调用。每次请求都会调用service()方法
* 4.destory():只被调用一次,当该Servlet实例所在的Web应用被卸载前调用该方法释放资源
*/
public class ServletDemo04 extends HttpServlet {
/**
* 无参构造方法
*/
public ServletDemo04() {
System.out.println("创建ServletDemo04对象");
}
/**
* 初始化方法
* @throws ServletException
*/
@Override
public void init() throws ServletException {
System.out.println("初始化ServletDemo04。。。");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("继承HttpServlet的方式实现Servlet程序!推荐以后的开发中使用这种方式!");
}
/**
* 销毁方法
*/
@Override
public void destroy() {
System.out.println("销毁ServletDemo04。。。");
}
}
七、使用注解的方式配置Servlet
1.在IDEA中直接创建Servlet,不需要自定义类实现接口或者继承的方式实现Servlet编程。
2.在该类头部的注解信息处配置servlet的访问路径,最后访问即可。