热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jfinal学习和环境的搭建

问题?Jfinal学习和环境的搭建、一、Jfinal是什么?JFinal是基于Java语言的极速web开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻

问题?Jfinal学习和环境的搭建、


一、Jfinal是什么?

JFinal基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python等动态语言的开发效率。

二、Jfinal的优势原则

JFinal 项目开发始于2011年初,作者詹波(James Zhan),JFinal将一直坚持以下设计目标开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在坚持以上设计目标的同时,基于微内核+全方位扩展型架构,打造功能极度全面WEB+ORM开发框架。彻底解放开发者的生产力,彻底改善开发者的开发体验,让软件开发成为一件轻松愉快的事情。


三、Jfinal环境的搭建


                  技术分享


1.建web工程,导入官方Jfinal的jar包(jfinal-2.1-all.zip、jfinal-2.1_demo.zip)案例及包下载:点击打开链接

c3p0-0.9.5.1.jar

cos-26Dec2008.jar

javax.servlet.jsp.jstl-1.2.0.v201105211821.jar

jfinal-2.1-bin-with-src.jar

mchange-commons-java-0.2.10.jar

mysql-connector-java-5.1.20-bin.jar

org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar


技术分享


2.创建数据库: JfinalEg1
3.创建资源配置文件:config.properties


配置文件内容:
jdbcUrl=jdbc:mysql://127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = root
password =root
devMode = true


4.配置文web.xml中Jfinal过滤类的实现

首先建一个继承JFinalConfig的类CommenConfig:

package com.itcast.config;

import com.itcast.controller.BlogController;
import com.itcast.controller.TestController;
import com.itcast.handler.HtmlHandler;
import com.itcast.model.Blog;
import com.itcast.util.GlobalInterceptor;
import com.itcast.util.GlobalInterceptor1;
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.core.JFinal;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;

public class CommenConfig extends JFinalConfig {
	/**
	 * 映射关系都需要在这里写
	 * */

	/**
	 * 配置
	 */
	
	/**
	 * 配置常量
	 */
	
	@Override
	public void configConstant(Constants me) {
		// TODO Auto-generated method stub
		loadPropertyFile("config.properties");//加载配置文件
		me.setDevMode(getPropertyToBoolean("devMode", false));//设置开发模式,在配置文件汇总已经设置过了
		me.setViewType(ViewType.JSP);//设置当前的视图类型
		me.setBaseViewPath("/WEB-INF/view");
		//传递多个参数的时候:http://localhost:90/blog/1-2  会依次分割参数得到值
		me.setUrlParaSeparator("-");
		me.setBaseDownloadPath("/download");
		
		//配置错误页面
		me.setError401View("/WEB-INF/view/error/Error.jsp");
		me.setError403View("/WEB-INF/view/error/Error.jsp");
		me.setError404View("/WEB-INF/view/error/Error.jsp");
		me.setError500View("/WEB-INF/view/error/Error.jsp");
		me.setErrorView(404, "/WEB-INF/view/error/Error.jsp");
	}
	
	/**
	 * 配置路由
	 */
	@Override
	public void configRoute(Routes me) {
		// TODO Auto-generated method stub
		me.add("/blog", BlogController.class);
		me.add("/blogs", TestController.class,"/test");
		/*me.add("/blogs", BlogController.class,"/blog");*/
		// 第三个参数省略时默认与第一个参数值相同,在此即为 "/blog"
		//第一个参数书请求的参数,第二个是处理请求的类,第三个是返回结果到哪里找,也就是是view的名字,在view路径下找jsp
		//访问相应的路径,可交给controller进行处理
		//也可以配置第三个参数,me.add("/", IndexController.class, "/index");
		// 第三个参数为该Controller的视图存放路径
	}

	/**
	 * 配置插件:配置数据库连接词C3P0和ORMP映射(这个映射是由插件提供)
	 */
	@Override
	public void configPlugin(Plugins me) {
		// TODO Auto-generated method stub
		// 配置C3p0数据库连接池插件,获取驱动、数据库、用户及密码
		C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"),getProperty("user"), getProperty("password").trim());
		me.add(c3p0Plugin);
		
		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
		me.add(arp);
		arp.addMapping("blog", Blog.class);//映射blog表到Blog模型
	}

