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>

整个项目搭建完毕。

  

posted on 2016-03-25 16:37  Huang路飞  阅读(339)  评论(0)    收藏  举报

导航