jfinal(Jfinal框架的原理和用法)

发布时间:2025-12-10 23:59:58 浏览次数:9

一、启动原理

Jfinal是个web框架,依赖于web.xml启动,如下:

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="mc"version="3.0"><filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class><init-param><param-name>configClass</param-name><param-value>com.xxx.run.ApiConfig</param-value></init-param></filter><filter-mapping><filter-name>jfinal</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>

说明:

Jfinal通过过滤器Filter启动相关配置,如上:

1、所有的请求都会被过滤器com.jfinal.core.JFinalFilter拦截;

2、JFinalFilter的init方法会由web容器启动;

3、init方法会根据init-param中配置的类进行对象初始化,如下完整代码会获取param-name为configClass对应的值,即ApiConfig类,然后通过反射得到这个类的相关内容;

核心代码块:

publicvoidinit(FilterConfigfilterConfig)throwsServletException{createJFinalConfig(filterConfig.getInitParameter("configClass"));jfinal.init(jfinalConfig,filterConfig.getServletContext());StringcontextPath=filterConfig.getServletContext().getContextPath();contextPathLength=(contextPath==null||"/".equals(contextPath)?0:contextPath.length());constants=Config.getConstants();encoding=constants.getEncoding();jfinalConfig.afterJFinalStart();handler=jfinal.getHandler();//开始接受请求}

JFinalFilter 完整代码如下:

packagecom.jfinal.core;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jfinal.config.Constants;importcom.jfinal.config.JFinalConfig;importcom.jfinal.handler.Handler;importcom.jfinal.log.Log;/***JFinalframeworkfilter*/publicclassJFinalFilterimplementsFilter{privateHandlerhandler;privateStringencoding;privateJFinalConfigjfinalConfig;privateConstantsconstants;privatestaticfinalJFinaljfinal=JFinal.me();privatestaticLoglog;privateintcontextPathLength;publicvoidinit(FilterConfigfilterConfig)throwsServletException{createJFinalConfig(filterConfig.getInitParameter("configClass"));jfinal.init(jfinalConfig,filterConfig.getServletContext());StringcontextPath=filterConfig.getServletContext().getContextPath();contextPathLength=(contextPath==null||"/".equals(contextPath)?0:contextPath.length());constants=Config.getConstants();encoding=constants.getEncoding();jfinalConfig.afterJFinalStart();handler=jfinal.getHandler();//开始接受请求}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;request.setCharacterEncoding(encoding);Stringtarget=request.getRequestURI();if(contextPathLength!=0){target=target.substring(contextPathLength);}boolean[]isHandled={false};try{handler.handle(target,request,response,isHandled);}catch(Exceptione){if(log.isErrorEnabled()){Stringqs=request.getQueryString();log.error(qs==null?target:target+"?"+qs,e);}}if(isHandled[0]==false){chain.doFilter(request,response);}}publicvoiddestroy(){handler=null;//停止接受请求jfinalConfig.beforeJFinalStop();jfinal.stopPlugins();}protectedvoidcreateJFinalConfig(StringconfigClass){if(configClass==null){thrownewRuntimeException("PleasesetconfigClassparameterofJFinalFilterinweb.xml");}Objecttemp=null;try{temp=Class.forName(configClass).newInstance();}catch(Exceptione){thrownewRuntimeException("Cannotcreateinstanceofclass:"+configClass,e);}if(tempinstanceofJFinalConfig){jfinalConfig=(JFinalConfig)temp;}else{thrownewRuntimeException("Cannotcreateinstanceofclass:"+configClass+".Pleasechecktheconfiginweb.xml");}}staticvoidinitLog(){log=Log.getLog(JFinalFilter.class);}}

二、其它框架集成Jfinal框架

Jfinal框架本质上就是web.xml + Lib包;

从功能上看主要分为:

1、处理用户web请求的lib或类,如ControllerRoutes,configInterceptor,configHandler,启动端口等;

2、普通的插件,配置等,如configPlugin,loadProp,configConstant等

如果集成不需要使用Jfinal的web相关功能,则主要根据第二点选择即可,对于我们项目的biz,则主要为了使用Record,那么集成ActiveRecordPlugin类即可。

到此,关于“Jfinal框架的原理和用法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注本站网站,小编会继续努力为大家带来更多实用的文章!

jfinal
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477