首页 > 其他分享 >BaseServlet抽取以及UserServlet和页面路径改写

BaseServlet抽取以及UserServlet和页面路径改写

时间:2022-08-24 17:34:11浏览次数:60  
标签:info BaseServlet UserServlet request throws user new response 页面

BaseServlet抽取

优化Servlet

  减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,

  相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。

 

 

 UserServlet类:

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
    public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("userServlet的add方法");
    }

    public void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("userServlet的find方法");
    }
}

BaseServlet类:

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //System.out.println("BaseServlet的service方法被执行");

        //完成方法分发
        //1、获取请求路径
        String uri = req.getRequestURI();
        System.out.println("请求的uri:"+uri);
        //2、获取方法名称
        String methodName = uri.substring(uri.lastIndexOf("/") + 1);
        System.out.println("方法名称:"+methodName);
        //3、获取方法对象
        try {
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //4、执行方法
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}

 

 

 

 

 

 

UserServlet和页面路径改写

UserServlet类:

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
    //声明Userservice业务对象
    private UserService service = new UserServiceImpl();

    /**
     * 注册功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //验证校验
        String check = request.getParameter("check");
        //从session中获取验证码
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        //为了保证验证码只能使用一次
        session.removeAttribute("CHECKCODE_SERVER");
        //比较
        if (checkcode_server==null || !checkcode_server.equalsIgnoreCase(check)){
            //验证码错误
            ResultInfo info = new ResultInfo();
            info.setFlag(false);
            info.setErrorMsg("验证码错误");
            //将info对象序列化为json
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(info);
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(json);
            return;
        }


        //1、获取数据
        Map<String, String[]> map = request.getParameterMap();
        //2、封装对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //3、调用service完成注册
        //UserService service = new UserServiceImpl();
        boolean flag = service.regist(user);
        //4、响应结果
        ResultInfo info = new ResultInfo();
        if (flag){
            //注册成功
            info.setFlag(true);
        }else {
            //注册失败
            info.setFlag(false);
            info.setErrorMsg("注册失败");
        }
        //将info对象序列化为json
        ObjectMapper mapper = new ObjectMapper();
        String string = mapper.writeValueAsString(info);
        //将json数据写回客户端
        //设置content-type
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(string);
    }

    /**
     * 登录功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取验证码
        String check = request.getParameter("check");
        //从session中获取验证码
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        //保证验证码只能使用一次
        session.removeAttribute("CHECKCODE_SERVER");
        //判断
        if (checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){
            //验证码错误
            ResultInfo info = new ResultInfo();
            info.setFlag(false);
            info.setErrorMsg("验证码错误");
            //将info对象序列化为json
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(info);
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(json);
            return;
        }


        //1、获取用户名和密码数据
        Map<String, String[]> map = request.getParameterMap();
        //2、封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //3、调用Service查询
        //UserService service = new UserServiceImpl();
        User u = service.login(user);
        session.setAttribute("user",u);
        ResultInfo info = new ResultInfo();
        //4、判断用户对象是否存在
        if(u==null){
            //用户名密码错误
            info.setFlag(false);
            info.setErrorMsg("用户名或密码错误");
        }
        //5、判断用户是否激活
        if(u != null && !"Y".equals(u.getStatus())){
            //用户尚未激活
            info.setFlag(false);
            info.setErrorMsg("您尚未激活,请激活");
        }
        //6、判断登录成功
        if (u!=null && "Y".equals(u.getStatus())){
            info.setFlag(true);
        }

        //响应数据
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),info);
    }

    /**
     * 查找一个
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从session中获取登录用户
        Object user = request.getSession().getAttribute("user");
        //将user写回客户端

        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),user);
    }

    /**
     * 退出
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、销毁session
        request.getSession().invalidate();

        //2、跳转登录页面
        response.sendRedirect(request.getContextPath()+"/login.html");
    }

    /**
     * 激活功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、获取激活码
        String code = request.getParameter("code");
        if (code!=null){
            //2、调用service完成激活
            //UserService service = new UserServiceImpl();
            boolean flag = service.active(code);

            //3、判断标记
            String msg = null;
            if (flag){
                msg = "激活成功,请<a href='/travel/login.html'>登录</a>";
            }else {
                msg = "激活失败,请联系管理员";
            }
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(msg);
        }
    }
}

修改页面路径:

regist.html页面:

$(function () {
                $("#registerForm").submit(function () {
                    //发送数据到服务器
                    if (checkUsername() && checkPassword() && checkEmail()){
                        //校验通过发送ajax请求,提交表单的数据
                        $.post("user/regist",$(this).serialize(),function (data) {
                            //处理服务器响应的数据
                            if(data.flag){
                                //注册成功,跳转成功页面
                                location.href = "register_ok.html";
                            }else {
                                $("#errorMsg").html(data.errorMsg);
                            }
                        });
                    }
                    return false;
                });

header.html页面:

<script>
    $(function () {
        $.get("user/findOne",{},function (data) {
            var msg = "欢迎回来,"+data.name;
            $("#span_username").html(msg);
        });
    });
</script>

login.html页面:

<script>
        //1、给登录按钮绑定单击事件
        $(function () {
            $("#btn_sub").click(function () {
                //2、发送ajax请求,提交表单数据
                $.post("user/login",$("#loginForm").serialize(),function (data) {
                    //3、处理响应数据
                    if (data.flag){
                        //登录成功
                        location.href="index.html";
                    }else {
                        //登录失败
                        $("#errorMsg").html(data.errorMsg);
                    }
                });
            });
        });
    </script>

UserServiceImpl实现类:

/**
     * 注册用户
     * @param user
     * @return
     */
    @Override
    public boolean regist(User user) {
        //根据用户名查询用户对象
        User u = userDao.findByUsername(user.getUsername());
        //判断u是否为null
        if (u!=null){
            //用户名已存在,注册失败
            return false;
        }
        //保存用户信息
        //设置激活码。唯一字符串
        user.setCode(UuidUtil.getUuid());
        //设置激活状态
        user.setStatus("N");
        userDao.save(user);

        //激活邮件发送
        String content = "<a href='http://localhost/travel/user/active?code="+user.getCode()+"'>点击激活【旅游网】</a>";

        MailUtils.sendMail(user.getEmail(),content,"激活邮件");
        return true;
    }

  

