Java Web将多个servlet封装在一个class类中

😂 这篇文章最后更新于2074天前,您需要注意相关的内容是否还可用。

建个基础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 {
        
    }
}