SpringMVC+mybaits+mysql实现简单的登录注册

小白心得,欢迎大神的点评和纠正错误,谢谢

通过学习,自己写的springMVC+mybaits+mysql实现的简单的登录和注册(第二篇),在刚学完springmvc之后,就直接开整,就个人认为springmvc中主要核心也就是控制器,前端控制器DispatcherServlet和自己创建的控制器。当然也有视图分解器和HandMaping,不过说实话,我感觉就个控制器用处贼大,完全替代了servlet。,完成视图转发。控制器还是非常好用的,简单的return一下就可以转发视图。下面贴一下我完的所有代码


mybaits映射文件

主配置文件其实都差不多,下面是映射配置文件:

<mapper namespace="com.toggery.dao.AdminDao">
  <resultMap type="Admin" id="AdminResult">
    <result column="username"   property="username"/>
    <result column="password"   property="password"/>
    <result column="email" property="email"/>
  </resultMap>
  <select id="login" parameterType="Admin" resultMap="AdminResult">
      select * from admin where username=#{username} and password=#{password}
  </select>
  <select id="getUsername" parameterType="java.lang.String" resultMap="AdminResult">
      select * from admin where username=#{username}
  </select>
  <insert id="register" parameterType="Admin">
     insert into admin(username,password,email)
    values(#{username},#{password},#{email})
  </insert>
</mapper>

web.xml配置文件

主要是关于springmvc配置文件的配置:

<!-- springmvc配置文件的配置 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config/springMVC-servlet.xml</param-value>
        </init-param>
            <!-- 因为servlet只有在访问才会创建实例,DispatcherServlet前端控制器,必须随程序启动就启动 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

###springMVC-servlet.xml配置文件
springmvc文件的配置,采用的注解的方式:

<!-- 注解配置 扫描该包下的所有的注解 -->
        <context:component-scan base-package="com.toggery.controller"></context:component-scan>
        <!-- 启用注解 -->
        <mvc:annotation-driven/>
        <!-- 处理静态资源,图片+js+css,无需springMVC过滤 -->
        <mvc:resources location="/img/" mapping="/img/**"/>
        <mvc:resources location="/css/" mapping="/css/**"/>
        <mvc:resources location="/js/" mapping="/js/**"/>
        <!-- 视图分解器,视图解析器 -->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp"></property>
        </bean>

获取session的工具类

mybaits获取session的工具类

private  SqlSessionFactoryUtil(){}
        public static SqlSession getSqlSession(){
            //读取主配置文件
            Reader reader=null;
            try {
                reader = Resources.getResourceAsReader("config/Configuration.xml");
            } catch (IOException e) {
                System.out.println("1111"+e.getMessage());
            }
            //通过配置信息 创建sqlseession工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            //获取sqlsession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            return sqlSession;
        }

方法的接口,实体类就没贴上来了…

主要是功能的接口

public interface AdminDao {

    //登录方法
    public Admin login(String username,String password);
    //注册方法
    public Admin register(Admin admin);
    //注册用户名判断是否存在
    public Admin getUsername(String username);
}

实现方法的service

实现方法的service,对密码搞MD5加密完一完,都是网上的就不贴了..

// 用户登录功能实现
    public Admin login(String username, String password) {
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
        Admin admin = new Admin();
        // 将输入的两个值,封装到admin对象当中,进行业务逻辑判断
        admin.setUsername(username);
        admin.setPassword(password);
        //执行查找操作
        admin = session.selectOne("com.toggery.dao.AdminDao.login", admin);
        session.close();
        // 返回一个对象,用于逻辑判断
        return admin; 
    }

    // 用户注册功能实现
    public Admin register(Admin admin, HttpServletRequest request,
            HttpServletResponse response) {
        //接收文本框输入的值
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");
        //用session存取用户名
        request.getSession().setAttribute("username", username);
        //将所有的值封装到admin对象中,用于业务逻辑执行
        admin.setUsername(username);
        //对密码进行MD5加密。并存取到数据库当中,以MD5加密形式显示
        admin.setPassword(EntrypMD5Util.generatePassword(password));
        admin.setEmail(email);
        //执行添加操作
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
        session.insert("com.toggery.dao.AdminDao.register", admin);
        //提交事务,完成操作
        session.commit();
        session.close();
        return admin;
    }

    // 判断用户名是否存在
    public Admin getUsername(String username) {
        Admin admin = new Admin();
        //执行查找操作
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
        AdminDao dao = session.getMapper(AdminDao.class);
        admin = dao.getUsername(username);
        session.close();
        return admin;
    }

}

控制器Controller

控制器才是这次的重点吧,用的是注解方式,一共三个,还有一个是注册时关于用户名是否存在的判断,用的js的Ajax判断的..

*
 * 登录功能控制器
 */
