总结:前期的一个小商城项目

在开始这个小商城项目之前,就有开始写另一个学生系统的小项目。

在学生系统上面就碰到了问题!

  1. 不会打包!不知如何分类!

  2. 发现每个业务都要创建一个Servlet!
    例如:登录loginServlet用来处理login.jsp页面的数据。
    注册registerServlet用来处理register.jsp。。
    【秉承着jsp最佳实践的原则

  3. 不算问题把,前端不是我们的重点。

然后正式开始商城项目之后,这些问题也迎刃而解了。
而且这种方法很。。。牛!

  1. 第一,包装方法。如下
    这里写图片描述
    补充:一般还会有service包和service.Impl包处理实体类数据库业务!

  2. 第二,关于Servlet。
    我的理解是这样的,
    i),浏览器访问服务器的时候都会带着method参数
    ii),我们将关于浏览器的请求业务分类,例如在商品项目中,可以分userServlet,productServlet,indexServlet(首页)…【这些servlet不继承HttpServlet】
    iii),然后,在这些servlet当中实现对应的方法!例如注册,登录。。等法。如果方法有需要转发至那个页面的就将路径作为返回值!这样我们就可以尽量的少创建Servlet!
    列入userServlet下面的方法;

这里写图片描述
login()如下:

    public String login(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("login~~~");
        String username = request.getParameter("username");
        String pswbefore = request.getParameter("psw");
        String psw = MD5Utils.md5(pswbefore);

        User user = new UserServiceImpl().login(username,psw);

        if(user==null) {
            request.setAttribute("msg", "日本人与狗禁止入内");
            return "/jsp/login.jsp";
        } else {
            if(user.getState() == utils.Const.ACTIVE) {
                //登录成功,且邮箱激活
                //1,将user存入session
                HttpSession session = request.getSession();
                session.setAttribute("user", user);
                //2,回到首页 baseServlet----date----->index.jsp首页
                try {
                    response.sendRedirect(request.getContextPath()+"/indexServlet?method=getData");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                //未激活
                request.setAttribute("msg", "没激激激激活");
                return "/jsp/login.jsp";
            }
        }
        return null;
    }

iv)重点是,我们需要创建一个父类的baseServlet这个会继承HttpServlet! 让上面的servlet继承之!
然后,在baseServlet中实现service方法,然后用反射机制获取对应的方法!并激活。然后或去返回值,并转发!

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Class<? extends BaseServlet> claz = this.getClass();
            //获取方法名参数
            String metd = request.getParameter("method");
            //根据反射获取方法
            Method method = claz.getMethod(metd,  HttpServletRequest.class,HttpServletResponse.class);

            //这里的this,就是浏览器请求的子类servlet
            //调用该方法,并将该方法的返回值返回给path
            String path = (String) method.invoke(this,request,response);
            System.out.println("path=="+path);
            if (path!=null) {
                //转发到方法返回的路径
                request.getRequestDispatcher(path).forward(request, response);
            }

        } catch exception...
    }

整个的逻辑如下,画了张潦草的图。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/eternal1d/article/details/78117687
今日推荐