SSHDay02(MD5Utils PageBean)

用户注册功能
1、可以先判断登录名是否已经存在
2、要给密码使用MD5进行加密操作

用户登录功能
1、登录功能要注意先给密码加密后,在进行查询
    密码加密后再查询
    用户的状态必须是1,字符串类型的


用户退出功能
1、把用户信息从HttpSession中清除

查询所有客户功能
1、数据字典表的引入
    数据字典表的作用:规范开发中数据的写法
    字段表与客户表是一对多的关系
    修改客户表,添加外键(使用SQLyog进行修改)

2、创建字典表的实体和映射的配置文件
    编写字典表的JavaBean和映射的配置文件
    修改Customer的JavaBean,因为是多方,需要把外键字段换成字典对象
    修改Customer.hbm.xml的配置文件,配置一对多
3、分页查询所有的客户功能实现

按条件查询所有的客户
1、使用异步的方式加载客户级别和客户的来源
    前端使用Jquery的ajax技术
    后端使用fastjson的jar包
        导入fastjson的开发jar包
        String s = JSON.toJSONString(集合)
        String s = JSON.toJSONString(对象)

    如果List集合中存入相同引用的对象
        fastjson默认的情况下是进行循环检测的,去除掉死循环调用的方式
        可以使用JSON.toJSONString(p,SerializerFeature.DisableCircularReferenceDetect)
        去除循环检测,但是就会出现死循环的效果
        最后可以使用注解:@JSONField(serialize=false)对指定的属性不转换成json

这里写图片描述
这里写图片描述
MD5Utils

public class MD5Utils {
    /**
     * 使用md5的算法进行加密
     */
    public static String md5(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(
                    plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有md5这个算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

    public static void main(String[] args) {
        System.out.println(md5("123"));
    }

}

PageBean

/**
 * 分页的JavaBean
 * @author Administrator
 */
public class PageBean<T> {

    // 当前页
    private int pageCode;

    // 总页数
    // private int totalPage;

    // 总记录数
    private int totalCount;
    // 每页显示的记录条数
    private int pageSize;
    // 每页显示的数据
    private List<T> beanList;

    public int getPageCode() {
        return pageCode;
    }
    public void setPageCode(int pageCode) {
        this.pageCode = pageCode;
    }

    /**
     * 调用getTotalPage() 获取到总页数
     * JavaBean的属性规定:totalPage是JavaBean是属性 ${pageBean.totalPage}
     * @return
     */
    public int getTotalPage() {
        // 计算
        int totalPage = totalCount / pageSize;
        // 说明整除
        if(totalCount % pageSize == 0){
            return totalPage;
        }else{
            return totalPage + 1;
        }
    }

    /*public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }*/

    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public List<T> getBeanList() {
        return beanList;
    }
    public void setBeanList(List<T> beanList) {
        this.beanList = beanList;
    }
}

list.jsp

<SCRIPT language=javascript>
    //提交分页的查询表单
    function to_page(page){
        if(page){
            $("#page").val(page);
        }
        document.customerForm.submit();

    }
</SCRIPT>
                                                <c:forEach items="${page.beanList}" var="customer">
                                                <TR
                                                    style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
                                                    <TD>${customer.cust_name }</TD>
                                                    <TD>${customer.level.dict_item_name }</TD>
                                                    <TD>${customer.source.dict_item_name }</TD>
                                                    <TD>${customer.cust_linkman }</TD>
                                                    <TD>${customer.cust_phone }</TD>
                                                    <TD>${customer.cust_mobile }</TD>
                                                    <TD>
                                                    <a href="${pageContext.request.contextPath }/customerServlet?method=edit&custId=${customer.cust_id}">修改</a>
                                                    &nbsp;&nbsp;
                                                    <a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a>
                                                    </TD>
                                                </TR>

                                                </c:forEach>

                                            </TBODY>
                                        </TABLE>
                                    </TD>
                                </TR>

                                <TR>
                                    <TD><SPAN id=pagelink>
                                            <DIV
                                                style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">
                                                共[<B>${page.totalCount}</B>]条记录,共[<B>${page.totalPage}</B>]页
                                                ,每页显示
                                                <select name="pageSize">
                                                    <option value="2" <c:if test="${page.pageSize==2 }">selected</c:if>>2</option>
                                                    <option value="3" <c:if test="${page.pageSize==3 }">selected</c:if>>3</option>
                                                </select><c:if test="${page.pageCode>1 }">
                                                [<A href="javascript:to_page(${page.pageCode-1})">前一页</A>]
                                                </c:if>
                                                <B>${page.pageCode}</B>
                                                <c:if test="${page.pageCode<page.totalPage }">
                                                [<A href="javascript:to_page(${page.pageCode+1})">后一页</A>] 
                                                </c:if><input type="text" size="3" id="page" name="pageCode" /><input type="button" value="Go" onclick="to_page()"/>
                                            </DIV>
                                    </SPAN></TD>
                                </TR>

domain.Customer

    private Dict source;
    //一客户的行业 多是客户
    private Dict industry;
    //一客户级别 多是客户
    private Dict level;

UserDaoImpl

/**
 * 持久层:都可以继承HibernateDaoSupport
 * @author Administrator
 *
 */
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    /**
     * 通过登录名进行验证
     */
    public User checkCode(String user_code) {
        List<User> list = (List<User>) this.getHibernateTemplate().find("from User where user_code=?", user_code);
        if(list!=null && list.size()>0){
            return list.get(0);
        }
        return null;
    }
    /**
     * 保存用户
     */
    public void save(User user) {
        this.getHibernateTemplate().save(user);
    }

    /**
     * 登录功能
     * 通过用户名和密码和用户的状态
     */
    public User login(User user) {
        //QBC查询,按条件进行查询
        DetachedCriteria criteria = DetachedCriteria.forClass(User.class);
        //拼接查询的条件
        criteria.add(Restrictions.eq("user_code",user.getUser_code()));
        criteria.add(Restrictions.eq("user_password",user.getUser_password()));
        criteria.add(Restrictions.eq("user_state","1"));
        //查询
        List<User> list = (List<User>) this.getHibernateTemplate().findByCriteria(criteria);
        if(list!=null && list.size()>0){
            return list.get(0);
        }
        return null;
    }

}

CustomerDaoImpl

public class CustomerDaoImpl extends HibernateDaoSupport  implements CustomerDao{
    public void save(Customer customer) {
        System.out.println("持久层:保存客户");
        //把数据保存到数据库中
        this.getHibernateTemplate().save(customer);
    }
    /**
     * 分页的查询
     */
    public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {
        PageBean<Customer> page = new PageBean<Customer>();
        page.setPageCode(pageCode);
        page.setPageSize(pageSize);
        //先查询总记录数 select count(*)
        criteria.setProjection(Projections.rowCount());
        List<Number> list = (List<Number>) this.getHibernateTemplate().findByCriteria(criteria);
        if(list!=null && list.size()>0){
            int totalCount = list.get(0).intValue();
            //总的记录数
            page.setTotalCount(totalCount);
        }
        //强调:把select count(*)先清空 变成select * ...
        criteria.setProjection(null);
        //提供分页的查询 pageCode 当前页
        List<Customer> beanList = (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria, (pageCode-1)*pageSize, pageSize);

        //分页查询数据,每页显示的数据 使用limit
        page.setBeanList(beanList);
        return page;
    }

}

UserServiceImpl

