Spring MVC + mybatis实现的注册登录

Spring MVC + mybatis实现的注册登录

前期准备:

           如下图所示,准备好所需要的包,
新建工程,导入所需要的包,在web.xml中配置好所需要的,如下,
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance  
    http://www.springmodules.org/schema/cache/springmodules-cache.xsd 
    http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"    
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee      
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd          
     ">
<filter>
	<filter-name>encoding</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<!-- 前端控制器 -->
<servlet>
	<servlet-name>spring</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 在tomcat启动时初始化servlet的优先级,这个数字只能整数,正整数才会初始化servlet -->
	<load-on-startup>1</load-on-startup>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/config/spring.xml</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>spring</servlet-name>
	<url-pattern>*.action</url-pattern>
</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

配置好如下文件spring.xml,
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
	xmlns:cache="http://www.springframework.org/schema/cache" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
                     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                     http://www.springframework.org/schema/context
                     http://www.springframework.org/schema/context/spring-context-3.2.xsd
                     http://www.springframework.org/schema/aop
                     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
                     http://www.springframework.org/schema/util
                     http://www.springframework.org/schema/util/spring-util-3.2.xsd
                     http://www.springframework.org/schema/cache
                     http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
                     http://www.springframework.org/schema/tx
                     http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
                     http://www.springframework.org/schema/mvc
                     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

	<!-- 启用注解 -->
	<context:annotation-config></context:annotation-config>
	
	<!-- 加载注解 -->
	<context:component-scan base-package="com.register"></context:component-scan>
	
	<!-- 导入数据库配置文件 -->
	<util:properties id="myproperties" location="/WEB-INF/config/jdbc.properties">
	</util:properties>
	<!-- 创建数据库连接池 -->
	<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 定义数据库连接的参数 -->
		<property name="driverClass" value="#{myproperties.driver}"></property>
		<property name="jdbcUrl" value="#{myproperties.url}"></property>
		<property name="user" value="#{myproperties.username}"></property>
		<property name="password" value="#{myproperties.password}"></property>
		<!-- 数据库连接池的两个属性 -->
		<property name="initialPoolSize" value="3"></property>
		<property name="maxPoolSize" value="20"></property>
	</bean>
	<!-- 替代mybatis的配置文件用来执行mysql语句 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	  <property name="dataSource" ref="ds" />
	  <!-- 定义映射文件路径 -->
	  <property name="mapperLocations" value="classpath:com/register/dao/*.xml"></property>
	</bean>
	
	<!-- sqlSession中的bean -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 
		<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
	</bean>
	<!-- 开启mvc注解 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	
</beans>

配置好数据库信息,
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/cheshangbao?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useOldAliasMetadataBehavior=true
username=root
password=admin
另外,还有所需要的操作数据库的语句,

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- sql 映射文件  -->

