使用spring mvc、spring jdbc 实现网站的登录注册功能

1.        据业务模型 创建model 一般实现序列化

2.        用spring 注解(@Repository)定义DAO,在该DAO中用注解(@Autowired)方式注入JdbcTemplate bean,使用JdbcTemplate api实现DAO方法

package com.shopfruit.dao;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;/***  使用spring jdbc 实现这个dao类* @author Administrator*/
@Repository//spring注解定义一个dao
public class UserDao {
1.1       @Autowired//自动注入JdbcTemplate 的beanprivate JdbcTemplate jdbcTemplate;/*** 用户注册* @return 1 注册成功、0 注册失败*/public intregisterUser(String name,String password){String sql = "INSERT INTOt_user values(null,?,?);";int result = jdbcTemplate.update(sql, newObject[]{name,password});return result;}/*** 用户名校验* @param name* @return 1 已存在  0不存在允许注册*/public intregisterCheck(String name){String sql="selectcount(user_id) from t_user where user_name=?";int result = jdbcTemplate.queryForInt(sql,name);return result;}/*** 用户登录* @return 1 验证成功 0验证失败*/public intgetMatchCount(String name,String password){String sql = "SELECTcount(user_id) from t_user where user_name = ? and `password`=?;";int result = jdbcTemplate.queryForInt(sql, new Object[]{name,password});return result;}
}

3. 配置文件装配DAO,在src目录创建spring配置文件applicationContext.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><!--解决spring mvc乱码问题,方式二<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><propertyname="messageConverters"><list><beanid ="utf8StringHttpMessageConverter"class="com.shopfruit.util.UTF8StringHttpMessageConverter"/></list></property></bean>--><!--扫描类表,将标注有sping注解的类自动转换成bean,同时完成bean的注入  --><context:component-scan base-package="com.shopfruit.dao"></context:component-scan><context:component-scan base-package="com.shopfruit.service"></context:component-scan><!-- 配置数据源 --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"p:driverClassName="com.mysql.jdbc.Driver"p:url="jdbc:mysql://localhost:3306/spring"p:username="root"p:password="root"></bean><!-- 配置jdbc模板 --><bean id="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"p:dataSource-ref="dataSource"></bean><!-- 配置数据源事务管理 --><bean id="dataSourceTanslationManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"></bean><!-- 通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务 --><aop:config proxy-target-class="true"><aop:pointcut id="serviceMethod"expression=" execution(* com.baobaotao.service..*(..))"/><aop:advisor pointcut-ref="serviceMethod"advice-ref="txAdvice" /></aop:config><tx:advice id="txAdvice"transaction-manager="dataSourceTanslationManager"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice>
</beans>

4. 已完成持久层开发和配置,下面完成业务层的开发和配置,配置在上面

package com.shopfruit.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.shopfruit.dao.UserDao;@Service//标注为服务层的bean
public class UserService {@Autowiredprivate UserDao userDao;/*** 注册检查* @param name* @return用户名是否存在,不存在 true,存在false*/public booleanregisterCheck(String name){return userDao.registerCheck(name)==0;}/*** 用户注册* @param name* @param password* @return注册是否成功*/public booleanregisterUser(String name,String password){if(registerCheck(name)){return userDao.registerUser(name,password)>0;}return false;}/*** 登录校验* @param name* @param password* @return用户名密码是否匹配*/public booleangetMatchCount(String name,String password){return userDao.getMatchCount(name,password)>0;}
}

5. 单元测试业务层

