zoukankan      html  css  js  c++  java
  • java版云笔记(二)

    云笔记

      基本的环境搭建好了,今天做些什么呢,第一是链接数据库(即搭建Spring-Batistas环境),第二是登录预注册。
    注:这个项目的sql文件,需求文档,需要的html文件,jar包都可以去下载,下载地址为:http://download.csdn.net/download/liveor_die/9985846

    搭建Spring-Batistas环境

      搭建Spring-Batistas环境的基本流程如下图

    这里写图片描述

       jar包和配置文件上节课已经添加好了,所一下来我们要配置spring配置文件。

    配置spring配置文件

    打开cloud_note/src/main/resources/conf/spring-mybatis.xml

    这里写图片描述

    在配置文件里添加如下代码

    	<!-- 配置dbcp组件DataSource -->
    	<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
    		<property name="username" value="root"></property>
    		<property name="password" value="root"></property>
    		<property name="driverClassName"
    			value="com.mysql.jdbc.Driver">
    		</property>
    		<property name="url"
    			value="jdbc:mysql://localhost:3306/cloud_note">
    		</property>
    	</bean>
    	<!--配置sqlSessionFactory  -->
    	<bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- 注入DataSource -->
    		<property name="dataSource" ref="dbcp"></property>
    		<!-- 注入映射文件位置 -->
    		<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    	</bean>
    
    

    这些代码主要是链接数据库的,注意吧password的value值该为你自己的mysql密码。

    注:也可以把链接数据库的信息写在 db.properties文件中
    这个是链接oracle的信信

    driver=oracle.jdbc.driver.OracleDriver
    url=jdbc:oracle:thin:@localhost:1521:xe
    user=system
    pwd=root
    

    在spring配置文件的配置

    <!-- 配置DataSource -->
    	<!-- 读取db.properties文件的内容 -->
    	 <util:properties id="jdbc" location="classpath:db.properties"/>
    	 <!-- 配置DataSource -->
     	<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource"       
           destroy-method="close">       
     		 <property name="driverClassName" value="#{jdbc.driver}" />      
     		 <property name="url" value="#{jdbc.url}" />      
     		 <property name="username" value="#{jdbc.user}" />      
     		 <property name="password" value="#{jdbc.pwd}" />      
    	</bean> 
    	<!--配置sqlSessionFactory  -->
    	....
    

    登录与注册

    这里写图片描述

    发送Ajax请求

    • 发送事件:注册按钮的单击
    • 请求参数:用户名、昵称、密码
    • 请求地址:/user/add.do,采用post

    服务器端处理
    /user/add.do
    -->DispatcherServlet
    -->HandlerMapping
    -->UserRegistController.execute
    -->UserService.addUser
    -->UserDao.save-->cn_user(插入)
    -->返回JSON结果
    http://localhost:8080/cloud_note/user/add.do?name=demo&nick=DEMO&password=123456

    Ajax回调处理
    success成功:提示注册成功;进入登录界面
        失败:提示错误信息
    error异常:alert("注册失败");

    工具类

    在com.tedu.cloudnote.util包中创建工具类
    对返回数据的格式化的工具类

    public class NoteResult<T>{
    	/**
    	 * 序列化
    	 */
    	private static final long serialVersionUID = 1L;
    	private int status;
    	private String msg;
    	private T data;
    	//get ,set方法
    	....
    }
    

    对密码和用户名进行加密的工具类

    public class NoteUtil {
    
    	public static String createId() {
    		UUID uuid = UUID.randomUUID();
    		String id = uuid.toString();
    		id = id.replace("-", "");
    		return id;
    	}
    
    	/**
    	 * 密码加密处理(Md5)
    	 * @param src 原密码
    	 * @return 加密后内容
    	 */
    	public static String md5(String src) {
    		try {
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			byte[] output = md.digest(src.getBytes());
    			// 将加密结果output利用base64转化为字符串
    			String ret = Base64.encodeBase64String(output);
    			return ret;
    
    		} catch (Exception e) {
    			throw new NoteException("密码加密失败", e);
    		}
    	}
    }
    

    异常抛出

    public class NoteException extends RuntimeException {
    
    	public NoteException(String msg, Throwable t) {
    		super(msg, t);
    	}
    
    }
    

    持久层/数据访问层

    这里写图片描述

    • 在com.tedu.cloudnote.entity包下创建User.java类
      主要代码:
        private String cn_user_id;
    	private String cn_user_name;
    	private String cn_user_password;
    	private String cn_user_token;
    	private String cn_user_nick;
    
    	//get,set方法
        .....
    	
    

    在com.tedu.cloudnote.dao创建UserDao接口

    public interface UserDao {
    	public User findByName(String name);
    
    	public void save(User user);
    }
    

    业务层

    • 在com.edu.cloudnote.service创建UserService.java接口
    public interface UserService {
    	// public NoteResult<T> 方法名(根据请求写参数)
    	// 登录时的用户名和密码检测
    	public NoteResult<User> checkLogin(String name, String password);
    	//注册 执行用户名检测
    	public NoteResult<Object> addUser(String name, String nick, String password);
    }
    
    • 在com.edu.cloudnote.service创建UserServiceImpl.java实现UserService.java接口
    @Controller("userService")
    public class UserServiceImpl implements UserService {
    	@Resource
    	private UserDao userDao;
    
    	public NoteResult<User> checkLogin(String name, String password) {
    		// 检测用户名和密码
    		NoteResult<User> result = new NoteResult<User>();
    		User user = userDao.findByName(name);
    		if (user == null) {
    			result.setStatus(1);
    			result.setMsg("用户名错误");
    			return result;
    		}
    		if (!user.getCn_user_password().equals(NoteUtil.md5(password))) {
    			result.setStatus(2);
    			result.setMsg("密码错误");
    			return result;
    		}
    		result.setStatus(0);
    		result.setMsg("登陆成功");
    		result.setData(user);
    		return result;
    	}
    
    	/**
    	 * 注册
    	 */
    	public NoteResult<Object> addUser(String name, String nick, String password) {
    		// 执行用户名检测
    		NoteResult<Object> result = new NoteResult<Object>();
    		User hasUser = userDao.findByName(name);
    		if (hasUser != null) {
    			result.setStatus(1);
    			result.setMsg("用户名已占用");
    			return result;
    		}
    
    		User user = new User();
    		user.setCn_user_id(NoteUtil.createId());
    		user.setCn_user_name(name);
    		user.setCn_user_password(NoteUtil.md5(password));//md5加密
    		user.setCn_user_nick(nick);
    		userDao.save(user);
    
    		result.setStatus(0);
    		result.setMsg("注册成功");
    		return result;
    	}
    
    }
    

    控制层

    登录  /user/login.do
    在com.tedu.cloudnote.controller.user创建UserLoginController.java

    @Controller
    @RequestMapping("/user")
    public class UserLoginController {
    	@Resource
    	private UserService userService;
    
    	@RequestMapping("/login.do")
    	@ResponseBody // jsoc输出
    	public NoteResult<User> execute(String name, String password) {
    		NoteResult<User> result = userService.checkLogin(name, password);
    		return result;
    	}
    }
    

    注册 /user/add.do

    @Controller
    @RequestMapping("/user")
    public class UserRegistController {
    	@Resource
    	private UserService userService;
    
    	@RequestMapping("/add.do")
    	@ResponseBody // json
    	public NoteResult<Object> excute(String name, String password, String nick) {
    		NoteResult<Object> result = userService.addUser(name, nick, password);
    		return result;
    	}
    }
    

    表现层

    登录和注册都在log_in.html页面中,把对应的name改为对应的名字
    即对页面的处理,让页面得到控制层给的数据,并表现在页面上,我们用ajax来出里数据
    basevalue.js的代码

    //改为对应的路径
    var path="http://localhost:8090/cloud_note";
    

    login.js的代码

    /*
     * 主处理
     */
    $(function(){
    		//给登录按钮绑定单机事件
    		$("#login").click(userLogin);
    		//给注册按钮绑定单机事件
    		$("#regist_button").click(userRegist);
    	});
    
    
    /**
    
     * 用户登录
     */
    function userLogin(){
    	//清除原有消息
    	$("#count_span").html("");
    	$("#password_span").html("")
    	//获取请求
    	var name=$("#count").val().trim();
    	var password=$("#password").val().trim();
    	//检测格式
    	var ok=true;
    	if(name==""){
    		$("#count_span").html("用户名为空");
    		ok=false;
    	}
    	if(password==""){
    		$("#password_span").html("密码为空");
    		ok=false;
    	}
    	//通过请求
    	if(ok){
    		$.ajax({
    				url:path+"/user/login.do",
    				type:"post",
    				data:{"name":name,"password":password},
    				dateType:"json",
    				success:function(result){
    					if(result.status==0){//成功
    						//信息写入cookie
    						var userId=result.data.cn_user_id;
    						addCookie("userId",userId,2);
    						window.location.href="edit.html";
    					}else if(result.status==1){//用户名错误
    						$("#count_span").html(result.msg);
    					}else if(result.status==2){//密码错误
    						$("#password_span").html(result.msg);
    					}
    				},
    				error:function(){
    				alert("登录失败");
    			}
    		});
    	}
    }
    
    function userRegist(){
    	//清除提示信息
    	$("#warning_1 span").html("");
    	$("#warning_2 span").html("");
    	$("#warning_3 span").html("");
    	//获取请求参数
    	var name=$("#regist_username").val().trim();
    	var nick=$("#nickname").val().trim();
    	var password=$('#regist_password').val().trim();
    	var final_password=$("#final_password").val().trim();
    	//检查格式
    	var ok=true;
    	if(name==""){
    		$("#warning_1 span").html("用户名为空");
    		$("#warning_1").show();
    		ok=false;
    	}
    	if(password==""){
    		$("#warning_2 span").html("密码不能为空");
    		$("#warning_2").show();
    		ok=false;
    	}else {
    		if(password.length>0 && password.length<6){
    			$("#warning_2 span").html("密码长度过小");
    			$("#warning_2").show();
    			ok=false;
    		}
    	}
    	if(final_password==""){
    		$("#warning_3 span").html("确认密码为空");
    		$("#warning_3").show();
    		ok=false;
    	}else if(final_password!=password){
    		$("#warning_3 span").html("确认密码不一致");
    		$("#warning_3").show();
    		ok=false;
    	}
    	//通过检测
    	if(ok==true){
    		
    		$.ajax({
    			url:path+"/user/add.do",
    			type:"post",
    			data:{"name":name,"nick":nick,"password":password},
    			dateType:"json",
    			success:function(result){
    				if(result.status==0){
    					alert(result.msg);
    					$("#back").click();
    				}else{
    					$("#warning_1 span").html(result.msg);
    					$("#warning_1").show();
    				}
    			},
    			error:function(){
    			alert("注册失败");
    			}
    		});
    	}
    }
    

    配置spring文件

    打开cloud_note/src/main/resources/conf/spring-mvc.xml
    添加如下代码

    <!-- 配置handlermapping -->
    	<mvc:annotation-driven/>
    	<!-- 启动扫描controller -->
    	<context:component-scan base-package="com.tedu.cloudnote"/>
    

    配置mapper映射文件

    • 在spring-mybatis.xml文件中添加配置mapper映射文件的位置的配置
    <!-- 定义MapperScannerConfigurer -->
    	<bean id="mapperScanner" 
    class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage"
    			value="com.tedu.cloudnote.dao">
    		</property>
    		<!-- sqlSessionFactory可以省略不写 -->
    		<property name="sqlSessionFactory" 
    			ref="ssf">
    		</property>
    	</bean>
    
    
    • 在/cloud_note/src/main/resources/mapper下新建UserMapper.xml
    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <!-- UserDao接口,关于User表的数据库操作  -->
    <mapper namespace="com.tedu.cloudnote.dao.UserDao">
        <!-- 根据用户名查找,返回User -->
    	<select id="findByName" parameterType="string" resultType="com.tedu.cloudnote.entity.User">
    	select * from cn_user
    	where cn_user_name=#{name}
    	</select>
    	<!-- 插入一个用户 -->
    	<insert id="save" parameterType="com.tedu.cloudnote.entity.User">
    	insert into cn_user
    		(cn_user_id,cn_user_name,
    		cn_user_password,cn_user_token,
    		cn_user_nick)
    	values (#{cn_user_id},#{cn_user_name},
    		#{cn_user_password},#{cn_user_token},
    		#{cn_user_nick})
    	</insert>
    	
    </mapper>
    
    

      这里的jQuery代码比较简单,相信大家都能看懂就不说了,User,UserDao这个大家练习的都比较多都比较容易,大家看起来都容易,我感觉难点主要是json的收发和mapper.xml的书写,json的书写都是固定的模式,大家可以看下我写的关于ajax的文章里面有具体的讲解。mapper.xml感觉难估计都是因为刚开始学和sql语句的书写,熟悉后就不存在这个问题了,没看懂的可以在下面留言。

  • 相关阅读:
    梯度下降法
    超平面
    感知机模型
    三角不等式
    统计学习方法基本概念
    Kaggle 的注册和使用
    win10 部署 Anaconda
    全概率和贝叶斯公式
    行列式
    伴随矩阵
  • 原文地址:https://www.cnblogs.com/yangliguo/p/7544055.html
Copyright © 2011-2022 走看看