<mapper namespace="com.register.dao">

	<!-- 用户注册的判断 -->
	<insert id="addUser" parameterType="map">
		insert into user_login (phone_mobile,login_password,register_time,user_code) values(#{phone_mobile},#{login_password},#{register_time},#{user_code})
	</insert>
	
	<!-- 用户名唯一性的判断 -->
	<select id="judgeUser" parameterType="String" resultType="com.register.vo.User">
		select phone_mobile from user_login where phone_mobile=#{phone_mobile}
	</select>
	
	<!-- 用户登录的判断返回一个user给service处理 -->
	<select id="userLogin" parameterType="map" resultType="com.register.vo.User">
		select phone_mobile,login_password from user_login where phone_mobile=#{phone_mobile} and login_password=#{login_password}
	</select>
</mapper>

前端准备工作,

          我做的一个简单的注册登录的页面,在页面中对表单进行了第一层的判断,然后在后端又写了第二层验证。
登陆页面如下,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href=#>

以下是注册界面,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href=#>

页面中对手机号进行了验证,而且能够与后台进行交互,判断数据库中是否已有此手机号,页面所需的js文件和css配置会在以下给出,

进入正题

数据库中包含用户手机号,用户密码,以及注册信息,和生成的唯一识别码,
以下是用户的实体类,
package com.register.vo;

import java.util.Date;

public class User {
private int id;
private String phone_mobile;//用户手机号
private String login_password;//用户登录密码
private Date register_time;//用户注册日期
private String user_code;//用户唯一识别ID

public User(int id, String phone_mobile, String login_password, Date register_time,
		String user_code) {
	super();
	this.id = id;
	this.phone_mobile = phone_mobile;
	this.login_password = login_password;
	this.register_time = register_time;
	this.user_code = user_code;
}

public User(String phone_mobile, String login_password, Date register_time, String user_code) {
	super();
	this.phone_mobile = phone_mobile;
	this.login_password = login_password;
	this.register_time = register_time;
	this.user_code = user_code;
}
public User() {
}

public int getId() {
	return id;
}
//对用户数据进行封装
public void setId(int id) {
	this.id = id;
}

public String getPhone_mobile() {
	return phone_mobile;
}

public void setPhone_mobile(String phone_mobile) {
	this.phone_mobile = phone_mobile;
}

public String getLogin_password() {
	return login_password;
}

public void setLogin_password(String login_password) {
	this.login_password = login_password;
}

public Date getRegister_time() {
	return register_time;
}

public void setRegister_time(Date register_time) {
	this.register_time = register_time;
}

public String getUser_code() {
	return user_code;
}

public void setUser_code(String user_code) {
	this.user_code = user_code;
}

}

下面这一步是比较重要的一步,Controller类,
如下所示,
 package com.register.controller;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.register.service.UserService;
import com.register.vo.User;


//让控制器成为一个bean
@Controller
//这个控制器是接受user_reg页面传过来的参数去操作数据库
public class UserController {
	@Autowired
	private SqlSession sqlSession;
	@Autowired
	private UserService us;
	@Autowired
	private HttpServletRequest req;
	@RequestMapping("/userReg.action")
	//jsp页面通过userReg.action找到这个方法
	public String userReg(User user){
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("phone_mobile", user.getPhone_mobile());
		map.put("login_password", user.getLogin_password());
               
		//判断页面传回的数据要求
		Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[01236789]))\\d{8}$");
	     Matcher matcher = pattern.matcher(user.getPhone_mobile());
		if(user.getPhone_mobile()==null || user.getLogin_password()==null || !matcher.matches()){
			return "index.jsp";
		}
		
		//获取当前注册时间
		Date date = new Date();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		map.put("register_time", df.format(date));
		
		//生成唯一识别码
		 String s = UUID.randomUUID().toString(); 
    	 String user_code =  s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24); 
    	 map.put("user_code", user_code);
    	 
    	 //将数据添加到数据库中
		int a = sqlSession.insert("com.register.dao.addUser",map);
		
		req.setAttribute("phone_mobile", user.getPhone_mobile());
		req.setAttribute("login_password", user.getLogin_password());
		return "pages/register_success.jsp";
	}


	//处理用户名唯一性的判断                                                                     
	@RequestMapping("/userJudge.action")
	@ResponseBody
	public User userJudge(String phone_mobile) {
		User u = sqlSession.selectOne("com.register.dao.judgeUser",phone_mobile);
		System.out.println(u.getPhone_mobile());
		return u;
	}
	
	//用户登录的判断
	@RequestMapping("/userLogin.action")
	public String userLogin(String phone_mobile,String login_password){
		//对页面传回的值进行二次判断
		 Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[01236789]))\\d{8}$");
	     Matcher matcher = pattern.matcher(phone_mobile);
		if(phone_mobile==null || login_password==null || !matcher.matches()){
			return "pages/user-login-no.jsp";
		}
		
		User u = us.userLogin(phone_mobile, login_password);
		
		//查到用户了,执行登录成功的操作
		if(u!=null){
			req.getSession().setAttribute("u", u);
			return "pages/user-login-ok.jsp";
		}else{
			return "pages/user-login-no.jsp";
		}
	}
	//用户退出销毁session 跳转到登录页
	@RequestMapping("/userExit.action")
	public String userExit(HttpSession session){
		session.invalidate();
		return "index.jsp";
	}
}

UserService类,
package com.register.service;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.register.vo.User;


@Service
public class UserService {
	@Autowired
	private SqlSession sqlSession;
	public User userLogin(String phone_mobile,String login_password){
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("phone_mobile",phone_mobile);
		map.put("login_password", login_password);
		User u = sqlSession.selectOne("com.register.dao.userLogin",map);
		return u;
	}
}

注入测试类,
package com.register.util;

import org.springframework.stereotype.Controller;

@Controller
public class TestUtil {
	public void a(){
		System.out.println("注入成功!");
	}

}