	/**
	 * 配置全局拦截器,可配置多个拦截器
	 */
	@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stubme
		//me.add(new GlobalInterceptor());
		//me.add(new GlobalInterceptor1());
	}

	/**
	 * 配置处理器:可配置多个
	 */
	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub
		//me.add(new HtmlHandler());
	}
	
	@Override
	public void afterJFinalStart() {
		// TODO Auto-generated method stub
		System.out.println("系统开启后回调了");
	}
	
	@Override
	public void beforeJFinalStop() {
		// TODO Auto-generated method stub
		
		System.out.println("系统关闭之前回调了");
	}
	
	/**
	 * 建议使用 JFinal 手册推荐的方式启动项目
	 * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
	 */
	public static void main(String[] args) {
		JFinal.start("WebRoot", 90, "/", 5);
	}

}


5.配置web.xml文件:主要是配置Jfinal过滤器



  	
  
  
  	
		jfinal
		com.jfinal.core.JFinalFilter
		
			configClass
			com.itcast.config.CommenConfig
		
	
	
		jfinal
		/*
	
	
	
  
    index.jsp
  
  



6.项目分包-Jfinal MVC架构:跟普遍的mvc架构一样的

            技术分享



7.建立model层及controller层,view层的包

              技术分享




8.启动服务测试一下

拷入jar包:jetty-server-8.1.8.jar
直接RunAs启动即可:看看Jfinal的环境是否搭建成功:以下是成功的范例。

        技术分享



可能会出现端口被占用的情况,cmd->netstat –ano 把占用的进程关掉或者换一个端口


9.创建表blog

    技术分享




10.在model层中创建Blog.java继承Jfinal提供的Model

package com.itcast.model;

import com.jfinal.plugin.activerecord.Model;

public class Blog extends Model {
	public final static Blog me = new Blog();
}


11.在controller层中创建BlogController.java继承了Jfinal的controller


package com.itcast.controller;

import java.util.Date;
import java.util.List;

import com.itcast.model.Blog;
import com.jfinal.core.Controller;
import com.jfinal.render.ContentType;

public class BlogController extends Controller {
	
	//这里的方法名就有点儿像struts2中的action名字一样而且也是action方法
	//跳转到index.jsp
	public void index(){
		List blogs = Blog.me.find("select * from blog");
		for(Blog blog:blogs){
			System.out.println(blog.toString());
		}
		setAttr("blogs", Blog.me.find("select * from blog"));
		/*renderFile("1.txt");*/
		render("index.jsp");
	}
	
	//跳转到form的jsp,并且传递一个ID
	public void form(){
		Integer id = getParaToInt("id");
		if(id!=null&&id>0){
			setAttr("blog", Blog.me.findById(id));//数据库中得到一条数据
		}
		
		render("form.jsp");
	}
	//处理form的提交
	public void save(){
		Blog blog = getModel(Blog.class, "blog");//这里的blog是form表单中name里的blog
		boolean result= false;
		if(blog.get("id")==null){
			blog.set("publishTime", new Date());//设置属性值
			result = blog.save();//结果映射并保存
		}else{
			result = blog.update();
		}
		System.out.println("数据处理结果:"+result);
		index();//跳转,直接写方法即可
	}
	
	public void delete(){
		Integer id = getParaToInt("id");
		System.out.println(id);
		if(id!=null&&id>0){
			boolean result = Blog.me.deleteById(id);//数据库中得到一条数据
			if(!result){
				renderText("删除失败!");
				return;
			}else{
				renderText("

删除成功

",ContentType.HTML); return; } }else{ renderText("删除失败!"); } index(); } }

package com.itcast.controller;

import com.jfinal.aop.Clear;
import com.jfinal.core.Controller;

@Clear
public class TestController extends Controller {

	public void index(){
		renderFile("1.txt");
		render("index.jsp");
	}
}


12.在view下新建blog目录:新建index.jsp和form.jsp,error目录下建Error.jsp,test目录下建index.jsp

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib  uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
  
  
  添加
${state.index+1 }--${v.sd}--${v.id }--${v.title }--${v.content }--${v.publishTime }——编辑 删除


form.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
  
  
  
  	
  		
  		标题:
内容:

Error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    
    
	
	
	    
	
	
	

  
  
  
    404 Error Page. 


index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    
    
	
	
	    
	
	
	

  
  
  
    Test JSP page. 

环境搭建到这里,已经搭建完成。


13.测试

访问:

http://localhost:90/blogs

http://localhost:90/blog

http://localhost:90/blog.html

并依次实现一下其他的增删改查的功能.


     技术分享







Jfinal学习和环境的搭建


推荐阅读
author-avatar
mobiledu2502897157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有