首先是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>itoo.jrkj.common.config.JrkjConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
从这个配置文件中的路径查找JFinal的核心类:xxxconfig。来读取配置信息。
接下来是JFinal的核心配置文件:
1、config是核心配置文件,几乎所有的配置都在这里定义,容器启动时,通过web.xml指向FinalConfig.Java文件,来读取配置
例如:
public class JrkjConfig extends JFinalConfig{
/**
* 配置常量
*/
public void configConstant(Constants me) {}
/**
* 配置路由
*/
public void configRoute(Routes me) {
//例如:
me.add("/courseAuditRecord", courseAuditRecordController.class,"/html/courseAuditRecord");//课程审计记录查询
}
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
//读取配置文件,建立数据源
// 采用DB+ActiveRecord模式 ,和下面说的Model的优点有关系
//进行DB映射
}
/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {
}
/**
* 配置处理器
*/
public void configHandler(Handlers me) {}
}
2、controller是跳转,与springMVC里的controller作用是一样的。但是它必须得继承一个Controller类。利用第一步配置好的路由器进行页面跳转。
例如:
public class courseEvaluateController extends Controller {
public void list() {
//返回页面
render("list.html");
}
}
接下来是拦截器。
拦截器共分三个级别,global,controller,action的。
1、global的需要在核心类config中的configInterceptor方法里添加。
例如:
public void configInterceptor(Interceptors me) {
me.add(new GlobalInterceptor());
}
2、controller级别的需要建立一个和controller同级的类
例如:
public class LoginInterceptor implements Interceptor{
public void intercept(Invocation ai) {
//获取缓存
HttpSession session = ai.getController().getSession();
//获取缓存中的user对象
TjUser user = (TjUser)session.getAttribute("user");
if (user != null) {
ai.invoke();
}else {
ai.getController().redirect("main/login"); //若缓存中不存在user则跳转至登录页
}
}
}
那么用这个拦截器的时候如下:
@Before(LoginInterceptor.class)
public void list() {
render("list.html");
}
3、action级别的需要在XXXController里面的方法声明处添加
当然,还有很多种用法,例如 组合拦截器等等,具体请参照JFinal手册。
最后是model:
model是DB操作文件。它就是JFinal的特殊之处,无需POJO(简单的java类)自定义字段映射。比如敲SSH的时候“vo”文件夹中的东西,都不需要写,也不用像配置Hibernate一样配置那么多的配置文件。
它和程序的连接,是需要在上面路由类中的插件方法中配置。
Model是ActiveRecord中最重要的组件之一,它充当MVC模式中的Model部分。以下是Model定义示例代码:
public class User extends Model<User> {
public static final User dao= new User();
}
例如:
拿今日开讲中的一个添加到数据库为例:
@SuppressWarnings("serial")
public class TjTeacher extends BaseTjTeacher<TjTeacher> {
public static final TjTeacher dao = new TjTeacher();
/**
* 添加讲师
* @author YangJian
* @param teacher
*/
@SuppressWarnings("deprecation")
public void addTeacherInfo(TjTeacher teacher){
try {
String id=CreateUUID22.getUUID22();
new TjTeacher().set("id", id)
.set("studentId", teacher.getStudentId())
.set("provinceId", teacher.getProvinceId())
.set("cityId", teacher.getCityId())
.set("countyId", teacher.getCountyId())
.set("address", teacher.getAddress())
.set("lecturerIdentity", teacher.getLecturerIdentity())
.set("isPublicPhoneNum", teacher.getIsPublicPhoneNum())
.set("isWorkingExperience", 0)
.set("graduateCollege", teacher.getGraduateCollege())
.set("specialty", teacher.getSpecialty())
.set("teacherCategory", teacher.getTeacherCategory())
.set("teacherEducation", teacher.getTeacherEducation())
.set("versionStartTime",new Date())
.set("operator", teacher.getOperator())
.set("isDelete", "0")
.save();
} catch (Exception e) {
e.printStackTrace();
}
}
}