@Controller
@RequestMapping("/login")
public class LoginController {
    @RequestMapping("/admin")
    public ModelAndView login(@RequestParam("username") String username,
            @RequestParam("password") String password,
            HttpServletRequest request) {
        request.getSession().setAttribute("username", username);
        // 对文本输入的密码进行MD5加密,与数据库加密密码进行比较
        Admin admin = new AdminService().login(username,
                EntrypMD5Util.generatePassword(password));
        if (admin != null) {
            // 对象不为空,则表示用户名或密码正确
            return new ModelAndView("home");
        }
        // 用户名或密码不正确,跳转到失败视图
        return new ModelAndView("error");

    }
}

/*
 * 注册控制器
 */
@Controller
@RequestMapping("/register")
public class RegisterController {

    @RequestMapping("/admin")
    public ModelAndView register(Admin admin,HttpServletRequest request,HttpServletResponse response){
        admin = new AdminService().register(admin,request,response);
        if (admin==null) {
            return new ModelAndView("error");
        }
        return new ModelAndView("turning");
    }
}

/*
 * 用户名判断控制器
 */
@Controller
@RequestMapping("/username")
public class ValidaNameController {
    @RequestMapping("/valida")
    public void valida(@RequestParam("username") String username,HttpServletRequest request,HttpServletResponse response) throws IOException{
        //System.out.println(username);
        Admin admin = new AdminService().getUsername(username);
          if (admin==null) {//表示用户名不存在,可用
               // System.out.println("yes");
                //向页面传值,用Ajax完成逻辑判断
                response.getWriter().write("yes");
            }else {//表示用户名已经存在
                //System.out.println("no");
                response.getWriter().write("no");
            }
    }
}

相关的jsp界面主要代码

登录和注册的表单文本框没搞什么样式,就没贴了,贴一个注册时判断用户名是否存在的Ajax效果

<!-- Ajax实现用户名判断 -->
        <script type="text/javascript">
          //1.获取xmlHttpRequest对象
          function getxmlHttpRequest() {
            if(window.XMLHttpRequest){
              return new XMLHttpRequest();
            }
        }
        //2.文本框失去焦点触发函数
        function inputRegister(txt) {
            xhr = getxmlHttpRequest();//创建xml对象
            var username = txt.value;//获取文本的值
            xhr.onreadystatechange = resultFunction;//创建回调函数
            //初始化xml对象
            xhr.open("GET","username/valida?username="+username,true);
            //发送请求
            xhr.send(null);
        }
        //3.回调函数
        function resultFunction(){
            var s1 = document.getElementById("s1");//span标签,输出值
            if(xhr.readyState == 4){ //表示完成请求
               if(xhr.status == 200){
                 var data = xhr.responseText;
                 if(data == "yes"){
                    s1.style.color = "green";
                    s1.innerHTML = "用户名可用"
                 }else{
                    s1.style.color = "red";
                    s1.innerHTML = "用户名不可用"
                 }
               } 
            }
        }
        </script>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现用户登录和登出日志,需要以下步骤: 1. 创建用户表和日志表,用户表用于存储用户信息,日志表用于存储用户登录和登出信息。 2. 在Spring MVC中,创建登录和注销方法,使用Hibernate进行数据库操作。 3. 在登录和注销方法中,添加记录日志的代码,将用户登录和登出信息保存到日志表中。 下面是一个简单的示例: 1. 创建用户表和日志表的SQL语句: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `login_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `login_time` datetime DEFAULT NULL, `logout_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 2. 创建User实体类和LoginLog实体类 ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; //getter and setter } @Entity @Table(name = "login_log") public class LoginLog { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private Date loginTime; private Date logoutTime; //getter and setter } ``` 3. 在UserController中添加登录和注销方法 ``` @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Autowired private LoginLogService loginLogService; @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(@RequestParam String username, @RequestParam String password, HttpSession session) { User user = userService.findByUsername(username); if (user != null && user.getPassword().equals(password)) { session.setAttribute("user", user); LoginLog loginLog = new LoginLog(); loginLog.setUsername(username); loginLog.setLoginTime(new Date()); loginLogService.save(loginLog); return "redirect:/index"; } else { return "redirect:/login"; } } @RequestMapping("/logout") public String logout(HttpSession session) { User user = (User) session.getAttribute("user"); if (user != null) { LoginLog loginLog = loginLogService.findLastByUsername(user.getUsername()); if (loginLog != null) { loginLog.setLogoutTime(new Date()); loginLogService.save(loginLog); } session.removeAttribute("user"); } return "redirect:/login"; } } ``` 4. 在LoginLogService中添加保存日志和查询最后一次登录的方法 ``` @Service public class LoginLogService { @Autowired private LoginLogRepository loginLogRepository; public void save(LoginLog loginLog) { loginLogRepository.save(loginLog); } public LoginLog findLastByUsername(String username) { return loginLogRepository.findTopByUsernameOrderByLoginTimeDesc(username); } } ``` 5. 在Hibernate配置文件中配置数据源和实体类映射 ``` <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> <property name="initialSize" value="5"/> <property name="maxActive" value="10"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan" value="com.example.entity"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> ``` 以上示例中,使用Spring MVC + Hibernate + MySQL实现了用户登录和注销日志的记录。在登录和注销方法中,使用LoginLogService保存日志信息。在LoginLogService中,使用LoginLogRepository查询最后一次登录的记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值