首先登陆界面的代码(适合springmvc的maven项目)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="p" uri="http://hanren.com/common/" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang = "zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/base.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/login.css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<script src="${pageContext.request.contextPath }/js/jquery-1.12.4.min.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath }/js/jquery-confirm.min.js"></script>
<link href="${pageContext.request.contextPath }/css/jquery-confirm.min.css" rel="stylesheet">
<title>登录注册页面</title>
</head>
<body>
<div class="content">
<!--
<img src="${pageContext.request.contextPath }/images/2.png">
<p>河南职业竞赛服务平台登录系统</p>
-->
<input class="inp-fon" id="mobile" type="text" name="username" value="请输入用户名" onblur="upperCase()" maxlength="11"><br>
<input class="inp-fon" id="pwd" type="text" name="pwd" value="请输入密码" maxlength="6" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" maxlength="6"><br>
<input type="text" id="user_input_verifyCode" name="user_input_verifyCode" placeholder="请输入验证码" maxlength="4" class="inp-fon" style="width: 345px;" />
<a id="changeVerifImageRegister" onclick="javascript:changeImage();">
<img src="${pageContext.request.contextPath }/quanxian/getVerifyCode.action" style="text-shadow:olive;text-align:center;margin-top: 435px;margin-right:220px;margin-left: 190px; width: 130px;height: 60px;" id="verifyCodeImage">
</a>
<button class="login" onclick="login()">登录</button>
<span class="repass"><a href="${pageContext.request.contextPath }/quanxian/repwd.action">忘记密码</a></span><span class="reg" style="color: #d8494d"><a href="${pageContext.request.contextPath }/quanxian/reg.action">申报注册</a></span>
</div>
<script type="text/javascript">
</script>
<script type="text/javascript">
function genTimestamp() {
var time = new Date();
return time.getTime();
}
function changeImage() {
$('#verifyCodeImage').attr('src',
'${pageContext.request.contextPath }/quanxian/getVerifyCode.action?timestamp=' + genTimestamp());
}
//登录,目前只检测验证码
function login(){
var user_input_verifyCode=$("#user_input_verifyCode").val();
var username = $("#mobile").val();
var pwd = $("#pwd").val();
alert(phone+pwd);
$.ajax({
type : 'post',
url : "${pageContext.request.contextPath}/quanxian/login.action",
data:{verifyCode:user_input_verifyCode,username:username,pwd:pwd},
dataType : "json",
success : function(data) {
alert(data.msg);
if(data.success){
window.location.href='${pageContext.request.contextPath }/quanxian/index.action';
}else{
alert(data.msg);
window.location.href='${pageContext.request.contextPath }/quanxian/login.action'
}
},
error : function() {
alert("查询失败");
}
});
}
</script>
<script type="application/javascript" >
function upperCase()
{
var phone = document.getElementById('mobile').value;
if(!(/^1[34578]\d{9}$/.test(phone))){
alert("手机号码有误,请重填");
return false;
}
}
</script>
</body>
</html>
其次是controller层的逻辑代码,注意层次!
package com.hanren.web.controller;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.hanren.model.User;
@Controller
public class QuanXianController {
//登陆
@RequestMapping(value="/quanxianlogin")
public String Newlogin(Model md,HttpServletRequest req,HttpServletResponse resp) throws IOException{
return "/quanxian/login";
}
@RequestMapping(value="/quanxian/getVerifyCode.action")
public void gerenate(HttpServletResponse response ,HttpSession session) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
@SuppressWarnings("unused")
String verifyCodeValue = drawImg(output);
session.setAttribute("verifyCodeValue", verifyCodeValue);
try {
ServletOutputStream out = response.getOutputStream();
output.writeTo(out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 绘画验证码
* @param output
* @return
*/
private String drawImg(ByteArrayOutputStream output) {
String code = "";
for(int i = 0;i< 4;i++) {
code+= randomChar();
}
int width = 70;
int height = 35;
BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_USHORT_555_RGB);
Font font = new Font("Times new Roman", Font.PLAIN, 20);
//调用Graphics2d绘画验证码
Graphics2D g = bi.createGraphics();
g.setFont(font);
Color color = new Color(0,0,205);
g.setColor(color);
g.setBackground(new Color(255,255,224));
g.clearRect(0,0, width, height);
FontRenderContext context = g.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(code, context);
double x = (width - bounds.getWidth())/2;
double y = (height - bounds.getHeight())/2;
double ascent = bounds.getY();
//干扰线
Random random = new Random();
for(int i=0;i<8;i++){
int x1=random.nextInt(width);
int y1=random.nextInt(height);
int x2=random.nextInt(width);
int y2=random.nextInt(height);
g.drawLine(x1, y1, x1+x2, y1+y2);
}
@SuppressWarnings("unused")
double daseY = y - ascent;
g.drawString(code, (int)x, 20);
g.dispose();
try {
ImageIO.write(bi, "jpg", output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return code;
}
/**
* 随机字符生成
* @return
*/
private char randomChar() {
Random r = new Random();
String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return s.charAt(r.nextInt(s.length()));
}
@RequestMapping(value="/quanxian/login.action",method=RequestMethod.POST)
@ResponseBody
public Result<String> login(HttpServletRequest request ,HttpSession session ) {
ModelAndView model = new ModelAndView();
String inputVerfiCode = request.getParameter("verifyCode");
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
System.out.println("验证码的值:=====:"+inputVerfiCode);
String verifyCodeValue = (String) session.getAttribute("verifyCodeValue");
System.out.println("session中的 验证码的值:"+verifyCodeValue);
if(pwd.equals(us.findUserByPhone(phone).getPwd())&&(verifyCodeValue.equals(inputVerfiCode.toUpperCase()))){
return new Result<String>(true, "输入验证ok", null) ;
}else {
return new Result<String>(false, "输入验证码不正确", null) ;
}
}
//注册
@RequestMapping(value="/quanxian/reg")
public String Newreg(Model md,HttpServletRequest req,HttpServletResponse resp)
throws IOException{
return "/quanxian/reg";
}
@RequestMapping(value="/quanxian/comparecode" ,method = RequestMethod.POST)
public ModelAndView comparecode(@RequestParam(value="code") String code,@RequestParam(value="pwd") String pwd,@RequestParam(value="repwd") String repwd,User pmodel,HttpServletRequest request){
ModelAndView model = new ModelAndView();
//从session中比对发送的验证码
HttpSession session = request.getSession();//设置session
String sessioncode =(String) session.getAttribute("code");
System.out.println(sessioncode+"==========session中的code值");
if((code).equals(sessioncode)&&pwd.equals(repwd)){//比对缓存
//注册
pmodel.setPwd(pwd);
//us.registUser(pmodel);
model.addObject("result", "注册成功,请登录");
model.setViewName("/quanxian/login");
}else{
model.addObject("pwd", "确认密码与输入密码不一致!");
model.addObject("result", "验证码不正确 ,注册失败");
model.setViewName("/quanxian/reg");
}
return model;
}
}
3,上面是核心的代码,请仔细研究接口的请求,对应实验测试可以一遍测试过!同时在验证码的样式上,可以自己在参考项目或者网上的修改方法找到适合的验证码样式!
同时注意:User的业务service与servicImpl层自己捎带写一下对应着controller层us,登陆注册方法是作为程序员的最低练习,小伙伴你要会自己写,才可以哦!
4,下面是user代码
package com.hanren.model;
public class User {
private Integer id;
private String phone;
public String pwd;
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User [id=" + id + ", phone=" + phone + ", pwd=" + pwd + "]";
}
}
5,附上pom.xml的所有依赖包!慢慢下载,网络原因可能导致你的jar包下载不全,找到jar包下载的地方,删除它没有全的,然后update 你的maven项目!就可以了!
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hanren</groupId>
<artifactId>HanRen</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 属性定义标签 -->
<!-- 集中定义依赖版本号 -->
<properties>
<!--自定义标签-->
<!-- 单元测试 -->
<junit.version>4.12</junit.version>
<!-- Spring -->
<spring.version>4.2.4.RELEASE</spring.version>
<!-- Mybatis -->
<mybatis.version>3.2.7</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<!-- MySql -->
<mysql.version>5.1.32</mysql.version>
<!-- 连接池 -->
<c3p0.version>0.9.1.2</c3p0.version>
<!-- 日志处理 -->
<slf4j.version>1.6.4</slf4j.version>
<!-- Jackson Json处理工具包 -->
<jackson.version>2.4.2</jackson.version>
<!-- JSP相关 -->
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<!-- Apache工具组件 -->
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>1.3.2</commons-io.version>
<commons-net.version>3.3</commons-net.version>
<!-- 文件上传组件 -->
<commons-fileupload.version>1.3.1</commons-fileupload.version>
</properties>
<!-- 版本锁定标签-->
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</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-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 依赖管理 -->
<!-- 具体依赖的jar-->
<!-- 不在设置具体的版本号,因为前面已经锁定-->
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- hssf excel jxl依赖 -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!--逆向生成工具 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
</dependency>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!-- 对电子邮件协议封装的 Java 类库 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-dysmsapi -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- quartz的依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
</dependencies>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
<!-- 项目构建配置,配置编译,运行插件 -->
<build>
<!--打包src下的xml文件-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<finalName>HanRen</finalName>
<!-- 管理的插件 -->
<plugins>
<!-- 处理编译器版本 -->
<!-- jdk1.7-->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
-->
<!-- tomcat插件-->
<!--
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/HanRen</path>
<port>8090</port>
</configuration>
</plugin>
-->
<!-- directory缺省情况下指向target -->
<!--<directory>${basedir}/target</directory>-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8090/manager/text</url>
<!-- server、username、password对应maven的setting下的配置 -->
<server>tomcat</server>
<username>admin</username>
<password>admin</password>
<path>/${project.build.finalName}</path>
<!-- war文件路径缺省情况下指向target -->
<!--<warFile>${basedir}/target/${project.build.finalName}.war</warFile>-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib;${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</project>