建个基础 servlet 类继承 HttpServlet,其中除了可以反射方法外也可以写些常用的方法 :
public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 重写 service 方法 完成方法分发 /* 获取请求路径 * 获取方法名称 * 获取方法对象 * 执行反射 */ String requestURI = req.getRequestURI(); // 获取 uri String methodName = requestURI.substring(requestURI.indexOf("/") + 1); //substring 获取方法名 try {Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this,req,resp); // 此处的 this 指入口的 class,非此 class } catch (NoSuchMethodException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); } catch (InvocationTargetException e) {e.printStackTrace(); } } /** * 直接将传入对象序列化为 json * 并传给浏览器 * @param obj * @param response * @throws IOException */ 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); } public String writeValueAsString(Object obj) throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(obj); // 将传入对象序列化为 json 并返回字符 } }
相关 servlet 均继承 baseservlet
@WebServlet("/user/*") public class UserServlet extends BaseServlet { /* 原本新建的 get post 方法改成你需要的方法 protected 修饰改成 public 否则需要在 baseServlet 中暴力反射 不建议使用暴力反射 申明 UserService 业务对象 方便使用 声明业务或 dao 对象一般先建接口 然后再实现 */ UserService service = new UserServiceImpl(); // 访问 域名 /user/regist 即可以访问下列方法 public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}