SSH实现 crm系统

一曲冷凌霜 提交于 2020-01-15 05:18:01

 

 

 

一、搭建ssh环境

先准备好

新建项目-》导入jar(lib中)-》复制粘贴配置文件(hmb.xml除外)-》适当修改eg:数据库名称 然后建立数据库-》复制粘贴UI界面-》启动服务器-》访问测试

create database crmsx;

建立数据库表,然后根据表写javabean:

CREATE TABLE `sys_user` (
  `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_code` varchar(32) NOT NULL COMMENT '用户账号',
  `user_name` varchar(64) NOT NULL COMMENT '用户名称',
  `user_password` varchar(32) NOT NULL COMMENT '用户密码',
  `user_state` char(1) NOT NULL COMMENT '1:正常,0:暂停',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

写javabean(还是先建立包吧,省得弄混了)

立刻编写类的配置文件 现在可以复制hbm.xml来修改了

User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 约束 使有提示 -->
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="cn.ahpu.domain.User" table="sys_user">
		<!-- java主键属性与表的主键列名对应   native表示主键自动递增
			重要总结: 主键为short,int,long用 native
					主键char,varchar类型 即随机字符串用:uuid
		-->
		<id name="user_id" column="user_id">
			<generator class="native"/>
		</id>
		
		<!-- 其他非主键属性对应的配置   name为类属性名  column为表列名-->
		<property name="user_code" column="user_code"/>
		<property name="user_name" column="user_name"/>
		<property name="user_password" column="user_password"/>
		<property name="user_state" column="user_state"/>
		
	</class>
</hibernate-mapping>

立刻加载到appxml的sessionFactory中:

编写UserAction继承ActionSupport 实现ModelDriven<User> 写好模型驱动   ★千万记得model自己new★   忘记了后面才改

return user尽然还忘记写了,后面测试输出user时才发现,可见实时测试多么重要

立刻到appxml里配置action(多例) -》struts.xml里配置

applicationContext.xml:

struts.xml:

启动tomcat测试运行一下  :http://localhost:8080/crm/user_regist.action

正常,接着往下

写service   serviceImpl一写好,就立刻把事务注解加上(最简单的添加事务的方法)

action注入service准备

配置service,并注入到action

重启服务器,测试运行:http://localhost:8080/crm/user_regist.action

正常,接着往下

写dao

注意实现类继承HibernateDaoSupport

service注入dao准备工作

appxml里配置dao(注入sessionFactory 自动有hibernateTemplate了) 并将dao注入到servies

重启服务器,测试运行:http://localhost:8080/crm/user_regist.action

(注意add是个测试方法,最好一定写着,多余就多余  但很好 调用正常心里才有底  有事还可以改下名字变成其他方法)

正常,接着往下

修改前端:regist.jsp

删掉onsubmit,改action

action加一行,重启:

测试:

有问题:原来getModel的return user忘记写了;

改完重启:

成功获取数据,接着往下:

登录名文本框失去焦点要验证是否为空

登录名文本框不为空要发送ajax验证是否重复

UserAction里写checkCode方法,返回一个值测试下:(一旦写java代码就把tomcat关掉) (ctrl+T显示接口所有的实现类)

UserAction.java
    //System.out.println(user.getUser_code());
    User u= service.checkCode(user.getUser_code());
UserService.java
    public User checkCode(String user_code);
UserServiceImpl.java
    public User checkCode(String user_code) {
        return dao.checkCode(user_code);
    }
UserDao.java
    public User checkCode(String user_code);
UserDaoImpl.java
    public User checkCode(String user_code) {
        //虽然条件查询 但是简单条件HQL比较方便    find/save/update都是HQL查询 写HQL语句即可
        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;
    }

UserAction.java
    public String checkCode(){
        //由于ajax传的json格式为{"user_code":code} 相当于name="user_code" value=code 其他值为空 
        //于是直接就封装到user.user_code里了
        //System.out.println(user.getUser_code());
        User u= service.checkCode(user.getUser_code());

        //返回ajax比较麻烦 response写  写之前一定设置编码★
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=UTF-8");
        try {
            PrintWriter writer = response.getWriter();
            if(u!=null){
                //查到了用户 说明 user_code(此ajax登录名)已经存在
                writer.print("no");
            }else{
                writer.print("yes");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return NONE;//返回ajax可不是转发  一转发页面可就刷新了 
    }

启动服务器测试一下:

成功,接着往下:

文本框的信息不合法时要阻止表单提交

给form加个οnsubmit="return checkForm()"事件

然后写个checkForm方法,提交前执行checkForm方法,只有checkForm返回true才能提交表单

具体逻辑如下:

刷新测试:

正常,接着完成登录密码与用户姓名框的合法性检查(没有ajax了)

测试正常接着:

写action的regist方法,保存用户到数据库

除了web层方法名都改为save吧:

UserAction.java
    public String regist(){
        service.save(user);
        return NONE;
    }
UserService.java  
    public void save(User user);//可以改下regist方法名
UserServiceImpl.java //类上面一定加事务 否则只读缓存,提交不了!
    public void save(User user) {
        //密码加密
        String pwd = user.getUser_password();
        user.setUser_password(MD5Utils.md5(pwd));
        //状态默认为1
        user.setUser_state("1");
        //调用dao保存新用户
        dao.save(user);
    }
UserDao.java
    public void save(User user);//可以改下regist方法名
UserDaoImpl.java
    public void save(User user) {
        this.getHibernateTemplate().save(user);//和基本session.save()一样简单  spring封装了一下而已
    }

service一定要加事务,否则只读缓存,提交成功不了!昨天的问题似乎就在这

接着action:

struts.xml配置跳转

跳转到login.jsp太普遍,于是配置一个全局的(action外 package内配)

login.jsp加一行:

测试:

测试发现刷新会重复提交,导致数据库用户登录名相同,为hza    则每次注册前检查一下,最安全方便

成功,接着往下:

实现登录:

修改前端:login.jsp

UserAction.java
public String login(){
        User exitUser=service.login(user);
        if(exitUser!=null){
            //登录成功  记得放入session
            ServletActionContext.getRequest().getSession().setAttribute("exitUser", exitUser);
            return "loginOK";
        }else{
            //查不到 登录失败
            ValueStack vs = ActionContext.getContext().getValueStack();
            vs.set("msg", "用户名或密码错误!");
            return LOGIN;            
        }
    }
UserServiceImpl.java
    public User login(User user) {
        String pwd = user.getUser_password();
        user.setUser_password(MD5Utils.md5(pwd));
        //查询
        return dao.login(user);
    }
UserDaoImpl.java
    public User login(User user) {
        //QBC查询                                            //User写成Use了 还不报错....唉!
        DetachedCriteria criteria = DetachedCriteria.forClass(User.class);//没有直接的session了 只好离线条件查询对象  
        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;
    }

struts.xml

 

后面的都差不多了。。。

top.jsp

 

安全退出:  top.jsp

UserAction

都很简单了

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!