效果:
直接点击注册后 :
后端验证是可靠地,前端js验证是不可靠的。只需要在浏览器删除js验证代码即可突破js验证。
1.注册界面
在WebRoot下新建regist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page isELIgnored="false" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>注册</title></head><body> <form action="regist" method="post"> 用户名:<input name="reg.name" type="text" >${nameErrMsg}<br> 密码: <input name="reg.pwd" type="password">${pwdErrMsg}<br> 验证码:<input name="reg.yzm" type="text"><img src="/yzm"><br>${yzmErrMsg} <button type="submit">注册</button> </form></body></html>
使用原生html书写,可根据自己的需求美化,使用各种优秀前端框架.
2.写后端验证
在validate包中新建RegistValidator继承JFinal的Validator
在重写的validate方法中加入自己需要验证的字段
package cn.pangpython.validate;import com.jfinal.core.Controller;import com.jfinal.validate.Validator;/** * @author pangPython * 注册的验证器 */public class RegistValidator extends Validator { @Override protected void handleError(Controller arg0) { // TODO Auto-generated method stub } @Override protected void validate(Controller arg0) { validateRequired("reg.name", "nameErrMsg", "请填写用户名!"); validateRequired("reg.pwd", "pwdErrMsg", "请填写密码!"); validateRequired("reg.yzm", "yzmErrMsg", "请填写验证码!"); }}
3.新建公共控制器CommonController继承JFinal的Controller
在里边写一些前后端通用的方法,这里先写验证码生成
package cn.pangpython.controller;import com.jfinal.core.ActionKey;import com.jfinal.core.Controller;import com.jfinal.render.CaptchaRender;/** * @author pangPython * 通用控制器,写一些通用的方法,验证码生成等 */public class CommonController extends Controller { @ActionKey("/yzm") public void verifycode(){ render(new CaptchaRender()); }}
Jfinal的验证码生成很简单,就这么几个单词….验证码校验是更简单(在JFinal2.2中)
要把这个控制器在路由中绑定一个url
FrontRoutes.java
package cn.pangpython.routes;import com.jfinal.config.Routes;import cn.pangpython.controller.CommonController;import cn.pangpython.controller.IndexController;import cn.pangpython.controller.UserController;/** * @author pangPython * 前台路由 */public class FrontRoutes extends Routes { @Override public void config() { add("/",IndexController.class); add("/user",UserController.class); add("/common",CommonController.class); }}
4.在首页控制器中写注册方法
IndexController.java
package cn.pangpython.controller;import com.jfinal.aop.Before;import com.jfinal.core.Controller;import cn.pangpython.validate.RegistValidator;/** * @author pangPython * 主页控制器 */public class IndexController extends Controller { public void index(){ renderText("index"); } //渲染注册页面 public void regpage(){ render("regist.html"); } //处理注册 @Before(RegistValidator.class) public void regist(){ renderText("注册成功!"); }}
5.在MyJFinalConfig中的configConstant(Constants me)函数中添加映射视图:
@Override public void configConstant(Constants me) { // 开发模式 me.setDevMode(true); //这里可以通过配置文件来读取配置参数,更灵活 //指定视图 me.setViewType(ViewType.JSP); }
具体功能实现后面系列博客中会继续更新…
参考博客:https://blog.csdn.net/u012995856/article/details/52781479