通过Spring练习验证登入的功能
第一步、导环境支持的Java包
jar包
导入Java包
第二、编写web.xml(加载Spring的配置文件)
通过监听器实现启动加载
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--当tomcat加载web.xml时,把spring 配置文件信息存储放在application对象中 --> <!-- webapplicationcontext 容器, 是ApplicationCntext子接口 --> <!-- 设置Spring文件配置路径--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 加载Spring配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
第三、写applicationContext.xml配置
1.获取数据源
<!--获取数据源 --> <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/ssm"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </bean>
2.创建SpringSql数据对象Factory(Mybatis-spring封装)
<!--Spring帮助创建SQL sessionFactory --> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> </bean>
3.扫描器,扫描接口,并创建接口对象
告诉扫描器扫描哪个 包 类型为String类型
告诉扫描器 Mybatis 有session.getmapper工厂对象
类型为----sqlSessionFactory : SqlSessionFactory
<!--扫描器,扫描接口,并创建接口对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.wq.mapper"></property> <property name="sqlSessionFactory" ref="factory"></property> </bean>
到此,总体环境搭建完成了
第四、数据库设计
CREATE TABLE users( id INT(10) PRIMARY KEY auto_increment, username VARCHAR(20) UNIQUE, password VARCHAR(20))INSERT INTO users VALUES(DEFAULT,'张三','123')
第五、写逻辑代码
1.创建实体类对象
package com.wq.pojo;public class User { private int id; private String username; private String password;public int getId() { return id;}public void setId(int id) { this.id = id;}public String getUsername() { return username;}public void setUsername(String username) { this.username = username;}public String getPassword() { return password;}public void setPassword(String password) { this.password = password;} }
2.建立mapper接口(注解和配置文件写都是可以的)
package com.wq.mapper;import org.apache.ibatis.annotations.Select;import com.wq.pojo.User;public interface Usersmapper { @Select("select * from users where username=#{username} and password=#{password}") User selByUsersPwd(User users);}
3.service逻辑层代码接口+实现'
package com.wq.service;import com.wq.pojo.User;public interface UsersService { /** * 登入 * @param users * @return */ User login(User users);}
这里用到设值注入
package com.wq.service.impl;import com.wq.mapper.Usersmapper;import com.wq.pojo.User;import com.wq.service.UsersService;public class UsersServiceImpl implements UsersService { private Usersmapper usersmapper; public Usersmapper getUsersmapper() { return usersmapper; } public void setUsersmapper(Usersmapper usersmapper) { this.usersmapper = usersmapper; } @Override public User login(User users) { // TODO Auto-generated method stub return usersmapper.selByUsersPwd(users); }}
在Spring配置文件配置环境-com.wq.service.UsersService
通过查询数据库将其set到service中获取查询数据
4.控制器Servlet代码
获取Spring逻辑对象 通过init初始化代码
验证码(输入与图形对比)
package com.wq.Servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.context.ApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import com.wq.pojo.User;import com.wq.service.UsersService;import com.wq.service.impl.UsersServiceImpl;/** * Servlet implementation class LoginServlet */@WebServlet(name = "login", urlPatterns = { "/login" })public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; private UsersService usersService; @Override public void init() throws ServletException { ApplicationContext ac=WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); usersService = ac.getBean("usersService",UsersServiceImpl.class); } protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String codString=req.getParameter("code"); String codession = req.getSession().getAttribute("code").toString(); System.out.println(codession); System.out.println(codString); if(codession.equals(codString)){ String usernameString=req.getParameter("username"); String passwordString=req.getParameter("password"); User users=new User(); users.setUsername(usernameString); users.setPassword(passwordString); User user = usersService.login(users); if(user!=null){ resp.sendRedirect("main.jsp"); }else { req.setAttribute("error", "用户名密码不正确"); req.getRequestDispatcher("index.jsp").forward(req, resp); } }else { req.setAttribute("error", "验证码不正确"); req.getRequestDispatcher("index.jsp").forward(req, resp); } }}
验证码不正确
密码不正确
登入成功
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" src="js/jquery-1.7.2.js"></script> <script type="text/javascript"> $(function(){ $("a").click(function(){ //浏览器带有缓存功能,不会多次请求相同数据 ?date= +new DataView() /* $("img").attr("src","vcs?date="+new DataView()); */ $("img").attr("src","vcs?number="+Math.random());//实现局部刷新 return false; }) }) </script> </head> <body> <!-- <img alt="" src="demo">直接返回一个Servlet的图片流 访问静态资源和访问控制器的结果都是一样的---一个是静态访问图片路径------另一个是动态获取图片流 --> ${error } <form action="login" method="post"> 用户名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> 验证码:<input type="text" size="4" name="code"/><img alt="" src="vcs" width="80" height="40"><a href="">看不清</a><br> <input type="submit" value="登入" /><input type="reset" value="重置"> </form> </body></html>