package com.shopfruit.service;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.shopfruit.service.UserService;
//基于JUnit4的spring测试框架
@RunWith(SpringJUnit4ClassRunner.class)
//启动spring容器
@ContextConfiguration(locations = {"/applicationContext.xml"} )
public class TestUserService {@Autowiredprivate UserService userService;@Testpublic void testRegisterUser(){boolean b1 = userService.registerUser("admin", "123456");assertTrue(b1);}@Testpublic voidtestRegisterCheck() {Boolean b1 = userService.registerCheck("admindgzv");Boolean b2 = userService.registerCheck("adminzfczv");assertTrue(b1);assertTrue(b2);}@Testpublic voidtestGetMatchCount() {boolean b1 = userService.getMatchCount("admin", "123456");boolean b2 = userService.getMatchCount("admin1", "123456");assertTrue(b1);assertTrue(b2);}}

6.展现层的实现

1)       配置spring mvc,以便web容器启动能够自启动spring容器,处理请求。web.xml

<?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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>ShopFruit</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 从类路径下加载spring配置文件classpath关键字指从类路径加载 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 负责启动spring容器的监听器,通过上下参数获取spring配置文件的地址 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- spring mvc主控的Servlet,还得在web-info下提供shopfruit-servlet.xml的spring mvc配置文件 --><servlet><servlet-name>shopfruit</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><!-- spring mvc处理的url,所有.html的请求被shopfruit sevlet截获,更具请求找到相应的处理控制器--><servlet-mapping><servlet-name>shopfruit</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping>
</web-app>

2)       处理登录注册请求的控制器类

package com.shopfruit.web;import javax.servlet.http.HttpServletRequest;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 org.springframework.web.servlet.ModelAndView;import com.shopfruit.domain.User;
import com.shopfruit.service.UserService;@Controller//标注成为spring mvc 的Controller类
public class LoginRegisterController {@Autowiredprivate UserService userService;/*** 请求login.html跳登录页面* @return*/@RequestMapping(value={"/login.html"})public String login(){return "login";}/*** 请求register.html跳注册页面* @return*/@RequestMapping(value={"/register.html"})public String register(){return "register";}/*** 检查用户名* @param request* @return*/@RequestMapping(value={"/registerCheck.html"})public @ResponseBody StringregisterCheck(HttpServletRequest request){String name =request.getParameter("name");boolean b = userService.registerCheck(name);if(!b){
//         return"user error";return "用户名重复请重新取名";}//     return"user ok";return "用户名可用";}/*** 登录检查* @param request* @return*/@RequestMapping(value={"/loginUser.html"})public ModelAndViewloginCheck(HttpServletRequest request){String name =request.getParameter("name");Stringpassword = request.getParameter("password");boolean b = userService.getMatchCount(name,password);if(!b){return new ModelAndView("login","status","用户名或者密码错误");}UserloginUser = new User();loginUser.setName(name);request.getSession().setAttribute("user",loginUser);return new ModelAndView("main","status","登录成功");}/*** 用户注册* @param request* @param user* @return*/@RequestMapping(value={"/registerUser.html"})public ModelAndViewregisterUser(HttpServletRequest request,User user){boolean b = userService.registerUser(user.getName(),user.getPassword());if(!b){return new ModelAndView("register","status","注册失败,请重新注册。");}request.getSession().setAttribute("user",user);return new ModelAndView("main","status","注册成功");}
}

写控制器类发现eclipse没有javax.servlet.http.HttpServletRequest 这个类,这个类在tomcat的lib 的servlet-aip.jar,需要我们自己在项目中引入

配置spring mvc 配置文件 shopfruit-servlet.xml

 <pre name="code" class="html"><?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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 解决spring mvc 乱码问题,方式一--><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters">  <list>  <bean class ="org.springframework.http.converter.StringHttpMessageConverter">  <property name ="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value>  </list>  </property>  </bean>  </list>  </property> </bean> <!-- 扫描web包,应用Spring的注解 --><context:component-scan base-package="com.shopfruit.web"/><!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"p:viewClass="org.springframework.web.servlet.view.JstlView"p:prefix="/jsp/"p:suffix=".jsp"/>
</beans>
<p><span style="font-size:12px;">

7. 前台页面展示1)index.jsp 网站首页

<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<!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">
<title>水果电商网站</title>
</head>
<body><a href='<c:url value="/login.html"/>'>登录</a><a href='<c:url value="/register.html"/>'>注册</a>
</body>
</html>

2)       login.jsp登录界面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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">
<title>登录-水果电商网站</title>
</head>
<body><c:if test="${!empty status}"><font color="red"><c:out value="${status}"></c:out> </font></c:if><form action='<c:url value="/loginUser.html"/>'>用户名:<input name="name" type="text"/><br>密码:<input  name="password" type="text"/><br><input type="submit" value="登录"/> <input type="reset" value="重置"/></form>
</body>
</html>

