初步使用JFinal实现简单登录demo

一、环境的搭建(省略),在此使用的是JFinal手册推荐的启动方式,Tomcat启动方式百度,嘿哈。

二、使用mysql设计简单的数据库

三、整体结构

四、具体代码实现

User.java

public class User extends Model<User>{

	public static final User dao = new User();
	
	public List<User> findAll(){
		return find("select * from user");
	}
	
	public List<User> findByNameAndPwd(String name, String password){
		return find("select * from user where userName='"+name+"' and password='"+password+"'");
	}
}
IndexController.java

public class IndexController extends Controller {

	public void index(){
		
		render("login.jsp");
	}
}
LoginController.java

public class LoginController extends Controller{

	public void index(){
		
//		User user = getModel(User.class).findByNameAndPwd(getPara(0), getPara(1));;
//		User user = User.dao.findByNameAndPwd(getPara("userName"), getPara("password"));
//		user.findByNameAndPwd(getPara(0), getPara(1));
		/**
		 * 登录效验不能使用getModel方法,因此表单中name属性不能使用user.password这种命名方式
		 * 因为其直接把传递的参数封装成一个User对象,这样的话无论密码是啥都能登录
		 */
		List<User> users = User.dao.findByNameAndPwd(getPara("userName"),getPara("password"));
		
		if (users.size() > 0) {
			//找到用户
			setSessionAttr("userInfo", users.get(0));
			redirect("/user");
		} else {
			
			render("/login.jsp");
		}
		
	}
}
UserController.java

public class UserController extends Controller{
	
	public void index(){
		
		//查询数据表中的数据
		setAttr("userList", User.dao.findAll());
		render("/userList.jsp");
	}

}
LoginConfig.java

public class LoginConfig extends JFinalConfig{

	
	@Override
	public void configConstant(Constants me) {
		/**
		 * 配置常量
		 */
		PropKit.use("c3p0config.properties");
		me.setDevMode(PropKit.getBoolean("devMode", false));
		me.setViewType(ViewType.JSP);
		
	}

	@Override
	public void configRoute(Routes me) {
		me.add("/", IndexController.class);
		me.add("/login", LoginController.class);
		me.add("/user", UserController.class);
		
	}

	public static C3p0Plugin createC3p0Plugin() {
		return new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
	}
	
	
	@Override
	public void configPlugin(Plugins me) {
		/**
		 * 配置常用插件
		 */
		//c3p0连接池插件
		C3p0Plugin C3p0Plugin = createC3p0Plugin();
		me.add(C3p0Plugin);
		//数据库操作插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(C3p0Plugin);
		me.add(arp);
		//该方法建立了数据库表名到 Model 的映射关系,下面的示例为默认主键是id
		arp.addMapping("user", User.class);
		//主键不是id的示例
		//arp.addMapping("user","user_id",User.class);
		
	}

	@Override
	public void configInterceptor(Interceptors me) {
		
		
	}

	@Override
	public void configHandler(Handlers me) {
		
		
	}
	

}
五、启动测试

六、小结

1.初步使用时,在配置路径时卡了好长一段时间,在这里推荐小白好好阅读JFinal开发手册第三章,多动手操作,看看各种配置的不同效果(例如加不加'/'的不同效果)。

2.其实在使用getModel时被坑了。该方法用手册原话来讲:getModel 用来接收页面表单域传递过来的 model 对象,表单域名称以”modelName.attrName”
方式命名,除了支持 JFinal Model 对象以外, getModel 同时也支持传统的 Java Bean 初读手册时没有好好理解结果在这方面浪费了好多时间。可见认真阅读是多么的重要呀。






相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页