优化Servlet
优化Servlet
用UserServlet专门处理关于User模块的功能,在这个UserServlet里面提供很多方法,完成不同的功能,
优化Servlet的目的就是减少Servlet的数量,讲一个功能一个Servlet优化为一个模块一个Servlet,也相当于是数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求
优化Servlet的方法:
我们写一个BaseServlet继承HttpServlet,重新service()方法。然后其他Servlet继承 BaseServlet。
8 然后在BaseServle中的service方法里面进行分发。
9 具体,就是获取不同servlet的请求路径,截取出来方法名,因为我们可以规定,不同模块的 servlet的请求路径为一个二级路径,例如:UserServlet 的请求路径 /user/* 那么当前台请求 路径为 /user/add 那就是想要
10 UserServlet中的add方法执行。 如果请求路径为 /user/find 那就是想让UserServlet的 find方法执行。
11 那么我们在BaseServlet中获取请求路径,截取出方法名,通过反射的方式,让子类Servlet中 的方法执行。
12 BaseServlet的抽取
1.创建一个BaseServlet继承HttpServlet,但是不要给BaseServlet写任何路径,因为我们不直接 请求BaseServlet,而是请求他的子类,当请求他的子类时,那么父类BaseServlet中的service()方法就会执行。
2 2.重新service()方法。
3 3.在service()方法中获取请求路径,那么这里有一个问题,我在父类BaseServlet中怎么获取子类 Servlet的对 象,其实使用this就可以,this就代表这个子类Servlet,我们等会可以测试看下。
4 4.从请求路径中截取方法名出来 例如请求路径是 xxxx/user/add 我们把add截取出来。
5 5.通过反射获取add方法对象,并调用执行。
BaseServlet代码的实现
package org.westos.travel.web.servlet;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
public class BaseServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//在这里完成方法的分发
//1.获取请求路径
String uri = request.getRequestURI();
System.out.println("请求Uri"+uri);
//2.获取方法名称
String methodName = uri.substring(uri.lastIndexOf("/") + 1);
System.out.println(methodName);
//3.获取方法对象
System.out.println(this);//this代表的是userServlet,
try {
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
// Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4。执行方法
method.invoke(this,request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
public void writeValue(Object obj, HttpServletResponse response) throws IOException {
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset utf-8");
mapper.writeValue(response.getOutputStream(), obj);
}
//提供把对象转换成json字符串的方法
public String ObjectToJson(Object obj) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(obj);
return json;
}
}
将所有子类要用到的方法,抽取到这个类中。
本文地址:https://blog.csdn.net/qq_46466568/article/details/109643153
上一篇: String到底是值传递还是引用传递?
下一篇: 学习springboot的一些简单的笔记