对于Servlet接口而言,实现该接口,都要覆盖重写该接口的所有抽象方法。GenericServlet 是 Servlet接口的实现类,它对Servlet的所有抽象方法都进行了覆盖重写(都做了默认的空实现),其中有一个方法是抽象方法,那就是提供服务的方法 service 方法。
GenericServlet 类的简单学习
创建项目,直接继承GenericServlet类,并覆盖重写service方法:
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(urlPatterns="/demo01")
public class ServletDemo01 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("覆盖重写GenericServlet抽象方法~~~");
}
}
启动服务器,访问 http://localhost:8080/HTTPServletAndGenericServlet_war_exploded/demo01 即可。
HttpServlet 类的简单学习
HttpServlet 类是 GenericServlet 类的子类,该类对HTTP协议进行了简单的封装,用到Servlet,可以尽量选择该类。
快速入门:
-
创建一个类,继承HttpServlet类,覆盖重写doGet()方法、doPost()方法:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/demo02") public class ServletDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet() 方法!!!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost() 方法!!!"); } }
-
创建一个HTML文件,用于测试:
HelloHttpServlet.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Servlet Demo02</title> </head> <body> <!-- 路径指定为 demo02,请求方法为 post --> <form action="/HTTPServletAndGenericServlet_war_exploded/demo02" method="post"> <input name="username"> <input type="submit" value="post提交"> </form> <!-- 路径指定为 demo02,请求方法为 get --> <form action="/HTTPServletAndGenericServlet_war_exploded/demo02" method="get"> <input name="username"> <input type="submit" value="get提交"> </form> </body> </html>
-
浏览器访问
-
访问 http://localhost:8080/HTTPServletAndGenericServlet_war_exploded/demo02
提交方式默认为 get 方式,控制台输出:“doGet() 方法!!!”
-
访问 http://localhost:8080/HTTPServletAndGenericServlet_war_exploded/HelloHttpServlet.html 效果如下:
- post提交,页面跳转到http://localhost:8080/HTTPServletAndGenericServlet_war_exploded/demo02,控制台输出:doPost() 方法!!!
- get提交,页面跳转到http://localhost:8080/HTTPServletAndGenericServlet_war_exploded/demo02,控制台输出:doGet() 方法!!!
-
@WebServlet 的 urlpartten 参数说明
-
写法1:
@WebServlet("/demo1")
该类的url路径为 /demo1
-
写法2:
@WebServlet("/demo1", "demo2", "demo3", ... , "demoN")
该类的url路径可是是:/demo1、/demo2、/demo3、 ...... 、/demoN
-
写法3:
@WebServlet("/*")
该类的url路径无论是什么都可以