一、搭建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
都很简单了
来源:CSDN
作者:树叶子_
链接:https://blog.csdn.net/hza419763578/article/details/103709491