前言废话
最近公司不忙,有时间重拾以前的java,发现struts2忘得已经差不多了,springMVC也快忘净了,唉,人生啊,先从一个简单的轻量级框架JFinal开始吧,顺便吐槽一下,从.net再转回java太痛苦了,Visual Studio写代码太舒服了,舒服到啥都不会拼写了。
从新建一个项目开始
新建一个maven项目
选中项目右键——Properties
其实我选的是8.5,截图懒得改了,哈哈
修改pom.xml,下载jar包
<!-- 都做了简单说明,自己看吧 -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>8.1.8.v20121106</version>
<!--<scope>provided</scope>-->
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- jfinal 核心包 -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>26Dec2008</version>
</dependency>
<!-- 阿里巴巴druid数据连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.15</version>
</dependency>
<!-- 阿里fastjson包JSON转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
<!-- servlet标准-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<!-- JSP -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
src/main/resources下新建config-pro.properties和config.properties
config-pro.properties代码如下
# ---生产环境配置文件---
#jdbcUrl = 填写生产环境地址
#user = 填写生产环境数据库用户名
#password =填写生产环境数据库密码
#devMode =false
#engineDevMode=false
cofig.properties代码如下
# ---开发环境配置文件---
#database config
dbType=mysql
mysqljdbcUrl = jdbc:mysql://192.168.16.111/shine?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
mysqluser = root
mysqlpassword = 123456
devMode =true
engineDevMode=true
新建Myconfig.java路径如下
Myconfig.java内容,配置loadConfig()和creatDruidPlugins()
package com.zzkMavenJfinal.common;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
public class Myconfig extends JFinalConfig{
/**
* 将全局配置提出来 方便其他地方重用
*/
private static Prop p;
private WallFilter wallFilter;
public void configConstant(Constants constants) {
constants.setDevMode(true);
constants.setEncoding("UTF-8");
constants.setViewType(ViewType.JSP);
}
public void configRoute(Routes routes) {
// 推荐拆分方式 如果需要就解开注释 创建对应的 Routes
//routes.add(new IndexRoutes());// 配置网站前台路由
}
// 先加载开发环境配置,再追加生产环境的少量配置覆盖掉开发环境配置
static void loadConfig() {
if (p == null) {
p = PropKit.use("config.properties").appendIfExists("config-pro.properties");
}
}
public void configEngine(Engine engine) {
}
public void configInterceptor(Interceptors interceptors) {
}
public void configHandler(Handlers handlers) {
}
/**
* 配置JFinal插件 数据库连接池 ActiveRecordPlugin 缓存 定时任务 自定义插件
*/
@Override
public void configPlugin(Plugins me) {
}
// 系统启动完成后回调
public void afterJFinalStart() {
}
// 系统关闭之前回调
public void beforeJFinalStop() {
}
/**
* 获取数据连接池
* @return
*/
public static DruidPlugin creatDruidPlugins(){
loadConfig();
return new DruidPlugin(PropKit.get("mysqljdbcUrl"),PropKit.get("mysqluser"),PropKit.get("mysqlpassword").trim());
}
public static void main(String[] args) {
// 第二个参数为端口
//JFinal.start("src/main/webapp", 8085, "/");
}
}
配置src/main/webapp/web-inf/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_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<!--此处就是上面新建的MyConfig-->
<param-value>com.zzkMavenJfinal.common.Myconfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
model文件夹下建这两个文件
_MappingKit.java代码如下
package com.zzkMavenJfinal.model;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.zzkMavenJfinal.model.SysUser;
/**
* Generated by JFinal, do not modify this file.
*
* <pre>
* Example:
* public void configPlugin(Plugins me) {
* ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
* _MappingKit.mapping(arp);
* me.add(arp);
* }
* </pre>
*/
public class _MappingKit {
public static void mapping(ActiveRecordPlugin arp) {
///此处添加表,第二项是主键,无主键可为空
arp.addMapping("tb_vote", "Id", SysUser.class);
}
}
SysUser.java代码如下
package com.zzkMavenJfinal.model;
import com.jfinal.plugin.activerecord.Model;
/**
*/
@SuppressWarnings("serial")
public class SysUser extends Model<SysUser> {
}
配置MyConfig.java
代码如下
loadConfig();
wallFilter = new WallFilter(); // 加强数据库安全
DruidPlugin dbMysql = creatDruidPlugins();
wallFilter.setDbType("mysql");
dbMysql.addFilter(wallFilter);
dbMysql.addFilter(new StatFilter()); // 添加 StatFilter 才会有统计数据
me.add(dbMysql);
ActiveRecordPlugin arpMysql = new ActiveRecordPlugin("mysql", dbMysql);
arpMysql.setShowSql(p.getBoolean("devMode"));
arpMysql.setDialect(new MysqlDialect());
arpMysql.addMapping("tb_vote", "Id", SysUser.class);
me.add(arpMysql);
controller文件夹里面建这几个文件
应该还有个dao,懒得写了,直接在service里面操作数据库了,正式项目一定要有dao,不然显得你很low
IndexRoutes.java路由代码
package com.zzkMavenJfinal.controller;
import com.jfinal.config.Routes;
import com.zzkMavenJfinal.controller.index.indexController;
public class IndexRoutes extends Routes {
@Override
public void config() {
// TODO Auto-generated method stub
setBaseViewPath("/index/");//这是对应的jsp文件的文件夹,根目录是src/main/webapp
add("/", indexController.class);//这是一会要建的控制器
}
}
indexController.java代码
package com.zzkMavenJfinal.controller.index;
import java.util.List;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;
import com.zzkMavenJfinal.model.SysUser;
public class indexController extends Controller {
IndexService service = IndexService.SERVICE;
public void index1() {
render("index.jsp");
}
/**
* 查找所有blog
*/
public void index(){
List<SysUser> blogs=service.queryList();
Ret ret=Ret.create();
ret.setOk();
ret.set("blogs",blogs);
setAttr("ret", ret);
render("index.jsp");
}
}
IndexService.java
package com.zzkMavenJfinal.controller.index;
import java.util.List;
import com.jfinal.plugin.activerecord.Db;
import com.zzkMavenJfinal.model.SysUser;
public class IndexService {
public static final IndexService SERVICE = new IndexService();
private SysUser blog=new SysUser().dao();
public SysUser queryById(int id){
return blog.findById(id);
}
public List<SysUser> queryList(){
List<SysUser> blogList=blog.find("select * from tb_vote");
return blogList;
}
public void delectById(int id){
blog.deleteById(id);
}
/*
* public Integer delete() { //Db. }
*/
}
把路由配置到MyConfig.java里面
public void configRoute(Routes routes) {
// 推荐拆分方式 如果需要就解开注释 创建对应的 Routes
routes.add(new IndexRoutes());// 配置网站前台路由
}
前台index.jsp代码,简单查询ret就是indexController里面index()里面传的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<h2>Hello World!</h2>
${ret}
</body>
</html>
启动项目,简单查询成功,下面写简单增删改