您的位置:首页 > 编程语言 > Java开发

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

2017-09-06 15:53 666 查看

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

通过学习,自己写的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: