SSM用户注册登录案例

1. ssm配置

web.xml

<!-- 配置前端控制器:服务器启动必须加载,需要加载springmvc.xml配置文件 -->
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 服务器启动的时候,让DispatcherServlet对象创建 --><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping><!-- 配置解决中文乱码的过滤器 -->
<filter><filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

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: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.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- Spring整合Mybatis --><!-- 配置C3P0的连接池对象 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///itcastspringmvc" /><property name="user" value="root" /><property name="password" value="root" /></bean><!-- 配置SqlSession的工厂 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /></bean><!-- 配置扫描dao的包 --><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.itheima.ssm.dao"/></bean><!-- spring的声明式事务处理 --><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 配置事务通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" read-only="true"/><tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/><tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/><tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/></tx:attributes></tx:advice><!-- 配置AOP增强事务 --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.ssm.service..*.*(..))"/></aop:config>
</beans>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.itheima.ssm"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- JSP文件所在的目录 --><property name="prefix" value="/WEB-INF/pages/" /><!-- 文件的后缀名 --><property name="suffix" value=".jsp" /></bean><!-- 设置静态资源不过滤 --><!--<mvc:resources location="/css/" mapping="/css/**" />--><!--<mvc:resources location="/img/" mapping="/img/**" />--><!--<mvc:resources location="/plugins/" mapping="/plugins/**" />--><!--静态资源一律不拦截,包括html--><mvc:default-servlet-handler /><!-- 开启对SpringMVC注解的支持 --><mvc:annotation-driven /><import resource="applicationContext.xml"></import>
</beans>

   2.  用户注册

  1. 数据库表设计
表结构:number    varchar  // 登录名name varcharpassword varchar  // 密码mobile    varcharqq       varcharemail    varchar
create table `user` (`number` varchar(40) not null,`name` VARCHAR(20) DEFAULT NULL,`password` VARCHAR(60) DEFAULT NULL,`mobile` VARCHAR(11) DEFAULT NULL,`qq` VARCHAR(11) DEFAULT NULL,`email` VARCHAR(60) DEFAULT NULL,primary key (`number`)
) ENGINE=INNODB DEFAULT CHARSET = utf8;

登录名number作为主键,具有业务含义的主键叫做自然主键;我们把自增长的id主键称之为代理主键

2. 创建工程导入jar包

指定:

Key:archetypeCatalog

Value:internal

pom.xml

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring.version>5.0.2.RELEASE</spring.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.6</mysql.version><mybatis.version>3.4.5</mybatis.version>
</properties><dependencies><!-- spring --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version><type>jar</type><scope>compile</scope></dependency></dependencies><build><finalName>ssm</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><showWarnings>true</showWarnings></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--插件使用的相关配置--><configuration><!--端口号--><port>18881</port><!--写当前项目的名字(虚拟路径),如果写/,那么每次访问项目就不需要加项目名字了--><path>/</path><!--解决get请求乱码--><uriEncoding>UTF-8</uriEncoding></configuration></plugin></plugins>
</build>

3. 创建User.java

public class User implements Serializable {private String number;private String name;private String password;private String mobile;private String qq;private String email;
}

4. 注册页面

拷贝页面到项目。

5. 创建UserController.java

页面数据发送到Controller,创建Controller

@Controller
@RequestMapping(value = "/user")
public class UserController {@Autowiredprivate UserService userService;/**** 增加用户* @param user* @return*/@RequestMapping(value = "/save")public String save(User user){//增加int acount = userService.saveUser(user);if(acount>0){//新增成功,返回登录页面return "redirect:/login.html";}else{//新增失败,返回注册页面return "redirect:/register.html";}}}

6. 创建接口UserService.java和实现类UserServiceImpl.java

public interface UserService {/**** 增加用户* @param user* @return*/int saveUser(User user);
}

7. UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public int saveUser(User user) {return userDao.save(user);}
}

如果是注解的方式配置声明式事务处理,需要添加在UserServiceImpl的类上添加:@Transactional

8 .  创建接口UserDao.java

并编写SQL语句

public interface UserDao {/**** 增加操作* @param user* @return*/@Insert("insert into user(number,password,mobile)values(#{number},#{password},#{mobile})")int save(User user);}
 

9. register.html测试

10. 修改页面

<form id="subform" action="/user/save" method="post" class="sui-form form-horizontal"><div class="control-group"><label class="control-label">用户名:</label><div class="controls"><input type="text" name="number" placeholder="请输入你的用户名" class="input-xfat input-xlarge"></div></div><div class="control-group"><label for="inputPassword" class="control-label">登录密码:</label><div class="controls"><input type="password" id="pwd" name="password" placeholder="设置登录密码" class="input-xfat input-xlarge"></div></div><div class="control-group"><label for="inputPassword" class="control-label">确认密码:</label><div class="controls"><input type="password" id="rpwd" placeholder="再次确认密码" class="input-xfat input-xlarge"></div></div><div class="control-group"><label class="control-label">手机号:</label><div class="controls"><input type="text" name="mobile" placeholder="请输入你的手机号" class="input-xfat input-xlarge"></div></div><div class="control-group"><label for="inputPassword" class="control-label">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label><div class="controls"><input name="m1" type="checkbox" value="2" checked=""><span>同意协议并注册《品优购用户协议》</span></div></div><div class="control-group"><label class="control-label"></label><div class="controls btn-reg"><button class="sui-btn btn-block btn-xlarge btn-danger" type="button" id="btn">完成注册</button></div></div>
</form>

11. 实现密码输入框的页面校验

register.html

<script src="plugins/jQuery/jquery-2.2.3.min.js"></script>
<script>$(function () {/** 点击注册按钮*     判断2次密码是否一致*     如果一致,提交到后台,否则提示错误* */$('#btn').click(function () {//获取2次密码var pwd = $('#pwd').val();var rpwd=$('#rpwd').val();if(pwd==rpwd){//提交到后台$('#subform').submit();}else{//提示alert("2次密码输入有误")}});});
</script>

12. 启动tomcat

使用tomcat插件(tomcat7-maven-plugin)

13. 测试:保存成功

3. 用户登录

1. login.html登录页面

<form class="sui-form" action="/user/login" method="post"><div class="input-prepend"><span class="add-on loginname"></span><input id="prependedInput" type="text" name="number" placeholder="邮箱/用户名/手机号" class="span2 input-xfat"></div><div class="input-prepend"><span class="add-on loginpwd"></span><input id="prependedInput" type="password" name="password" placeholder="请输入密码" class="span2 input-xfat"></div><div class="setting"><label class="checkbox inline"><input name="m1" type="checkbox" value="2" checked="">自动登录</label><span class="forget">忘记密码?</span></div><div class="logined"><button class="sui-btn btn-block btn-xlarge btn-danger" type="submit">登&nbsp;&nbsp;录</button></div>
</form>

2 . UserController.java

@RequestMapping(value = "/login")
public String login(User user, HttpSession session){//数据库查询登录User loginUser = userService.findByNumberAndPassword(user);//判断loginUser是否为空if(loginUser!=null){//登录成功跳转到欢迎页session.setAttribute("loginUser",user);return "redirect:/index/welcome";}else{//为空,登录失败,继续登录return "redirect:/login.html";}
}

3.  UserServiceImpl.java

public User findByNumberAndPassword(User user) {return userDao.findByNumberAndPassword(user);
}

4. UserDao.java

/***** 登录* @param user* @return*/
@Select("select * from user where number=#{number} and password=#{password}")
User findByNumberAndPassword(User user);

或者

@Select(value = "select * from user where number = #{number} and password=#{password}")
User findByNumberAndPassword(@Param("number") String number, @Param("password") String password);

4. 登录成功--->重定向到欢迎页

1. WelcomeController.java

@Controller
@RequestMapping(value = "/index")
public class WelcomeController {/**** 欢迎页* @return*/@RequestMapping(value = "/welcome")public String welcome(){return "index";}
}

2. index.html

将admin下的index.html拷贝到WEB-INF\pages下

同时创建index.jsp,将index.html的内容放置到index.jsp

在index.jsp中获取登录信息

<!-- Sidebar toggle button-->
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button"><span class="sr-only">Toggle navigation</span>
</a>
欢迎你:${sessionScope.loginUser.number}
欢迎你:${sessionScope.loginUser.number}

5.  整合拦截器

【需求】:用户如果已经登录

用户如果没有登录,则不能访问欢迎页

  LoginInterceptor.java

第一步:声明拦截器

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {/***** 用户是否在线* 如果不在线,不允许访问欢迎页*/Object loginUser = request.getSession().getAttribute("loginUser");if(loginUser==null){response.sendRedirect(request.getContextPath()+"/login.html");return false;}return true;}
}

springmvc.xml

第二步:配置拦截器

 <!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--指定拦截路径--><mvc:mapping path="/**"/><mvc:exclude-mapping path="/*.html"></mvc:exclude-mapping><mvc:exclude-mapping path="/css/**"></mvc:exclude-mapping><mvc:exclude-mapping path="/img/**"></mvc:exclude-mapping><mvc:exclude-mapping path="/plugins/**"></mvc:exclude-mapping><mvc:exclude-mapping path="/user/login"></mvc:exclude-mapping><mvc:exclude-mapping path="/user/save"></mvc:exclude-mapping><!--指定处理请求的拦截器--><bean class="com.itheima.register.interceptor.LoginInterceptor" /></mvc:interceptor></mvc:interceptors>

【测试】重新启动,在没有Session的情况下,访问/index/welcome,此时重定向到登录页面。

SSM用户注册登录案例相关推荐

  1. 【Web基础】用户注册登录案例

    4,用户注册登录案例 接下来我们通过两个比较常见的案例,一个是 注册,一个是 登录 来对今天学习的内容进行一个实战演练,首先来实现用户登录. 4.1 用户登录 4.1.1 需求分析 用户在登录页面输入 ...

  2. JavaWeb用户注册登录案例(使用mysql数据库)

    一.效果如下 登录演示: 注册(用户名已存在)演示: 注册成功和登录: 二.使用到的技术和软件以及案例源码下载(使用到的技术在我前面的博客中都有介绍) 前端: BootStrap框架 . niceVa ...

  3. JavaWeb--用户注册登录案例

    用户注册登录案例 1 用户登录 1.1 需求分析 1.2 环境准备 1.3 代码实现 2 用户注册 2.1 需求分析 2.2 代码编写 3 SqlSessionFactory工具类抽取 目标: 能够完 ...

  4. SSM实现登录注册的小案例(手把手喂饭)

    SSM实现登录注册的小案例 温馨提示 为了您有更好的阅读体验,原文链接如下,长理小生:https://lixingweiblog.github.io/Pages SpringMVC+Spring+My ...

  5. 用HTML做一个简单的web登录页面,简单的JavaWeb注册登录案例

    简单的JavaWeb注册登录案例 1.注册页面register.html register 姓名: 电话: 邮箱: qq: 2.注册案例实现程序register.java /** * 注册案例实现程序 ...

  6. 我爱Java系列---【登录案例】

    一.登录案例分析 二.实施流程 1.创建数据库web01,用户表user 代码: CREATE DATABASE web01; USE web01; CREATE TABLE USER( uid IN ...

  7. js调试微博登录案例

    js调试 五.微博登录案例 1.分析流程 手动操作流程 访问首页https://weibo.com 输入用户名和密码 点击登录 如果有验证码,就输入验证码验证 成功跳转到微博首页面 请求流程分析过程 ...

  8. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Request和Response-学习笔记01[Request_原理和继承体系.Request_获取请求数据][day01] Request和Resp ...

  9. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  10. 【Java13】cookiesession(登陆案例(2)),jsp(登录案例(3))

    文章目录 1.cookie:再次时请求头携带cookie到服务端 2.登陆案例_记住我:js访问浏览器数据用document 3.session:根据sessionid,服务器才能找到session( ...

最新文章

  1. python路径拼接os.path.join()函数的用法
  2. isAlive()方法的作用
  3. ABAP--如何将REUSE_ALV_GRID_DISPLAY的题头自适应居中显示
  4. 市场39款主流同步整流DCDC芯片横向测评预告---摘自:嘉立创商城
  5. redisTemplate设置key零点过期,生成自增的单号
  6. mysql sphfiks_使用sphinx索引mysql数据
  7. 网页中Flash播放器常用参数设置(转)
  8. 未来的商业,一定是基于在线化的
  9. 1.什么是NoSql数据库?
  10. java界面跳转代码_java软件里面的跳转页面代码实现
  11. cread(creade吹风机)
  12. javaweb面试题2
  13. 8K HDR!|为 Chromium 实现 HEVC 硬解 - 原理/实测指南
  14. python利用有道词典翻译_Python调用有道词典翻译
  15. 用PS为背景图片添加文字抠图
  16. 【python】批量压缩文件夹
  17. 【14】婚礼片剪辑案例【15】电视剧片头剪辑案例
  18. return,return 0 ,return -1 , exit(-1),return 1
  19. 活动目录是什么?有什么用?
  20. 本机如何传文件到VMware 中

热门文章

  1. 2寸的照片长宽各是多少_1寸和2寸的照片的长和宽各是几厘米?
  2. 线性表的链式存储-单链表,从认识到实践
  3. 聊聊JVM——类的加载(一)
  4. js 根据公历日期 算出农历_JS简单获取当前日期和农历日期的方法
  5. 201671030110词频统计软件项目报告
  6. 第一代计算机的拼音,计算机系列拼音
  7. 给定两个水壶,一个可以装4升水,一个能装3升水,水壶上没有任何度量标记。有一水龙头可以用来往壶中灌水。问题是怎样在能装4升的水壶里面恰好只装2升水
  8. Educoder 数据库设计 - 博客系统
  9. 【ruby】ruby图像处理模块“mini_magick”
  10. macd柱体和汇价的背离