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
## 项目文件路径 ##