项目的框架结构如下:
下面开始框架的搭建:
1.首先建立一个web工程,导入使用的jar包
2.model层中建立用户实体类
package com.springMybatis.model;
public class UserInfo {
private String name;
private String password;
private String tel;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("{name:"+name);
buffer.append("password:"+password);
buffer.append("tel:"+tel+"}");
return buffer.toString();
}
}
3.1建立servlet类-loginservlet.java
package com.springMybatis.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.springMybatis.model.UserInfo;
import com.springMybatis.service.UserInfoService;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class loginservlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserInfoService userInfoService;
WebApplicationContext waContext = null;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.waContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
this.userInfoService = (UserInfoService) waContext.getBean("UserInfoService");
InputStream is = request.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
in.close();
JSONObject obj = JSONObject.fromObject(buffer.toString());
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
JSONObject jsonresult = new JSONObject();
String name = obj.getString("name");//
String password = obj.getString("password");//
String tel = obj.getString("tel");//
UserInfo userInfo = userInfoService.findByName(name);
if (userInfo == null) {
jsonresult.put("code", 1);
jsonresult.put("msg", "用户名不存在");
}else {
if (password.equals(userInfo.getPassword())&&tel.equals(userInfo.getTel())) {
jsonresult.put("code", 0);
jsonresult.put("msg", "登录成功");
}else if (!password.equals(userInfo.getPassword()) && tel.equals(userInfo.getTel())) {
jsonresult.put("code", 2);
jsonresult.put("msg", "密码不正确");
}else if (password.equals(userInfo.getPassword()) && !tel.equals(userInfo.getTel())) {
jsonresult.put("code", 3);
jsonresult.put("msg", "电话号码不正确");
}else if (!password.equals(userInfo.getPassword()) && !tel.equals(userInfo.getTel())) {
jsonresult.put("code", 4);
jsonresult.put("msg", "密码和电话号码不正确");
}
}
out.write(jsonresult.toString());
out.flush();
out.close();
}
}
3.2建立servlet类-registerservlet.java
package com.springMybatis.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.springMybatis.model.UserInfo;
import com.springMybatis.service.UserInfoService;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class registerservlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserInfoService userInfoService;
WebApplicationContext waContext = null;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.waContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
this.userInfoService = (UserInfoService) waContext.getBean("UserInfoService");
InputStream is = request.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
in.close();
JSONObject obj = JSONObject.fromObject(buffer.toString());
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
JSONObject jsonresult = new JSONObject();
String name = obj.getString("name");//
String password = obj.getString("password");//
String tel = obj.getString("tel");//
UserInfo userInfo=new UserInfo();
userInfo.setName(name);
userInfo.setPassword(password);
userInfo.setTel(tel);
UserInfo uInfo = userInfoService.findByName(name);
if (uInfo != null) {
jsonresult.put("code", 1);
jsonresult.put("msg", "用户名存在");
}else {
userInfoService.insert(userInfo);
jsonresult.put("code", 0);
jsonresult.put("msg", "注册成功");
}
out.write(jsonresult.toString());
out.flush();
out.close();
}
}
4.service层的接口及实现
package com.springMybatis.service;
import java.util.List;
import com.springMybatis.model.UserInfo;
public interface UserInfoService {
public int insert(UserInfo userInfo);
public UserInfo findByName(String name);
public List<UserInfo> findByTelList(List<String> telList);
}
package com.springMybatis.service.impl;
import java.util.List;
import com.springMybatis.dao.UserInfoDao;
import com.springMybatis.model.UserInfo;
import com.springMybatis.service.UserInfoService;
public class UserInfoServiceImpl implements UserInfoService{
private UserInfoDao userInfoDao;
@Override
public int insert(UserInfo userInfo) {
return this.userInfoDao.insert(userInfo);
}
@Override
public UserInfo findByName(String name) {
return this.userInfoDao.findByName(name);
}
public UserInfoDao getUserInfoDao() {
return userInfoDao;
}
public void setUserInfoDao(UserInfoDao userInfoDao) {
this.userInfoDao = userInfoDao;
}
@Override
public List<UserInfo> findByTelList(List<String> telList) {
return this.userInfoDao.findByTelList(telList);
}
}
5.dao层的接口和实现
package com.springMybatis.dao;
import java.util.List;
import com.springMybatis.model.UserInfo;
public interface UserInfoDao {
public int insert(UserInfo userInfo);
public UserInfo findByName(String name);
public List<UserInfo> findByTelList(List<String> telList);
}
package com.springMybatis.dao.impl;
import java.util.List;
import com.springMybatis.dao.UserInfoDao;
import com.springMybatis.model.UserInfo;
import com.springMybatis.mapper.UserInfoMapper;
public class UserInfoDaoImpl implements UserInfoDao{
private UserInfoMapper userInfoMapper;
@Override
public int insert(UserInfo userInfo) {
return this.userInfoMapper.insert(userInfo);
}
@Override
public UserInfo findByName(String name) {
return this.userInfoMapper.findByName(name);
}
public void setUserInfoMapper(UserInfoMapper userInfoMapper) {
this.userInfoMapper = userInfoMapper;
}
@Override
public List<UserInfo> findByTelList(List<String> telList) {
return this.userInfoMapper.findByTelList(telList);
}
}
6.mapper层的接口和实现,根据UserInfoMapper.xml文件中可以建立相应的数据库表
package com.springMybatis.mapper;
import java.util.List;
import com.springMybatis.model.UserInfo;
public interface UserInfoMapper {
int insert(UserInfo userInfo);
UserInfo findByName(String name);
List<UserInfo> findByTelList(List<String> telList);
}
<?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">
<mapper namespace="com.springMybatis.mapper.UserInfoMapper">
<resultMap id="UserResultMap" type="com.springMybatis.model.UserInfo">
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="tel" jdbcType="VARCHAR" property="tel" />
</resultMap>
<insert id="insert" parameterType="com.springMybatis.model.UserInfo">
insert into tab_user(name,password,tel) values(#{name},#{password},#{tel})
</insert>
<select id="findByName" parameterType="String" resultMap="UserResultMap">
select * from tab_user where name=#{name}
</select>
<update id="update" parameterType="com.springMybatis.model.UserInfo">
update tab_user
<set>
<if test="password != null and password !=''">
password=#{password}
</if>
<if test="tel != null and tel ! = ''">
tel=#{tel}
</if>
</set>
<where>
<if test="name != null and name!= ''">
name=#{name}
</if>
</where>
</update>
<select id="findByTelList" resultMap="UserResultMap">
select * from tab_user
where tel in
<foreach collection="list" item="tellphone" open="(" separator="," close=")">
#{tellist}
</foreach>
</select>
</mapper>
7.重点,配置spring的配置文件applicationContext.xml
配置文件中,分别对service,dao,mapper进行bean的注入
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名称"></property>
<property name="username" value="用户名"></property>
<property name="password" value="密码"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- <property name="configLocation" value="classpath:MyBatis-Configuration.xml"></property> -->
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="UserInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.springMybatis.mapper.UserInfoMapper"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="UserInfoDao" class="com.springMybatis.dao.impl.UserInfoDaoImpl">
<property name="UserInfoMapper" ref="UserInfoMapper"></property>
</bean>
<bean id="UserInfoService" class="com.springMybatis.service.impl.UserInfoServiceImpl">
<property name="UserInfoDao" ref="UserInfoDao"></property>
</bean>
</beans>
8.web.xml文件的配置,配置spring文件的路径和servlet,其中classpath的路径为src下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>user_basic</display-name>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.springMybatis.servlet.loginservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.springMybatis.servlet.registerservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/registerServlet</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置上下文监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
9.登录的注册的页面,使用ajax请求
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="js/md5.js" type="text/javascript"></script>
<title>Insert title here</title>
</head>
<body>
<form id="form1">
<label for='name' style="font-family: 宋体, simsun;">用户名:</label><input type='text' name='name' id='name'><span id="namespan"></span><br>
<label for='password' style="font-family: 宋体, simsun;">密 码:</label><input type='password' name='password' id='password'><span id="pwdspan"></span><br>
<label for='tel' style="font-family: 宋体, simsun;">手机号:</label><input type='text' name='tel' id='tel'><span id="telspan"></span><br>
<input type='button' value='登录' onclick='loginUser()'>
<input type='button' value='注册' onclick='registerUser()'>
</form>
</body>
<script>
$(document).ready(function(){
$("#name").focus(function(){
$("#namespan").html("");
});
$("#password").focus(function(){
$("#pwdspan").html("");
});
$("#tel").focus(function(){
$("#telspan").html("");
});
});
function loginUser(){
var name=$("#name").val();
var password= $("#password").val();
var pwdlen = password.length;
var tel= $("#tel").val();
var tellen = tel.length;
var bl=true;
if(name==""){
$("#namespan").html("用户名不能为空!!");
$("#namespan").css("color","red");
bl=false;
}
if(pwdlen<6 || 18<pwdlen){
$("#pwdspan").html("密码长度必须在6~18位之间!!");
$("#pwdspan").css("color","red");
bl=false;
}
if(isNaN(tel)||tellen!=11){
$("#telspan").html("请输入正确的手机号码!!");
$("#telspan").css("color","red");
bl=false;
}
if(!bl){
return false;
}
var telmd5 = null;
//调用js的hex_md5函数
telmd5 = hex_md5(password);
var user = {
name:$("#name").val(),
password:telmd5,
tel:tel
};
$.ajax({
url:'loginServlet',
type:'post',
data:JSON.stringify(user),
contentType : "application/json; charset=utf-8",
dataType:'json',
success:function(data){
if(data.code==3){
$("#tel").val("");
alert(data.msg);
}else if(data.code==2){
$("#password").val("");
alert(data.msg);
}else if(data.code==1){
$("#name").val("");
$("#password").val("");
$("#tel").val("");
alert(data.msg);
}else if(data.code==4){
$("#password").val("");
$("#tel").val("");
alert(data.msg);
}else if(data.code==0){
location.href="loginsuccess.jsp";
}
}
});
}
function registerUser(){
var name=$("#name").val();
var password= $("#password").val();
var pwdlen = password.length;
var tel= $("#tel").val();
var tellen = tel.length;
var bl=true;
if(name==""){
$("#namespan").html("用户名不能为空!!");
$("#namespan").css("color","red");
bl=false;
}
if(pwdlen<6 || 18<pwdlen){
$("#pwdspan").html("密码长度必须在6~18位之间!!");
$("#pwdspan").css("color","red");
bl=false;
}
if(isNaN(tel)||tellen!=11){
$("#telspan").html("请输入正确的手机号码!!");
$("#telspan").css("color","red");
bl=false;
}
if(!bl){
return false;
}
var telmd5 = null;
//调用js的hex_md5函数
telmd5 = hex_md5($("#password").val());
var user = {
name:$("#name").val(),
password:telmd5,
tel:$("#tel").val()
};
$.ajax({
url:'registerServlet',
contentType : "application/json; charset=utf-8",
data:JSON.stringify(user),
type:'post',
dataType:'json',
success:function(data){
$("#name").val("");
$("#password").val("");
$("#tel").val("");
alert(data.msg);
}
});
}
</script>
</html>