一、环境的搭建(省略),在此使用的是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。 初读手册时没有好好理解结果在这方面浪费了好多时间。可见认真阅读是多么的重要呀。