新手上路:旅游网案例(中)

归类servlet

需求:需要把servlet整合成和service和dao一样用方法来方便管理

/**
 * @Description: user表里面的所有功能
 * @Author: Mr.Night
 */
@WebServlet("/user/*")//把uesr表里面的功能(servlet)变成方法
public class UserServlet extends BaseServlet {

    //③调用service层
    private UserService service = new UserServiceImpl();

    /**
     * @Description: 注册
     * @Author: Mr.Night
     */
    public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //验证码校验
        String check = request.getParameter("check");
        //从sesion中获取验证码
        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对象对返 回数据的结果进行封装
            ResultInfo info = new ResultInfo();
            //注册失败
            info.setFlag(false);
            //提示信息
            info.setErrorMsg("验证码有误!");
            //将ResultInfo对象序列化为json
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(info);
            //将json数据重写回客户端
            //设置content-type
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(json);
            return;
        }

        //①利用request方法获取数据
        Map<String, String[]> map = request.getParameterMap();

        //②封装User对象
        //调用user对象
        User user = new User();
        try {
            //调用BeanUtils的静态方法把map封装到user对象
            BeanUtils.populate(user, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //调用service的方法完成注册
        boolean flag = service.regist(user);

        //④响应结果
        //调用ResultInfo对象对返回数据的结果进行封装
        ResultInfo info = new ResultInfo();
        if (flag) {
            //注册成功
            info.setFlag(true);
        } else {
            //注册失败
            info.setFlag(false);
            //封装提示信息
            info.setErrorMsg("该用户名已存在!");
        }
        //将ResultInfo对象序列化为json
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(info);
        //将json数据重写回客户端
        //设置content-type
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);
    }

    /**
     * @Description: 验证码
     * @Author: Mr.Night
     */
    public void checkCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //服务器通知浏览器不要缓存
        response.setHeader("pragma", "no-cache");
        response.setHeader("cache-control", "no-cache");
        response.setHeader("expires", "0");

        //在内存中创建一个长80,宽30的图片,默认黑色背景
        //参数一:长
        //参数二:宽
        //参数三:颜色
        int width = 80;
        int height = 30;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        //获取画笔
        Graphics g = image.getGraphics();
        //设置画笔颜色为灰色
        g.setColor(Color.GRAY);
        //填充图片
        g.fillRect(0, 0, width, height);

        //产生4个随机验证码,12Ey
        String checkCode = getCheckCode();
        //将验证码放入HttpSession中
        request.getSession().setAttribute("CHECKCODE_SERVER", checkCode);

        //设置画笔颜色为黄色
        g.setColor(Color.YELLOW);
        //设置字体的小大
        g.setFont(new Font("黑体", Font.BOLD, 24));
        //向图片上写入验证码
        g.drawString(checkCode, 15, 25);

        //将内存中的图片输出到浏览器
        //参数一:图片对象
        //参数二:图片的格式,如PNG,JPG,GIF
        //参数三:图片输出到哪里去
        ImageIO.write(image, "PNG", response.getOutputStream());
    }

    /**
     * 产生4位随机字符串
     */
    private String getCheckCode() {
        String base = "0123456789ABCDEFGabcdefg";
        int size = base.length();
        Random r = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 1; i <= 4; i++) {
            //产生0到size-1的随机值
            int index = r.nextInt(size);
            //在base字符串中获取下标为index的字符
            char c = base.charAt(index);
            //将c放入到StringBuffer中去
            sb.append(c);
        }
        return sb.toString();
    }

    /**
    * @Description: 邮件激活
    * @Author: Mr.Night
    */
    public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取激活码
        String code = request.getParameter("code");
        //判断激活码是否存在
        if (code != null) {
            //激活码存在
            //声明提示信息
            String msg = null;
            //激活用户是否成功,用boolean接收
            boolean flag = service.active(code);
            if (flag) {
                //激活成功,显示提示信息并可以跳转到登录页面
                msg = "激活成功,请<a href='login.html'>登录</a>";
            } else {
                //激活失败,显示提示信息
                msg = "激活失败,请联系管理员!";
            }
            //设置content-type防止乱码
            response.setContentType("text/html;charset=utf-8");
            //将数据写回客户端页面
            response.getWriter().write(msg);
        }
    }
    
    /**
    * @Description: 登录
    * @Author: Mr.Night
    */
    public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户名和密码
        Map<String, String[]> map = request.getParameterMap();
        //封装user对象
        User user = new User();
        try {
            //调用BeanUtils的静态方法把map封装进user对象
            BeanUtils.populate(user, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //使用service方法进行查询
        User u = service.login(user);
        //调用ResultInfo工具类对返回数据结果进行封装
        ResultInfo info = new ResultInfo();

        //判断对象是否为null
        if (u == null) {
            //用户名或密码错误,调用info方法
            //登录失败
            info.setFlag(false);
            //提示信息
            info.setErrorMsg("用户名或密码错误");
        }

        //判断用户是否激活
        if (u != null && "N".equals(u.getStatus())) {
            //用户尚未激活
            //登录失败
            info.setFlag(false);
            //提示信息
            info.setErrorMsg("您尚未激活,请先激活!");
        }

        //判断用户是否登录成功
        if (u != null && "Y".equals(u.getStatus())) {
            //满足if,则登录成功
            info.setFlag(true);
        }

        //响应数据
        ObjectMapper mapper = new ObjectMapper();
        //通过session得到user对象的属性
        request.getSession().setAttribute("user",u);
        //设置Content-type
        response.setContentType("application/json;charset=utf-8");
        //将数据写会客户端
        mapper.writeValue(response.getOutputStream(), info);
    }

    /**
    * @Description: 主页显示用户姓名
    * @Author: Mr.Night
    */
    public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从session获取登录用户
        Object user = request.getSession().getAttribute("user");
        //将数据直接写回客户端
        ObjectMapper mapper = new ObjectMapper();
        //设置Content-Type防止乱码
        response.setContentType("application/json;charset=utf-8");
        //调用mapper方法将数据返回
        mapper.writeValue(response.getOutputStream(), user);
    }

    /**
    * @Description: 退出
    * @Author: Mr.Night
    */
    public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //销毁session数据
        request.getSession().invalidate();
        //重定向跳转到登录页面
        response.sendRedirect(request.getContextPath() + "/login.html");
    }
}

