关于用Kaptcha

关于用Kaptcha

http://img1.sycdn.imooc.com//climg/5cc084570001629d04780148.jpg

我想知道,怎样设置验证码的背景颜色,设置成纯白,还有我想文字显示的清楚一点,而不是模糊的,怎样配置Kaptcha呢?

正在回答

登陆购买课程后可参与讨论,去登陆

8回答

同学可以看看一下这三种样式喜欢哪一个呢?

http://img1.sycdn.imooc.com//climg/5cc2c09b0001b6b303320085.jpg

如果同学的想要的是这样

http://img1.sycdn.imooc.com//climg/5cc2c11200019ec302200061.jpg

目前在Kaptcha中还不能够直接设置这样的图片样式呢,同学可能要自定义一个来运用了。


  • MasonM 提问者 #1
    好吧,老师还想问一下,我存储用户是这样的 private static final List<Map<String, String>> usersTable = new ArrayList<>();//用户表 请问我把Map集合的K和V都是String,分别对应账号和密码,但我在查询管理员的时候该怎样去遍历取出每一个用户呢?
    2019-04-26 16:41:58
  • 好帮手慕柯南 回复 提问者 MasonM #2
    同学的意思是查询所有是管理员的用户吗?
    2019-04-26 17:12:59
  • MasonM 提问者 回复 好帮手慕柯南 #3
    对的,就是查询所有管理员 另外,我想知道,在作业思路分析那,我看到CourseDaoImpl中的private static final List<Map<String, Object>> usersTable,这个Map中的Values是Object,我把他改成String类型的,这样Key用来存储账号,Values存储密码可以码?
    2019-04-26 17:49:25
提问者 MasonM 2019-04-27 16:02:01

比如:

我一开始点课程管理

http://img1.sycdn.imooc.com//climg/5cc40bf100012eae16880386.jpg

然后我搜索前端

http://img1.sycdn.imooc.com//climg/5cc40c250001f37216440331.jpg

http://img1.sycdn.imooc.com//climg/5cc40c310001e1c716020312.jpg

可以把前端的课程显示出来,但是如果我现在去点下一页的话,就会变成全部课程都出来了

http://img1.sycdn.imooc.com//climg/5cc40c6300010c7c16100358.jpg

请问我的代码哪里出问题了吗!!请老师帮我看一下谢谢!!!!!

提问者 MasonM 2019-04-27 15:58:04
package com.mason.dto;

import com.mason.entity.Course;

import java.util.*;

//此类中的方法形式与CourseDao类一致,用于对CourseDao中对应方法的调用。
public class CourseDaoImpl implements CourseDao {
    private static final List<Map<String, Object>> usersTable = new ArrayList<>();//用户表

    private static final List<Course> coursesTable = new ArrayList<>();//课程表

    static {
        Map<String, Object> superAdmin = new HashMap<>();
        superAdmin.put("type",0);
        superAdmin.put("username","imooc");
        superAdmin.put("password","imooc");
        usersTable.add(superAdmin);

    }

    @Override
    public int login(String username, String password) {//用户登录
        for (Map<String, Object> userMap : usersTable) {
            if (userMap.get("username").equals(username)) {
                if (userMap.get("password").equals(password)) {
                    return 1;//登录成功返回1

                }
            }
        }
        return 0;//登录失败返回0
    }

    @Override
    public void addUser(String username, String password) {//普通管理员添加方法
        Map<String, Object> admin = new HashMap<>();
        admin.put("type",1);
        admin.put("username",username);
        admin.put("password",password);
        usersTable.add(admin);

    }

    @Override
    public List<Map<String, Object>> getAllUsers() {//查询所有管理员

        return usersTable;
    }//查询所有管理员

    @Override
    public void delUser(String username) {//删除管理员
        Map<String, Object> delUSerMap=null;
        for (Map<String, Object> userMap : usersTable) {
            if (userMap.get("username").equals(username)) {
                delUSerMap=userMap;
                break;
            }
        }
        usersTable.remove(delUSerMap);
    }

    @Override
    public void addCourse(Course couse) {//添加课程
        coursesTable.add(couse);
    }

