JFinal
JFinal
下载地址:
http://www.jfinal.com/project/1
文档地址
http://www.jfinal.com/upload/2.2/jfinal-2.2-all.zip
开发流程
非常详细的开发文档:
http://www.jfinal.com/doc
## step1: 新建项目 ##
新建 项目/动态网站 (Dynamic Web Server) , 新建项目是选择 J2EE1.4 模板
WebRoot\WEB-INF\classes
WebRoot
编辑文件是在于 web.xml (此文件路径是在 WEB-INF目录) 中
PS. 如果MyEclipse中看不见 web.xml 文件夹的话,那么,可以:
右键web-inf文件夹,点Show In 里有个Navigator ,就出来了
在 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>demo.DemoConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
附上完整的 web.xml
```
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>jfinal_demo</display-name>
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>demo.DemoConfig</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>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
</welcome-file-list>
</web-app>
```
将 jfinal-xxx.jar 与 jetty-server-8.1.8.jar拷贝至项目 WEB-INF\lib 下即可 。
注意: jetty-server-8.1.8.jar 是开发时使用的 运行环境
## step2: 创建类 ##
demo 包下 新建 DemoConfig 类
```
package demo;
import com.jfinal.config.*;
public class DemoConfig extends JFinalConfig {
public void configConstant(Constants me) {
me.setDevMode(true);
}
public void configRoute(Routes me) {
me.add("/hello", HelloController.class);
}
public void configPlugin(Plugins me) {
}
public void configInterceptor(Interceptors me) {
}
public void configHandler(Handlers me) {
}
}
```
控制器:
```
package demo;
import com.jfinal.core.Controller;
public class HelloController extends Controller {
public void index() {
renderText("Hello JFinal World.");
}
}
```
## step3 配置程序启动路径 ##
参照文档来做
点击 “New Configuration” 按钮启动服务器
## 错误信息 ##
---------
```
一月 05, 2017 7:53:01 下午 com.jfinal.kit.LogKit error
严重: port: 80 already in use!
java.lang.IllegalStateException: port: 80 already in use!
at com.jfinal.server.JettyServer.doStart(JettyServer.java:79)
at com.jfinal.server.JettyServer.start(JettyServer.java:65)
at com.jfinal.core.JFinal.main(JFinal.java:168)
```
关闭占用的 80 端口
netstat -ano 80 netstat -aon|findstr "80"
netstat -abno后查看,经过查找为pid=4的system进程,因为是系统进程,也无法结束它,经查SQL Server ReportingServices (SQLEXPRESS) 服务占用80端口,停止SQL Server ReportingServices后APache正常启动.
---------
## 数据库 ##
ansisqldialect 数据库方言
```
public void configPlugin(Plugins me) {
loadPropertyFile("classes/config.properties");
C3p0Plugin cp = new C3p0Plugin(getProperty("jdbc.url"),
getProperty("jdbc.username"), getProperty("jdbc.password"),
getProperty("jdbc.driverClassName")); // 使用C3P0
me.add(cp);
ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
me.add(arp);
// arp.setDialect(new AnsiSqlDialect());//使用AnsiSqlDialect
arp.setDialect(new SqlServerDialect());
arp.setContainerFactory(new CaseInsensitiveContainerFactory());
}
```
### MSSQL ###
``` ##------------------------------------------------- ## SQL Server ##------------------------------------------------- jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=dbname jdbc.username=sa jdbc.password=123456 jdbc.dbType=sqlserver ```
- 插件 ###
#### 信息 ####
``` 2017-01-10 15:49:42.999:WARN:oejuc.AbstractLifeCycle:FAILED jfinal: java.lang.IllegalArgumentException: Properties file not found in classpath: classes/config.properties java.lang.IllegalArgumentException: Properties file not found in classpath: classes/config.properties ```
改成 loadPropertyFile("config.properties");, 并将 config.properties 文件放到 src 文件夹中
``` 2017-01-10 16:08:52.945:WARN:oejuc.AbstractLifeCycle:FAILED jfinal: java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource ``` 缺少连接池包( c3p0-0.8.5.2.jar )
```
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader.findClass(Unknown Source)
```
缺少连接池包( sqljdbc4.jar )
```
com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此服务器版本。目标服务器必须是 SQL Server 2000 或更高版本。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.DBComms.Prelogin(Unknown Source)
at com.microsoft.sqlserver.jdbc.DBComms.<init>(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
```
JAR包问题,在项目的WEB-INFO/lib下存在sqljdbc4.jar和sqljdbc.jar两个札包,就是因为"sqljdbc.jar"版本太老的原因使得无法访问SQLSERVER08数据库,将“sqljdbc.jar”删掉,只留sqljdbc4.jar,之后再右击项目-->Build Path-->configureBuildPath-->将sqljdbc.jar删除,这样编译之后的classpath下就只有sqljdbc4.jar,就不会产生冲突;
##### 资料 #####
jfinal框架下使用c3P0连接池连接sql server 2008
http://blog.csdn.net/u014522611/article/details/50095571
- 访问数据库 ###
```
List<Record> users = Db.find("select * from AccountsInfo");
System.out.println(users);
// 创建name属性为James,age属性为25的record对象并添加到数据库
Record user = new Record().set("name", "James").set("age", 25);
Db.save("user", user);
// 删除id值为25的user表中的记录
Db.deleteById("user", 25);
// 查询id值为25的Record将其name属性改为James并更新到数据库
user = Db.findById("user", 25).set("name", "James");
Db.update("user", user);
// 获取user的name属性
String userName = user.getStr("name");
// 获取user的age属性
Integer userAge = user.getInt("age");
// 查询所有年龄大于18岁的user
List<Record> users = Db.find("select * from user where age > 18");
// 分页查询年龄大于18的user,当前页号为1,每页10个user
Page<Record> userPage = Db.paginate(1, 10, "select *", "from user where age > ?", 18);
```
## JSON ##
Action
```
List<Record> users = Db.find("select top 10 * from AccountsInfo");
renderJson(users);
```
# 测试环境 #
记得加上这句话: “userInfoRedis.start();”
```
public static void main(String[] args) {
RedisPlugin userInfoRedis = new RedisPlugin("userInfo","localhost");
// 测试环境中执行
userInfoRedis.start();
Cache userInfoCache = Redis.use("userInfo");
userInfoCache.set("1", "2");
Object o = userInfoCache.get("1");
System.out.println(o);
}
```
- 端口设置 #
jfinal初接触,一个简单的文件上传例子
http://www.cnblogs.com/acehalo/p/3915720.html
## 项目文件路径 ##

浙公网安备 33010602011771号