1.5 Servlet请求的分发处理
表单的提交方式分为POST和GET两种请求方式,但是service方法只有一个,如何实现分发处理呢?
首先在webapp文件夹下创建一个页面,以get方式提交表单给资源文件hello:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://localhost:8080/Servlet_Test/hello" method="get"> <input type="submit"/> </form> </body> </html>
HelloServlet中的service方法修改如下:
@Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //向下转型 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String method = httpServletRequest.getMethod(); //请求分发处理 String post = "POST"; String get = "GET"; if(post.equals(method)){ System.out.println("POST方式"); }else if (get.equals(method)){ System.out.println("GET方式"); } }
getMethod方法可以返回一个String值,用于判断是POST请求还是GET请求,运行结果如下:
该例子中,简单介绍了如何判断请求方式,并打印。实际中,如果分发处理的代码都写在service方法中,会显得过于臃肿。
因此,在实际开发中,分发处理的具体操作会单独写成方法,供service调用。例如:doGet()、doPost()方法。
1.6 通过继承HttpServlet类实现Servlet程序
在实际开发中,我们很少通过实现Servlet方法的方式去实现Servlet程序,更多的是采用继承子类的方式来实现。大致步骤如下:
编写一个类去继承 HttpServlet 类;
根据业务需要重写 doGet 和 doPost 方法(分发处理的具体方法);
到web.xml中配置Servlet程序的访问地址。
需要注意的是,在HttpServlet类中,已经帮我们分发处理完毕了
案例代码如下:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 * 通过继承的方式实现Servlet */ public class HelloServlet2 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("do Get具体操作"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("do Post具体操作"); } }
除了自己重写以外,在实际开发中有一种更加便捷的方式:
使用IDEA菜单生成Servlet程序
创建的时候可以选择取消注解,会自动配置xml文件,只需要手动添加mapping即可:
2 Servlet体系
2.1 Servlet继承体系
Servlet接口: 负责定义Servlet程序的访问规范;
GenericServlet类: 实现了Servlet接口,做了很多空实现。持有一个ServletConfig类的空引用,并对ServletConfig的使用做了些方法;
HttpService抽象类: 实现了service方法,并实现了请求的分发处理。GET和POST请求的方式分别对应doGet与doPost方法。
自定Servlet程序: 根据自己的需要去重写doGet与doPost方法即可。
2.2 ServletConfig类的使用
ServletConfig类是Servlet程序的信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们只负责使用。
Servlet程序默认第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
ServletConfig的作用简介: