JFinal学习——Login
一:项目结构图

二:项目所需包:cos-26Dec2008.jar druid-1.0.5.jar jfinal-2.2-bin.jar log4j-1.2.16.jar
三:web.xml添加代码
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>config.AppConfig</param-value>//对应config路径 </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
四:AppConfig.java 初始化一些配置,上篇已介绍
package config;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import controller.IndexController;
import controller.UserController;
import interceptor.AuthInterceptor;
import model.User;
/**
*
*/
public class AppConfig extends JFinalConfig{
@Override
public void configConstant(Constants constants) {
//配置JFinal常量,DevMode开发者常量,setEncoding编码常量,ViewType默认视图常量
constants.setEncoding("UTF-8");
constants.setDevMode(true);
constants.setViewType(ViewType.JSP);
}
/*
* 访问路由配置 "/", IndexController.class 访问的是IndexController.index方法
* "/user", UserController.class 访问的是UserController.user方法
*/
@Override
public void configRoute(Routes routes) {
routes.add("/", IndexController.class);
routes.add("/user", UserController.class);
}
@Override
public void configPlugin(Plugins plugins) {
//这里启用Jfinal插件
PropKit.use("Jdbc.properties");//加载Jdbc.properties配置文件
final String URL =PropKit.get("jdbcUrl");//jdbc:mysql://localhost:3306/db_login
final String USERNAME = PropKit.get("user");//root
final String PASSWORD =PropKit.get("password");//root
final Integer INITIALSIZE = PropKit.getInt("initialSize");//连接池启动时创建的初始化连接数量,大小为1
final Integer MIDIDLE = PropKit.getInt("minIdle");//连接池中最大的空闲的连接数 1
final Integer MAXACTIVEE = PropKit.getInt("maxActivee");//连接池中可同时连接的最大的连接数 20
//DruidPlugin数据库连接池插件 druid-1.0.5.jar依赖包 http://blog.csdn.net/zhanyuanlin/article/details/9983171详解
DruidPlugin druidPlugin = new DruidPlugin(URL,USERNAME,PASSWORD);
druidPlugin.set(INITIALSIZE,MIDIDLE,MAXACTIVEE);
druidPlugin.setFilters("stat,wall");
plugins.add(druidPlugin);
//ActiveRecordPlugin数据库访问插件
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
//user数据表名 userid数据库表主键 User.class Model层
activeRecordPlugin.addMapping("user","userid", User.class);
plugins.add(activeRecordPlugin);
}
@Override
public void configInterceptor(Interceptors interceptors) {
//这里用于配置全局的拦截器,对所有请求进行拦截
// 添加控制层全局拦截器
interceptors.addGlobalActionInterceptor(new AuthInterceptor());
// 添加业务层全局拦截器
interceptors.addGlobalServiceInterceptor(new AuthInterceptor());
}
@Override
public void configHandler(Handlers handlers) {
}
public static void main(String[] args) {
//项目运行起点
JFinal.start("WebRoot", 80, "/", 5);
}
}
五:User.java
import com.jfinal.plugin.activerecord.Model;
/**
* model层
*/
public class User extends Model<User>{
}
六:UserService.java 数据库具体操作类
package service;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
/**
* Created by reeco_000 on 2015/7/22.
*/
public class UserService {
//添加用户信息到数据库,返回boolean类型
public boolean add(String username,String password){
String SQL = "SELECT userid FROM user WHERE username =?";
Integer result = Db.queryFirst(SQL, username);
if(result==null){
Record user = new Record().set("username", username).set("password", password);
Db.save("user", user);
return true;
}
return false;
}
//登录查询用户信息是否存在,返回boolean类型
public boolean login(String username,String password){
String SQL = "SELECT userid FROM user WHERE username =? and password=?";
Integer result = Db.queryFirst(SQL, username, password);
if(result!=null)
return true;
else return false;
}
}
七:IndexController.java
package controller;
import com.jfinal.core.Controller;
public class IndexController extends Controller{
public void index(){
renderJsp("index.jsp");
}
}
八:UserController.java
package controller;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import interceptor.AuthInterceptor;
import service.UserService;
import validator.LoginValidator;
/**
* Created by reeco_000 on 2015/7/22.
*/
public class UserController extends Controller{
private UserService userService = new UserService();
public void index(){}
@Before(LoginValidator.class)
public void login(){
String username = getPara("username");
String password = getPara("password");
boolean loginCheck = userService.login(username,password);
if(loginCheck){
forwardAction("/success");
}
else
forwardAction("/index");
}
public void register(){
String username = getPara("username");
String password = getPara("password");
boolean result = userService.add(username,password);
if(result)
forwardAction("/index");
}
}
七:LoginValidator.java JFinal校验组件,主要功能是判断表单信息是否和登录错误处理(这里不详解)
package validator;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
/**
* JFinal校验组件,
* Validator 源码可知实现了Interceptor,所以他也是个拦截器配置与拦截器一样
*/
public class LoginValidator extends Validator {
@Override
protected void validate(Controller c) {
//后端校验
validateRequiredString("username","nameError","username is null");
validateRequiredString("password","passError","password is null");
}
@Override
protected void handleError(Controller c) {
}
}
八:AuthInterceptor.java
package interceptor;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
/**
* 全局拦截器配置
*/
public class AuthInterceptor implements Interceptor {
public void intercept(Invocation invocation) {
Controller controller = invocation.getController();//获取Action调用的Controller对象
Boolean loginUser = controller.getSessionAttr("flag");//从session中取出登录检验后返回的对象
if (loginUser ==true )
invocation.invoke();//登录检验成功执行下面的拦截器和目标方法
else
controller.redirect("/");//登录检验失败则重新定向指定的url,即/
}
}
九:添加Jdbc.properties数据库基本信息文件
driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/db_login user=root password=root initialSize=1 minIdle=1 maxActivee=20
十:添加 日志文件log4j.properties
log4j.rootLogger=INFO, stdout, file
log4j.appender.stdout.Target=System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
# Output to the File
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=./web.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
# Druid
log4j.logger.druid.sql=warn,stdout
log4j.logger.druid.sql.DataSource=warn,stdout
log4j.logger.druid.sql.Connection=warn,stdout
log4j.logger.druid.sql.Statement=debug,stdout
log4j.logger.druid.sql.ResultSet=warn,stdout
十一:index.jsp很简单只有一个表单,注意命名规则
<form action="/user/login" method="post">
姓名:
<input type="text" name="user.username" value="${user.username}"/>
<br />
密码 :
<input type="text" name="user.password" value="${user.password}"/>
<br />
<br />
<input type="submit" value="登录" />
</form>
整个项目搭建完毕。
浙公网安备 33010602011771号