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

来源:互联网 发布:淘宝 最贵的包子 编辑:程序博客网 时间:2024/06/01 18:56

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

通过学习,自己写的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>
原创粉丝点击