网页form表单分类

dao


public interface CategoryDao {
    /**
    * @Description: 查询种类列表
    * @Author: Mr.Night
    */
    List<Category> findAll();
}

public class CategoryDaoImpl implements CategoryDao {
    //声明数据库连接池
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());


    public List<Category> findAll() {
        //声明sql
        String sql = "select * from tab_category";
        //执行并返回sql
        return template.query(sql, new BeanPropertyRowMapper<>(Category.class));
    }
}

service

public interface CategoryService {
    List<Category> findAll();
}

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();

    public List<Category> findAll() {
        //直接返回dao层的查询种类列表的方法
        return categoryDao.findAll();
    }
}

servlet

@WebServlet("/category/*")
public class CategoryServlet extends BaseServlet {
    //调用service层
    private CategoryService service = new CategoryServiceImpl();

    /**
     * @Description: 查询种类列表
     * @Author: Mr.Night
     */
    public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用service查询
        List<Category> cs = service.findAll();
        //调用序列化方法
        writeValue(cs, response);
    }
}

代码(BaseServlet.java)/**
    * @Description: 将传入的对象序列化json,并写回客户端
    * @Author: Mr.Night
    */
    public void writeValue(Object obj,HttpServletResponse response) throws IOException {
        //序列化json
        ObjectMapper mapper = new ObjectMapper();
        //设置content-Type,防止乱码
        response.setContentType("application/json;charset=utf-8");
        //写回客户端
        mapper.writeValue(response.getOutputStream(), obj);
    }

    /**
    * @Description: 将传入的对象序列化json,返回
    * @Author: Mr.Night
    */
    public String writeValueAsString(Object obj) throws JsonProcessingException {
        //序列化json
        ObjectMapper mapper = new ObjectMapper();
        //返回字符串
        return mapper.writeValueAsString(obj);
    }

js

<!--js-->
   //将信息写到网页上
            $("#span_username").html(msg);
            $("#exit").html("退出");
        })
        //查询分类数据
        $.get("category/findAll", {}, function (data) {
            //数据库获取动态展示
            var lis = '<li class="nav-active"><a href="index.html">首页</a></li>';
            //遍历分类集合
            for (var i = 0; i < data.length; i++) {
                var li = '<li><a href="route_list.html">' + data[i].cname + '</a></li>';
                //拼接
                lis += li;
            }
            //拼接
            lis += '<li><a href="favoriterank.html">收藏排行榜</a></li>';
            //显示到页面
            $("#category").html(lis);
<!--html-->
<!-- 头部 end -->
<!-- 首页导航 -->
<div class="navitem">
    <ul id="category" class="nav">

利用redis来缓存数据

service

 public List<Category> findAll() {
        //缓存优化
        //获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //使用sortedset排序查询
        Set<String> categorys = jedis.zrange("category", 0, -1);
        //声明list
        List<Category> cs = null;
        //判断排序查询的集合是否为空
        if (categorys == null || categorys.size() == 0) {
            //集合为空,就需要先从数据库里面查询,再将数据存入redis
            //调用dao的方法从数据库查询并封装到Category的list集合
            cs = categoryDao.findAll();
            //将list集合数据存储到redis中的category(key)中
            for (int i = 0; i < cs.size(); i++) {
                //循环存储
                jedis.zadd("catgory", cs.get(i).getCid(), cs.get(i).getCname());
            }
        } else {
            //集合不为空,因为return是list集合,就将set集合的数据存入到list
            //初始化list
            cs = new ArrayList<>();
            //遍历set集合
            for (String name : categorys) {
                //初始化分类表
                Category category = new Category();
                //先将set的数据封装到category对象
                category.setCname(name);
                //再将category存入集合
                cs.add(category);
            }
        }
        //关闭连接,解决频繁刷新数据丢失的问题
        jedis.close();
        //返回list集合
        return cs;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值