***开发习惯
开发文档注释
养成习惯:在类前记得写开发文档注释
以便于二次开发
具体如下:
/**
* 随机生成多个字符的字符串
* @param count :字符串中字符的个数
* @return :生成的字符串
*/
public String randomString(int count){ //定义一个方法 ,count代表想要生成的字符个数
StringBuilder builder = new StringBuilder(); //生成一个动态的字符串
String source = "abcdefghijklmnpqrstuvwxy0123456789";//定义随机字符可选空间
Random rnd = new Random();
for(int i=0;i<count;i++) {
int pos = rnd.nextInt(source.length());// 定义一个随机数,不超过可选字符空间长度
String s = source.substring(pos, pos + 1);// 取一个字符
builder.append(s);//把s中的字符加到字符串builder中
}
return builder.toString();//转换为String类
}
}
将一些常用工具写成工具类
1.在java文件夹下新建一个util,用于存放一些需要重复调用的工具
2.新建一个字符串工具类StrUtil
3.将随机生成多个字符的字符串的代码复制进去
如下:
注意事项
一般情况下为了简便,我们会在要调用的类名前加上static
如:public static String randomString(int count)
/**
* 有关字符串的方法
*/
public class StrUtil {
/**
* 随机生成多个字符的字符串
* @param count :字符串中字符的个数
* @return :生成的字符串
*/
public static String randomString(int count){ //定义一个方法 ,count代表想要生成的字符个数
StringBuilder builder = new StringBuilder(); //生成一个动态的字符串
String source = "abcdefghijklmnpqrstuvwxy0123456789";//定义随机字符可选空间
Random rnd = new Random();
for(int i=0;i<count;i++) {
int pos = rnd.nextInt(source.length());// 定义一个随机数,不超过可选字符空间长度
String s = source.substring(pos, pos + 1);// 取一个字符
builder.append(s);//把s中的字符加到字符串builder中
}
return builder.toString();//转换为String类
}
}
——————————————分割线——————
正式开始
1.登录页面插入验证码
1.在LoginController类的doget方法里插入:显示验证码的代码
stringBuilder.append("验证码:<img src='./captche' width=100 height=80 /><br>");//登录界面插入验证码
2.运行程序,确保验证码和登录界面运行正常
3.img src=’ '中有两种情况,根据自己的情况输入,以显示验证码
①当前路径:./captche
②父路径:…/captche
2.验证
session方法
特点:安全性高,数据在服务端
步骤:
1.在CaptcheController中,生成验证码字符串的位置,添加如下代码
HttpSession session = req.getSession(); //用户请求,取session对象
session.setAttribute("code",code); //在生成验证码的部分进行存储,以便验证
//生成一个口袋,用来放code
2.在LoginController中,在form表单中,将用户输入验证码的文本框命名为validCode
此行代码如下:
stringBuilder.append("验证码:<input type='text' name='validCode'/><img src='./captche' width=100 height=80 /><br>");
//让用户填写验证码 并命名为validCode 登录界面插入验证码并存放
3.获取用户输入的验证码,以及系统生成的验证码
代码如下:
String validCode = req.getParameter("validCode");//获取到用户输入的验证码
String saveCode = (String)req.getSession().getAttribute("code");//强制转化为String,并取出识别码
// 将code强制转换成String类型 找req要getSession里getAttribute的code
4.写一个用于判断值是否为空的工具类
注意:写它,一来是解决第5步遇到的问题
二来,判断空值也是经常需要使用到的方法
在StrUtil里,添加代码:
/**
* 判断是否为空工具类
*/
public static boolean isBlank(String str){
boolean ret = false; //先给ret一个默认值
if(str == null || str.trim().equals("")){ //trim 去掉输入空格的情况
ret = true;
}
return ret;
}
5.使用if语句,对账号,密码,验证码,逐步进行判断
代码如下:
if(loginName.equals("5197101236") && loginPwd.equals("1234")) { //第一个if判断账号密码是否正确
if(StrUtil.isBlank(validCode)){//第二个if调用工具类,判断验证码是否为空
msg = "<font size='20'>请输入验证码" + "</font>";
}else {
if(validCode.equals(saveCode)){//第三个if判断用户输入的验证码,是否与生成的一致
msg = "<font size='20'>欢迎憨批" + loginName + "</font>";
}else {
msg = "<font size='20'>验证码错误" + "</font>";
}
}
}else {
msg = "<font size='20'>账号或密码错误" + "</font>";
}
第五步中遇到的问题(已解决)(原因未知)
系统判断是否为空语句,如下:
if(validCode != null)
这个判断,在实际操作中
当我在验证码处,不输入任何东西,直接提交时,他会直接判断
validCode 不为空
(挖坑)
拓展:取随机数工具类plus版本
如下:
/**
* 多规则的字符串生成工具
*/
public static String randomStringPuls(int count,int option){//定义一个方法 ,count代表想要生成的字符个数
StringBuilder builder = new StringBuilder();//生成一个动态的字符串
String str0="abcdefghijklmnpqrstuvwxy";//定义随机字符可选空间,目前定义str1,str2,str0三种
String str1="0123456789";
String str2="ABCDEFGHIJKLMNOPQRSTUVWXY";
String str =str0;
switch (option){ //多分支语句来选择字符区域
case 1:
str =str1;
break;
case 2:
str =str2;
break;
default:
str =str0;
break;
}
Random rnd = new Random();//定义随机数容器
for(int i=0;i<count;i++) {
int pos = rnd.nextInt(str.length());// 定义一个随机数,不超过可选字符空间长度
String s = str.substring(pos, pos + 1);// 取一个字符
builder.append(s);//把s中的字符加到字符串builder中
}
return builder.toString();//转换为String类
}