入门级旅游网

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发送邮件

原文地址:https://www.cnblogs.com/Krisone/p/13232715.html