标签:info,BaseServlet,UserServlet,request,throws,user,new,response,页面
From: https://www.cnblogs.com/xjw12345/p/16620171.html

相关文章

  • angular ionic ts的数据不更新到html页面
    场景:在ts中更新了某个数据但是未刷新到html页面,该页面的上方放置的腾讯地图,下方放置需要更新数据的版块,该板块的数据未更新其他页面能正常更新原因:未知解决方法:在ts......
  • uniapp 打开 外部app某个页面
    配置manifest.json->urlschemewhitelist白名单/*ios打包配置*/"ios":{"UIBackgroundModes":["audio"],"urlschemewhitelist":["baidumap","iosa......
  • tomcat自定义错误页面
    tomcat自定义错误页面 当我们访问tomcat的一个不存在的页面,返回错误信息如下: 这样的界面直接暴露给用户并不友好,有时候还不安全,因此一般需要修改默认的错误......
  • STS用Maven写一个登录页面
    上一章我们写了一个HelloWorld,这一章在此基础上写出一个登录页面。 一、当前目录结构为:  之所以运行后出现HelloWord的页面,是因为server启动时会默认执行index.jsp......
  • 猿大师播放器在高版本谷歌Chrome网页播放20路海康威视H.265/H.264格式RTSP视频流页面
    问:试用猿大师播放器播放一路视频效果很不错,延迟可以控制在200毫秒左右,但是如果播放多路高清视频,CPU占用就会比较高,并且网页也会卡顿,该如何解决呢? 答:猿大师播放器......
  • laravel+mews/captcha 打开页面后的首次验证码总是验证失败的问题解决
    出现问题的原因验证码获取后,还有其他的接口请求,导致验证码的缓存被覆盖(参考文章:LaravelSession遇到的坑)解决办法修改vendor/mews/captcha/src/Captcha.php源码,将......
  • uniapp 使用Vue3 setup组合式API 引入 uniapp 的 页面生命周期
    uniapp使用Vue3setup组合式API引入uniapp的页面生命周期<template><viewclass="content"><imageclass="logo"@click="handleFei"src="/static/logo.pn......
  • 页面国际化
    7、页面国际化有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要学习国际化了!7.1、准备工作先在IDEA中统一设置properties的编码问题!编写国际化配置......
  • 前端html页面基础,元素,超文本标记语言
    前端什么是前端前端核心超文本传输协议前戏HTTP超文本传输协议什么是超文本传输协议HTTP传输协议四大特性数据格式响应状态码html简介head内常见的标签......
  • elementui步骤条页面开发案例
    <template><divid="bdy"><divclass="tbody"><el-steps:active="active"finish-status="success"><el-steptitle="创建项目"></el-step>......