    @Override
    public List<Course> getAllCourse() {//查询所有课程信息
        return coursesTable;
    }//查询所有课程信息

    @Override
    public void importCourse(ArrayList<ArrayList<String>> courseList) {//批量导入Excel课程表数据

    }
}
package com.mason.service;

import com.mason.dto.CourseDao;
import com.mason.dto.CourseDaoImpl;
import com.mason.entity.Course;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class CourseServiceImpl implements CourseService {
    private CourseDao cd = new CourseDaoImpl();

    @Override
    public int login(String username, String password) {//用户登录
        return cd.login(username, password);
    }

    @Override
    public void addUser(String username, String password) {//普通管理员添加方法
        cd.addUser(username, password);

    }

    @Override
    public List<Map<String, Object>> getAllUsers() {//查询所有管理员
        return cd.getAllUsers();
    }

    @Override
    public void delUser(String username) {//删除管理员
        cd.delUser(username);
    }

    @Override
    public void addCourse(Course couse) {//添加课程
        cd.addCourse(couse);
    }

    @Override
    public List<Course> getAllCourse() {//查询所有课程信息
        return cd.getAllCourse();
    }

    @Override
    public void importCourse(ArrayList<ArrayList<String>> courseList) {//批量导入Excel课程表数据
        cd.importCourse(courseList);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>课程查询</title>
    <!-- 分页查看 -->
    <link rel="stylesheet" type="text/css" href="resources/js/dataTable/jquery.dataTables.min.css">
    <script type="text/javascript" src="resources/js/dataTable/jquery.js"></script>
    <script type="text/javascript" src="resources/js/dataTable/jquery.dataTables.min.js"></script>
    <script type="text/javascript" src="/js/jquery-3.3.1.js"></script>
</head>
<body>
<center>
    <h1>课程查询</h1>
    <hr>
    <div>
        <div style="float: left;">显示
            <select name="rowNum">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3" selected="selected">3</option>
            </select>
            条
        </div>
        <div style="float: right;">
            <form action="<%=basePath%>/showCourse" method="post">
                <input type="text" name="content"/>
                <input type="submit" value="搜索">
            </form>


        </div>
    </div>
    <table cellspacing="0px" cellpadding="0px" border="1px" width="100%" class="tablelist" id="example">
        <thead>
        <tr>
            <th>课程ID</th>
            <th>课程名</th>
            <th>方向</th>
            <th>描述</th>
            <th>时长(小时)</th>
            <th>操作人</th>
        </tr>
        </thead>
        <tbody>
        <c:forEach items="${CourseList}" var="course" varStatus="idx">
            <tr>
                <td>${course.id}</td>
                <td>${course.name}</td>
                <td>${course.courseType}</td>
                <td>${course.description}</td>
                <td>${course.time}</td>
                <td>${course.operator}</td>
            </tr>
        </c:forEach>
        </tbody>
    </table>
    <div>
        <div style="float: left;">从${1}到${1}条记录 总记录为${totalCourseNum}</div>
        <div style="float: right;">
            <a href="<%=basePath%>/showCourse?page=1">第一页</a>
            <a href="<%=basePath%>/showCourse?page=${prePage}">上一页</a>
            <button>${curPage}</button>
            <a href="<%=basePath%>/showCourse?page=${nextPage}">下一页</a>
            <a href="<%=basePath%>/showCourse?page=${totalPage}">最后一页</a>
        </div>
    </div>
</center>

</body>
</html>


提问者 MasonM 2019-04-27 15:57:04
package com.mason.servlet;

import com.mason.entity.Course;
import com.mason.service.CourseServiceImpl;
import org.w3c.dom.stylesheets.LinkStyle;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ShowCourseServlet extends HttpServlet {
    static CourseServiceImpl csi = new CourseServiceImpl();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String pageStr = req.getParameter("page");
        String content = req.getParameter("content");
        System.out.println("content=" + content);
        System.out.println("page=" + pageStr);

        int page = 1;
        if (null != pageStr && !"".equals(pageStr)) {
            page = Integer.parseInt(pageStr);
        }
        int totalCourses = ShowCourseServlet.getCourseCount(content);
        int totalPage = totalCourses % 3 > 0 ? totalCourses / 3 + 1 : totalCourses / 3;
        req.setAttribute("curPage", page);
        req.setAttribute("prePage", page > 1 ? page - 1 : 1);
        req.setAttribute("nextPage", totalPage > page ? page + 1 : totalPage);
        req.setAttribute("totalPage", totalPage);
        req.setAttribute("totalCourseNum", totalCourses);
        req.setAttribute("CourseList", ShowCourseServlet.getCourses(page, 3, content));
        req.getRequestDispatcher("/jsp/showCourse.jsp").forward(req, resp);
        req.getSession().setAttribute("DdaoChuCourseList", ShowCourseServlet.getCoursesList(content));
    }

    private static List<Course> getCourses(int page, int size, String content) {
        List<Course> courseList = new ArrayList<>();
        if (null != content && !"".equals(content)) {
            csi.getAllCourse().forEach(course -> {
                if (course.getName().contains(content)) {//名字
                    courseList.add(course);
                } else if (course.getCourseType().contains(content)) {//方向
                    courseList.add(course);
                } else if (course.getOperator().contains(content)) {//操作人
                    courseList.add(course);
                }
            });
        } else {
            courseList.addAll(csi.getAllCourse());
        }
        int start = (page - 1) * size;
        int end = courseList.size() >= page * size ? page * size : courseList.size();
        return courseList.subList(start, end);
    }

    private static List<Course> getCoursesList(String content) {//用来导出时使用的,不需要subList
        List<Course> courseList = new ArrayList<>();
        if (null != content && !"".equals(content)) {
            csi.getAllCourse().forEach(course -> {
                if (course.getName().contains(content)) {//名字
                    courseList.add(course);
                } else if (course.getCourseType().contains(content)) {//方向
                    courseList.add(course);
                } else if (course.getOperator().contains(content)) {//操作人
                    courseList.add(course);
                }
            });
        } else {
            courseList.addAll(csi.getAllCourse());
        }

        return courseList;
    }

    private static int getCourseCount(String content) {
        List<Course> courseList = new ArrayList<>();
        if (null != content && !"".equals(content)) {
            csi.getAllCourse().forEach(course -> {
                if (course.getName().contains(content)) {//名字
                    courseList.add(course);
                } else if (course.getCourseType().contains(content)) {//方向
                    courseList.add(course);
                } else if (course.getOperator().contains(content)) {//操作人
                    courseList.add(course);
                }
            });
        } else {
            courseList.addAll(csi.getAllCourse());
        }
        return courseList.size();
    }
}

提问者 MasonM 2019-04-26 16:14:25
好帮手慕柯南 2019-04-26 16:10:03

同学可以把样式设置为鱼眼试试。

http://img1.sycdn.imooc.com//climg/5cc2bccc0001081709390138.jpg

<init-param>

            <param-name>kaptcha.obscurificator.impl</param-name>

            <param-value>com.google.code.kaptcha.impl.FishEyeGimpy</param-value>

        </init-param>

用这个样式试试。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 MasonM #1
    老师,用了鱼眼会很奇怪喔
    2019-04-26 16:14:15
  • 好帮手慕柯南 回复 提问者 MasonM #2
    哈哈,是呢,鱼眼中间鼓起来的样子
    2019-04-26 16:31:27
提问者 MasonM 2019-04-26 16:00:41

http://img1.sycdn.imooc.com//climg/5cc2ba940001ac1305000135.jpg

如何设置才能让验证码的文字清楚显示?

好帮手慕柯南 2019-04-25 16:47:54

同学可以下载老师的源码,源码中src文件下有搭建过程和参数说明,里边有关于背景颜色的设置,建议同学按照这个配置一下:

http://img1.sycdn.imooc.com//climg/5cc173c40001286208400159.jpg

同学如果还需要修改其他的样式可以参照如下链接

https://code.google.com/archive/p/kaptcha/wikis/ConfigParameters.wiki  去设置自己想要的用样式,如果我的回答解决了你的疑惑,请采纳!祝学习愉快!



  • 提问者 MasonM #1
    老师我还是不会如何配置Kaptcha的字体,为啥还是像上面的图那样模糊呢?
    2019-04-26 15:58:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师