Servlet请求分发
在网页的表单请求中,经常会遇到不同的请求方式(get,post),对于不同的请求,需要不同的请求处理方式
方法一:
直接调用servletRequest没有选择获取请求方式的方法,但是其子类HttpServletRequest是有getMethod方法来获取请求方式的,所以先将其转化为HttpServletRequest,再判断,分别书写不同请求的不同逻辑
//service方法专门用来处理请求与响应
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//控制台打印
System.out.println("Hello Servlet!");
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
if ("POST".equals(method)) {
System.out.println("post");
}
if ("GET".equals(method)) {
System.out.println("get");
}
}
问题:太臃肿了,这里只有一句输出看起来无所谓,但是处理逻辑过多时,一个方法内包含的代码量太多,虽说可以将这些代码再放到其他方法中嵌套的调用如下
方法一优化:
//service方法专门用来处理请求与响应
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//控制台打印
System.out.println("Hello ylt!");
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
if ("POST".equals(method)) {
doPost();
}
if ("GET".equals(method)) {
doGet();
}
}
private void doPost() {
System.out.println("post");
}
private void doGet() {
System.out.println("get");
}
看起来是好一些,但是在一个方法中同时维护get和post逻辑,始终觉得臃肿,所以一般采用直接继承HttpServlet的方式对不同的请求进行处理
方法二
继承HttpServlet类,并重写其中doGet和doPost方法(常用的请求分发处理方式)
public class HttpServletTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("Get");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println("Post");
}
}