    //保存用户,密码需要加密
    public void save(User user) {
        String pwd = user.getUser_password();
        //给密码加密
        user.setUser_password(MD5Utils.md5(pwd));
        //用户的状态默认是1状态
        user.setUser_state("1");
        //调用持久层
        userDao.save(user);
    }

    /**
     * 登录通过登录名和密码做校验
     * 先给密码加密,再查询
     * @return 
     */
    public User login(User user) {
        String pwd = user.getUser_password();
        //给密码加密
        user.setUser_password(MD5Utils.md5(pwd));
        //查询
        return userDao.login(user);

    }

CustomerAction

public class CustomerAction  extends ActionSupport implements ModelDriven<Customer>{

    private static final long serialVersionUID = 5420567636614077045L;
    //需要手动new 和返回对象
    private Customer customer = new Customer();
    public Customer getModel() {
        return customer;
    }
    //提供service的成员属性,提供set方法
    private CustomerService customerService;
    public void setCustomerService(CustomerService customerService) {
        this.customerService = customerService;
    }


    /**
     * 保存客户的方法
     * @return
     */
    public String add(){
        System.out.println("web层:保存");
        /*//web工厂
        WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());
        CustomerService service = (CustomerService) context.getBean("customerService");
//      System.out.println(customer);*/
        customerService.save(customer);

        return NONE;
    }
    //属性驱动的方式
    //当前页,默认值就1
    private Integer pageCode= 1;

    public void setPageCode(Integer pageCode) {
        if(pageCode== null){
            pageCode = 1; 
        }
        this.pageCode = pageCode;
    }
    //每页显示的数据的条数
    private Integer pageSize = 2;
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }


    /**
     * 分页的查询方法
     * @return
     */
    public String findByPage(){
        //调用service业务层
        DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
        //查询
        PageBean<Customer> page = customerService.findByPage(pageCode,pageSize,criteria);
        //压栈
        ValueStack vs = ActionContext.getContext().getValueStack();
        //栈顶是map<"page",page对象>
        vs.set("page", page);
        return "page";
    }
}

UserAction

public class UserAction extends ActionSupport implements ModelDriven<User>{

    private static final long serialVersionUID = 6765753375121695403L;
    private User user = new User();

    public User getModel() {

        return user;
    }
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    /**
     * 注册功能
     */
    public String regist(){
        //接受请求参数
        userService.save(user);
        return LOGIN;
    }

    /**
     * 通过登录名,判断,登录名是否已经存在
     */
    public String checkCode(){
        //调用业务层,查询
        User u = userService.checkCode(user.getUser_code());
        //获取resposne对象
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=UTF-8");
        try {
            //获取输出流
            PrintWriter writer = response.getWriter();
            //进行判断
            if(u!=null){
                //说明,登录名查询到用户了,说明登录名已经存在了,不能注册
                writer.print("no");
            }else{
                //说明,不存在登录名,可以注册
                writer.print("yes");
            }
        } catch (IOException e) {

            e.printStackTrace();
        }

        return NONE;
    }
    /**
     * 登录功能
     * @return
     */
    public String login(){

        User existUser = userService.login(user);
        //判断,登录名或者喵喵错误了
        if(existUser == null){
            return LOGIN;
        } else{
            ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
            //登录成功
            return "loginOK";
        }
    }

    public String exit(){
        ServletActionContext.getRequest().getSession().removeAttribute("existUser");
        return LOGIN;
    }
}

猜你喜欢

转载自blog.csdn.net/civilizationv/article/details/79987552