zoukankan      html  css  js  c++  java
  • 入门级旅游网

    Idea控制台中文乱码解决:-Dfile.encoding=gb2312(GBK也可)

    优化Servlet

    目的

    减少Servlet的数量,现在是一个功能一个Servlet,
    将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,
    在Servlet中提供不同的方法,完成用户的请求。

    Servlet基类 - BaseServlet

    public class BaseServlet extends HttpServlet {
        /**
         * 原理:
         * 在Servlet中,每次给服务器发送响应,都会自动调用Servlet的service方法
         * 基类Servlet 通过继承该类的子类,将会自动调用其父类(也就是该类)的service方法,因为子类并不会重写该方法
         *
         * 实现的功能:
         * 是根据uri中的字符串,找到需要调用的方法 如 /user/login -> 该类的service方法会实现对子类login方法的调用,
            即实现根据不同逻辑实现方法的分发功能
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 完成方法的分发 反射的技术
            // 1. 获取请求的路径
            String uri = req.getRequestURI(); // 格式:/项目的虚拟目录/user/XXX 我们需要的是XXX
            // 2. 获取方法的名称
            String methodName = uri.substring(uri.lastIndexOf('/')+1);
            // 3. 获取方法调用的对象
            // 调用该方法的对象是 BaseServlet的子类 谁此刻调用了 谁就是方法的调用者
            // 4. 获取方法对象
            try {
                Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
                // 5. 反射执行该方法
                method.invoke(this, req,resp);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    

    UserServlet改写为userModuleServlet

    将之前的Servlet实现的功能,抽取到userModuleServlet中的不同方法中实现,
    并且将UserService创建抽取到成员变量位置

    @WebServlet("/user/*") // 通过user/login则调用login方法
    public class userModuleServlet extends BaseServlet {
    
        private UserService service = new UserServiceImpl();
        private ObjectMapper mapper = new ObjectMapper();
    
        /**
         * 用户注册
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
        /**
         * 邮箱激活
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
        /**
         * 用户登录
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
        /**
         * 用户退出
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
        /**
         * 在session中找到当前登录的用户信息
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
        
    }
    

    页面路径改写

    register.html

    login.html

    header.html

    UserServiceImpl发送邮件

  • 相关阅读:
    StackExchange.Redis 文档翻译
    性能分析
    脚本
    KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?
    事件
    发布/订阅 消息顺序
    Redis中的事务
    键、值以及通道
    管道和多路复用器
    配置
  • 原文地址:https://www.cnblogs.com/Krisone/p/13232715.html
Copyright © 2011-2022 走看看