3)       register.jsp 注册页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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">
<title>注册-水果电商网站</title>
<script type="text/javascript" src="js/jquery-1.8.1.js"></script>
<script type="text/javascript">$(function(){$("#userName").bind("blur",function(){var name = $(this).val();$.ajax({type: "POST",url: "registerCheck.html",data: {name:name},success: function(msg){$("#message").html(msg);}});});});
</script>
</head>
<body><c:if test="${!empty status }"><font color="red"><c:out value="${status }"></c:out> </font></c:if><form action="registerUser.html">用户名:<input id="userName" name="name" type="text"/><span style="color:red;" id="message"></span><br>密码:<input name="password" type="text"/><br><input type="submit" value="注册"/> <input type="reset" value="重置"/></form>
</body>
</html>

4) main 登录成功、或者注册成功后转向的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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">
<title>主页-水果电商网站</title>
</head>
<body>${user.name}<c:if test="${!empty status}"><font color="red"><c:out value="${status }"></c:out> </font></c:if>
</body>
</html>

8. 最后发现spring mvc 返回给ajax的内容如果返回的是中文就会是乱码,原因是spring3.x

默认是iso-8859-1编码。解决办法一:spring mvc 的配置文件(shopfruit-servlet.xml)中添加

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  <property name="messageConverters">   <list>   <bean class = "org.springframework.http.converter.StringHttpMessageConverter">   <property name = "supportedMediaTypes"><list><value>text/html;charset=UTF-8</value>   </list>   </property>   </bean>   </list>   </property>  </bean>

解决办法二:重写StringHttpMessageConverter类

</pre><pre name="code" class="java">package com.shopfruit.util;import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.FileCopyUtils;public class UTF8StringHttpMessageConverter extends StringHttpMessageConverter {private static final MediaType utf8 = new MediaType("text", "plain",Charset.forName("UTF-8"));private boolean writeAcceptCharset = true;@Overrideprotected MediaType getDefaultContentType(String dumy) {return utf8;}protected List<Charset> getAcceptedCharsets() {return Arrays.asList(utf8.getCharSet());}protected void writeInternal(String s, HttpOutputMessage outputMessage)throws IOException {if (this.writeAcceptCharset) {outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());}Charset charset = utf8.getCharSet();FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(),charset));}public boolean isWriteAcceptCharset() {return writeAcceptCharset;}public void setWriteAcceptCharset(boolean writeAcceptCharset) {this.writeAcceptCharset = writeAcceptCharset;}
}

在spring 配置文件中添加

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><bean id ="utf8StringHttpMessageConverter"class="com.shopfruit.util.UTF8StringHttpMessageConverter" /></list></property></bean>

spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能相关推荐

  1. Spring Boot基础学习笔记11:Spring MVC

    文章目录 零.学习目标 一.Spring MVC 自动配置 (一)自动配置概述 (二)Spring Boot整合Spring MVC 的自动化配置功能特性 二.Spring MVC 功能拓展实现 (一 ...

  2. Spring Boot基础学习笔记20:Spring Security入门

    文章目录 零.学习目标 一.Spring Security (一)Spring Security概述 (二)Spring Boot整合Spring Security实现的安全管理功能 二.基础环境搭建 ...

  3. Spring Boot基础学习笔记18:Spring Boot整合Redis缓存实现

    文章目录 零.学习目标 一.Spring Boot支持的缓存组件 二.基于注解的Redis缓存实现 (一)安装与启动Redis (二)创建Spring Boot项目 - RedisCacheDemo0 ...

  4. Spring Boot基础学习笔记17:Spring Boot默认缓存

    文章目录 零.学习目标 一.缓存概述 (一)引入缓存管理的重要性 (二)Spring Boot的缓存管理 二.Spring Boot默认缓存 (一)数据准备 (二)创建Spring Boot项目 - ...

  5. Spring Boot基础学习笔记06:Spring Boot整合MyBatis

    文章目录 零.学习目标 1.了解Spring Boot数据访问概述 2.掌握使用注解的方式整合MyBatis 3.掌握使用配置文件的方式整合MyBatis 一.Spring Boot数据访问概述 二. ...

  6. Spring Boot基础学习笔记02:Spring Boot项目单元测试、热部署与原理分析

    文章目录 零.学习目标 1.掌握Spring Boot单元测试实现 2.掌握Spring Boot热部署实现 3.熟悉Spring Boot基本原理 一.Spring Boot单元测试 (一)Spri ...

  7. Spring Boot基础学习笔记01:Spring Boot入门程序

    文章目录 零.学习目标 1.了解Spring Boot框架的优点 2.掌握使用Maven方式构建Spring Boot项目 3.掌握使用Spring Initializr方式构建Spring Boot ...

  8. Spring Boot基础学习笔记08:Spring Boot整合Redis

    文章目录 零.学习目标 1.熟悉Redis相关概念 2.掌握使用Spring Boot整合Redis 一.Redis概述 1.Redis简介 2.Redis优点 (1)存取速度快 (2)数据类型丰富 ...

  9. Spring Boot基础学习笔记07:Spring Boot整合JPA

    文章目录 零.学习目标 1.熟悉Spring Data JPA基本语法和使用 2.掌握Spring Boot与JPA的整合使用 一.Spring Data JPA概述 1.Spring Data JP ...

最新文章

  1. elasticsearch health yellow
  2. echarts Cannot read property ‘getAttribute‘ of null 问题的解决方法
  3. 看漫画,学电子,我居然看懂了!
  4. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
  5. 编译原理--NFA/DFA
  6. 【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析
  7. java笔试题2015_去哪儿2015笔试题JAVA实现
  8. bax在计算机英语的意思,BaX(X=S,Se,Te)的电子结构计算
  9. mysqldump导出不包含存储过程
  10. ckEditor与ckFinder的集成
  11. python的scrapy爬虫模块间进行传参_Python爬虫Scrapy框架之请求传参合日志等级
  12. Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
  13. 算法笔记_面试题_数组/链表/跳表/各种数据结构复杂度对比
  14. 重磅!中国科协发布2020重大科学问题和工程技术难题
  15. java中JFrame.setSize,Java JFrame .setSize(x, y) not working?
  16. 2021大厂Java面试真题(分布式 )
  17. 图像处理中的数学原理详解
  18. 深度学习和浅层学习的区别
  19. streamx平台部署
  20. RT_thread空闲线程及两个常用的钩子函数

热门文章

  1. python习题集整理汇总
  2. 《小学生C++趣味编程》第42课 最小公倍数
  3. 使用php自动将文章标题或内容进行分词,添加和删除标签功能实例!
  4. Keil | 使用Register Windows测量函数的执行时间
  5. 手机局域网html,手机遥控电脑开机神器!局域网唤醒App
  6. Android mock for循环,Android单元测试(五):依赖注入,将mock方便的用起来
  7. Java工作笔记-JPA中Repository新增自定义更新操作
  8. Qt笔记-Q3DScatter及QCustom3DItem的基本使用
  9. 前端笔记-CSS布局使得网页分成3部(头,内容,脚)
  10. C++ opengl GL_LINE_STRIP的绘制