ssh相关

crm练习


课程内容


课程目标

1. 通过SSH框架完成基本功能的开发

用户模块


功能一:用户注册功能

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

功能二:用户登录功能

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

功能三:用户退出功能

1. 把用户信息从HttpSession中清除

客户模块


功能一:查询所有客户功能

1. 数据字典表的引入
    * 数据字典表的作用:规范开发中数据的写法
    * 字段表与客户表是一对多的关系
    * 修改客户表,添加外键(使用SQLyog进行修改)
2. 创建字典表的实体和映射的配置文件
    * 编写字典表的JavaBean和映射的配置文件
    * 修改Customer的JavaBean,因为是多方,需要把外键字段换成字典对象
    * 修改Customer.hbm.xml的配置文件,配置多对一

3. 分页查询所有的客户功能实现

功能二:按条件查询所有的客户

1. 使用异步的方式加载客户级别和客户的来源
    * 前端使用JQuery的ajax技术
    * 后端使用fastjson的jar包
        * 导入fastjson的开发jar包fastjson-1.2.8.jar
        * String s = JSON.toJSONString(集合)
        * String s = JSON.toJSONString(对象)
    
    * 如果List集合中存入相同引用的对象
        * fastjson默认的情况下是进行循环检测的,去除掉死循环调用的方式
        * 可以使用JSON.toJSONString(p,SerializerFeature.DisableCircularReferenceDetect) 去除循环检测,但是就会出现死循环的效果
        * 最后可以使用注解:@JSONField(serialize=false)对指定的属性不转换成json

2. 异步获取客户级别
    * ajax的代码
        var url = "${pageContext.request.contextPath }/dict_findByCode.action";
        var param = {"dict_type_code":"006"};
        $.post(url,param,function(data){
            $(data).each(function(){
                var id = "${model.level.dict_id}";
                if(id == this.dict_id){
                    $("#levelId").append("");
                }else{
                    $("#levelId").append("");
                }
            });
        },"json");
    
    * Action的代码
        public String findByCode(){
            List list = dictService.findByCode(dict.getDict_type_code());
            String jsonString = FastJsonUtil.toJSONString(list);
            HttpServletResponse response = ServletActionContext.getResponse();
            FastJsonUtil.write_json(response, jsonString);
            return NONE;
        }
    
    * CustomerAction的分页查询的代码
        public String findByPage(){
            // 调用service业务层
            DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
            // 拼接查询的条件
            String name = customer.getCust_name();
            if(name != null && !name.trim().isEmpty()){
                criteria.add(Restrictions.like("cust_name", "%"+name+"%"));
            }
            
            // System.out.println(customer.getLevel().getDict_type_code());
            Dict level = customer.getLevel();
            if(level != null && !level.getDict_id().trim().isEmpty()){
                criteria.add(Restrictions.eq("level.dict_id", level.getDict_id()));
            }
            
            Dict source = customer.getSource();
            if(source != null && !source.getDict_id().trim().isEmpty()){
                criteria.add(Restrictions.eq("source.dict_id", source.getDict_id()));
            }
            
            // 查询
            PageBean page = customerService.findByPage(pageCode,pageSize,criteria);
            // 压栈
            ValueStack vs = ActionContext.getContext().getValueStack();
            // 栈顶是map<"page",page对象>
            vs.set("page", page);
            vs.set("cust_name", name);
            return "page";
        }

功能三:添加客户功能(含有文件上传功能)

1. 跳转到客户的添加页面,需要通过ajax来显示客户的级别,客户的来源和客户的行业。
2. 添加文件上传的选择项
3. 客户端三个注意事项
    * method="post"
    * enctype="multipart/form-data"
    * 

4. Struts2框架的使用拦截器完成了文件上传,并且底层使用也是FileUpload开源的组件。
    * 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 
    * fileUpload拦截器 默认在 defaultStack 栈中, 默认会执行的 
    
    * 在Action中编写文件上传,需要定义三个属性
        > 文件类型File ,属性名与表单中file的name属性名一致.
        > 字符串类型String , 属性名:前段是name属性名一致 + ContentType;
        > 字符串类型String , 属性名:前段是name属性名一致+FileName;
        
        > 最后需要为上述的三个属性提供set方法。
        > 可以通过FileUtils提供 copyFile 进行文件复制,将上传文件 保存到服务器端 

4. 文件上传中存在的问题
    * 先配置input逻辑视图
    * 在页面中显示错误信息
    
    * 文件上传的总大小默认值是2M,如果超过了2M,程序会报出异常。可以使用来查看具体信息!
        > 解决总大小的设置,找到常量:
            * struts.multipart.parser=jakarta       -- 默认文件上传解析器,就是FileUpload组件
            * struts.multipart.saveDir=             -- 文件上传的临时文件存储目录
            * struts.multipart.maxSize=2097152      -- 文件上传的最大值(总大小),默认是2M
        
        > 可以在struts.xml中设置常量,修改文件上传的默认总大小!!!
            * 

5. 还可以通过配置拦截器来设置文件上传的一些属性
    * 先在标签中引入文件上传的拦截器
        
            
            2097152
            
            .txt
        

功能三:修改客户的功能

1. 先通过客户的主键查询出客户的详细信息,显示到修改的页面上
    * 要把客户的主键和上传文件的路径使用隐藏域保存起来

2. 修改客户的信息
    * 如果用户新上传了文件,删除旧的文件,上传新的文件。
    * 如果用户没有上传新文件,正常更新。

功能四:删除客户的功能

1. 删除上传的文件后,再删除客户信息。

你可能感兴趣的:(ssh相关)