OK,到这里已经基本差不多了,但是这里边所给的代码并不完整,为了方便大家相互交流学习,这是源码以及数据库文件,
链接:http://pan.baidu.com/s/1geEOshX 密码:bx9q,想要参考源码的可以自己下载。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
工欲善其事,必先利其器。对于程序员来说,Eclipse便是其中的一个“器”。本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍。Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分了你的神。而掌握了Eclipse的一些实用技巧,则可以大大提高开发效率。 1、丢掉鼠标吧之Eclipse快捷键篇 1.1文件切换的三种方式 1.1.1  Ctrl + E,在右边显示出当前打开的所有文件 1.1.2 Ctrl + Pg Up ,Ctrl + Pg Dn ,逐个文件跳跃 按下Ctrl + Pg
前言 想必HDFS集群的起停操作对于HDFS的使用者来说绝对不是一件陌生的事情.一般情况下我们重启集群服务是出于这2点原因:1).集群新增配置项,需要重启集群服务才能生效.2).对集群相关jar包程序进行了更新,需要重启服务来运行最新的jar包.于是我们重启了集群,一般的我们看它是否启动成功,一定会关注它的输出日志.比如说在HDFS中,我们会比较关注NameNode的启动日志.当然这的确是一个有效的办法,但是我们是否有其他更方便快捷的方法呢?比如说我不想登到NameNode所在节点上去看日志.最后的答案是
1、前言 进入 云计算 的时代,各大云提供商AWS, 阿里云 纷纷推出针对 Docker 的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下。 2、Docker是什麽 Docker是一个开源的应用容器引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行的  Linux  系统上,通过这种方式实现虚拟化。 提到虚拟化,大家应该十分熟悉了,有 VMware ,Xen, KVM 等等很多。那么,Docker和VM有什么不同呢,我们用官网的一张图来说明一下。 可以看出

MAT使用的几张图例技巧 - 2016-07-23 14:07:57

1 下面三个是内存泄漏可能性比较大的地方  problem suspect 1 problem suspect 2 点击detail 可以看详细  如果发现里面有自己工程包里面的重复的大量对象的创建 2 在dominator_tree 可以对象按照 group by package 分类 便于查看那部分代码出问题 如果自己的工程包下面占用了大量内存 可能就是问题所在 问题一般可能出在 占用最多的地方 3  选中一个节点 右键查看with incoming reference 可以看  ps :( List
重点发掘自己每天是否有学到或者感受到新东西,一旦可以感知这些细节,那么心态就会平和、也更容易坚持下来,自然而然就可以等到突破瓶颈的时候。 时间是一个很公平的东西,去体验不同的岗位去寻找自己真正想做的,是一个不错的思路。最怕的是目的性不明确的变化。 事实上那怕我们专注于一个领域,在某些时候还要跳出这个领域,开眼界后再回归方能更上一层楼。 ——祝晓春 手工测试二三事   @ 安琪儿的梦 o_0   提问:一直做手工测试会不会没有前 途 ? 任何一个工作和岗位都会有前途的,但是并不是每个人都会达到很大的高度。关

Spring+SpringMVC+Mybatis整合笔记 - 2016-07-22 22:07:05

出于兴趣,最近在研究SSM,参考着别人的技术资料并结合实际情况,一步一步的跑通了SSM整合的整个过程,现整理如下,希望对于同样对SSM有兴趣的你有所帮助,当然,因本人能力有限,可能有些问题,希望您能够指出来,咱们一起学习进步。   主要技术点: l  Spring + SpringMVC + Mybatis的整合 l  使用maven管理jar包及版本 l  使用mybatis generator代码生成器自动生成代码 l  使用SpringJUnit4ClassRunner进行单元测试   主要配置环境

DOS命令大全(经典收藏) - 2016-07-22 22:07:05

#1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: \\ip\c$ 登陆后映射对方C:到本地为H: net use \\ip\ipc$ /del 删除IPC链接 net use h: /del 删除映射对方到本地的为H:的映射 net user 用
原文地址:【 http://www.sciencedirect.com/science/article/pii/S0167865514001056 】 一、传统的Mean-Shift 原文地址:【 http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1195991tag=1 】 个人理解(可能存在偏差,会不断改进): Mean-Shift算法用于tracking时,通过最小化两个概率密度函数之间的距离来进行,是一种 非参数技术 。 对于模板中的目标,即
如果你真的就看完了《 packetdrill框架点滴剖析以及TCP重传的一个细节 》,我觉得你应该有一个疑问,那就是RH发行版使用的2.6.32内核真的使用了PRR降窗算法吗?为此,我把故事再撸一遍。         按照标准的2.6.32内核,第一次收到SACK的时候,在进入重传之前,拥塞窗口的值应该是in_flight+1,即2+1=3个段,也就是说可以重传1个段,但是抓包发现重传了2个段,tcpprobe也证实了在进入重传之前,拥塞窗口的值是4,而in_flight的值为2,完全对不上tcp_cwnd
OSSEC linux(server) windows(agent)史上最详细中文配置 作者:谭丙章 E-mail:feifengwind@163.com ossec官方网站: http://www.ossec.net/ ossec帮助文档: http://ossec-docs.readthedocs.org/en/latest/manual/index.html 介绍 SSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等