Servlet代码优化

1 自定义baseServlet

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //重写了service方法。
    //进行请求的分发
        //获取请求路径
        String uri = req.getRequestURI(); // 例如路径为:/brand-case/brand/selectAll
        //获取最后一段路径,即方法名
        int index = uri.lastIndexOf('/');//获取最后一个/的位置,该方法为String对象的方法。
        String methodName = uri.substring(index + 1); // 获取最后一个/的部分字符串,该方法为String对象的方法。
        //获取BrandServlet /UserServlet 字节码对象 Class
        //System.out.println(this);来验证当前对象
        Class<? extends BaseServlet> cls = this.getClass();
        //获取方法 Method对象
        try {
            Method method = cls.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
            //调用该方法(通过反射执行方法,即通过该对象的字节码文件获取发放对象并执行。)
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

 2 后端优化

@WebServlet("/brand/*")
//该urlPatten所有包括/brand/的url都会跳转到BrandServlet,同理,所有包括/user/的url都会跳转到UserServlet。
public class BrandServlet extends BaseServlet{
//继承了自定义的servlet,自定义的servlet被重写了service()方法,每次访问该servlet就会执行重写后的service()方法。
//service()方法实现的功能是:通过url的二级路径来判断调用哪个方法。
//该servlet包含以下方法:继承自HttpServlet的生命周期方法、BaseServlet重写后的service()方法、以及下面的自定义方法。

    private BrandService brandService = new BrandServiceImpl();

    public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //修饰符必须为public
        //该方法与service()方法为两个独立的方法,所以要获取请求中的数据,必须将request和response作为参数。
        List<Brand> brands = brandService.selectAll();
        String jsonString = JSON.toJSONString(brands);
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //修饰符必须为public
        BufferedReader br = request.getReader();
        String params = br.readLine();//json字符串
        Brand brand = JSON.parseObject(params, Brand.class);
        brandService.add(brand);
        response.getWriter().write("success");
    }
}

3 前端优化

selectAll() 函数中发送异步请求的 url 应该改为 http://localhost:8080/brand-case/brand/selectAll 

posted @ 2023-04-08 11:01  10kcheung  阅读(26)  评论(0)    收藏  举报