赛迪网 > IT技术 Java > Java-企业应用
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

开发框架--超级简单的mvc框架实现AJF

发布时间:2008.01.15 04:34     来源:赛迪网    作者:giscat

/*
 * version0.1@20060616
 * 杜 刚
 * giscat@163.com
 * 53732908
 * 祝福zjuhg2k所有xdjm
 *
 */

AJF参考struts,webwork实现,

共5个类

 AjfAction.java
 AjfServlet.java
 AjfView.java
 AjfConfig.java
 AjfUtil.java

主要类2个

  AjfServlet.java
  AjfAction.java


AjfServlet 相当于 webwork的com.opensymphony.webwork.dispatcher.ServletDispatcher
AjfAction    相当于 webwork,struts中的action

 子类继承AjfAction,实现service方法

AjfView获取request中的attribute


a.特点:

1.废弃formbean,与webwork类似
2.http request 封装,动态注入,与webwork类似
3.零配置文件(从简易性上考虑,没有使用配置文件,以后会加入配置文件)
 
  直接提交action类名
  如/com.zjuhg2k.mvc.demo.HelloAction.ajf
  AjfServlet解析该请求,提取action类名,实例化action类

  action的service方法直接返回视图的url 如 /mvc/hello.jsp


  

 


b.需要改进加强的地方

1.配置文件

2.异常处理

3.前后台验证支持

 


c.web.xml配置

 

    < servlet>
        < servlet-name>ajf< /servlet-name>
        < servlet-class>com.zjuhg2k.mvc.AjfServlet< /servlet-class>
    < /servlet>
   
   
   
    < servlet-mapping>
        < servlet-name>ajf< /servlet-name>
        < url-pattern>*.ajf< /url-pattern>
    < /servlet-mapping>
   

d.一个简单的例子

1.action类 HelloAction.java

package com.zjuhg2k.mvc.action;

import com.zjuhg2k.mvc.*;
import com.hoson.*;

public class HelloAction extends AjfAction{
   
   
   
public String service(){
    java.sql.Timestamp nowTime = StringUtil.getNowTime();
    add("time",nowTime);//add data to model
   
    return "/mvc/hello.jsp";//return jsp view
}   
   
}


2.view  /mvc/hello.jsp

< %@page contentType="text/html;charset=GBK"%>
< %@page import="com.zjuhg2k.mvc.*"%>

hello,< %=AjfView.get(request,"name")%>
< br>time now is < %=AjfView.get(request,"time")%>


3.访问路径

 /com.zjuhg2k.mvc.demo.HelloAction.ajf?name=tiger

 

e.代码


1.AjfServlet.java
package com.zjuhg2k.mvc;


/*
 * 祝福zjuhg2k的所有XDJM
 *
 * AJF agile java framework
 *
 * version 0.1 20060617
 *
 * 杜 刚  
 * dugang
 * giscat
 * 
 * qq 53732908 mail giscat@163.com
 * 浙江东阳三单 1982.10.13
 * 简单务实自由快乐
 * 头号国产偶像 毛泽东,周恩来,邓小平
 * 头号NBA偶像 tim duncan
 * 头号足球偶像 罗那尔多
 */


import java.util.regex.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.net.*;
import java.sql.*;
import javax.servlet.http.*;
import javax.servlet.*;
import com.hoson.*;

//----------mvc  control
//--------ajf agile java framework------

 

 

public class AjfServlet extends HttpServlet {
   
    //private static String ext = ".ajf";
   
    //--------------
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    //response.sendRedirect(request.getContextPath());
        //System.out.println("servlet");
        String action = null;
        action=getAction(request);
        AjfAction ajf = null;
       
   
        try{
        ajf = (AjfAction)(Class.forName(action).newInstance());
   
        ajf.httpWrap(request,response);
       
        ajf.execute();
   
        }catch(Exception e){
           
            //System.out.println(e);
            try{
                request.setAttribute(AjfConfig.get_ajf_error_msg_key(),e);
            JspUtil.forward(request,response,AjfConfig.get_ajf_error_page_url());
            }catch(Exception e2){throw new IOException(e2+"");}
            }
       
    }
//----------------------
    public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }

//--------------------
    public static String getAction(HttpServletRequest req){
       
        String s = null;
        s = req.getServletPath();
       
        int pos1 = 0;
        int pos2 = 0;
        pos1=s.lastIndexOf("/");
        pos2=s.lastIndexOf(".");
        s=s.substring(pos1+1,pos2-pos1);
        return s;
    }
    //-----------
}

 

 

 

2.AjfAction.java

package com.zjuhg2k.mvc;


import java.util.regex.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.net.*;
import java.sql.*;
import javax.servlet.http.*;
import javax.servlet.*;
import com.hoson.*;

//----------mvc  control
//--------ajf agile java framework------
//action extends AjfAction
//over write validate and service method


/*
 * 祝福zjuhg2k的所有XDJM
 *
 * AJF agile java framework
 *
 * version 0.1 20060617
 *
 *
 * dugang
 * giscat
 * qq 53732908 mail giscat@163.com
 * 浙江东阳三单 1982.10.13
 * 简单务实自由快乐
 * 头号国产偶像 毛泽东,周恩来,邓小平
 * 头号NBA偶像 tim duncan
 * 头号足球偶像 罗那尔多
 */

 

public class AjfAction {
   
    private HttpServletRequest req = null;
    private ServletResponse res = null;
    private HttpSession session = null;
   
    private String action = null;
    private String op = null;
    //Map model = new HashMap();//model ,data container
    Properties httpProp = null;//request prop
    Map httpMap = null;//request map
    //List keyList = new ArrayList();
   
   

   
   
   
   
   
    public void httpWrap(HttpServletRequest req,
            ServletResponse res)throws Exception{
        this.req = req;
        this.res = res;
        this.session = req.getSession();
        this.httpProp = JspUtil.getReqProp(req);
        this.op=req.getParameter("op");   
       
    }
    //--------------
    public void execute()
    throws Exception{
       
        String url = null;
        try{
        url = validate();
        if(!StringUtil.isempty(url)) {
        forward(url);
        }
        url = service();
        //System.out.println(url);
        if(!StringUtil.isempty(url)) {
            forward(url);
            }

        }catch(Exception e){
           
            add(AjfConfig.get_ajf_error_msg_key(),e);
            forward(AjfConfig.get_ajf_error_page_url());
        }
       
       
    }
    //------------
    //--------logic/biz/service method here-----
    public String service()
    throws Exception{
        //return view url
        return null;
    }
    //----------
    //--------server side validate here---
   public String validate()
   throws Exception{
        //return view url,
        //  /common/validate_error.jsp
        return null;
    }
    //------------------
   public void forward(String url)
   throws Exception{                 
      
       prop2model();      
       //JspUtil.forward(req,res,url);
       req.getRequestDispatcher(url).forward(req,res);      
   }
  
   //------------
   //-----put http Prop into model map
   //------
   private void prop2model(){
    
       Enumeration e = null;
       String key = null;
       String v = null;
      
       for(e = httpProp.propertyNames(); e.hasMoreElements();)
       {
           key = (String)e.nextElement();
           v=  httpProp.getProperty(key);
           add(key,v);
          
       }

      
      
   }
   //----------put data into model---
   public void add(String key,Object obj){
      
       //keyList.add(key);
       //model.put(key,obj);
       req.setAttribute(key,obj);
   }
  
   //----------------
}
   


3.AjfView.java

package com.zjuhg2k.mvc;


import java.util.regex.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.net.*;
import java.sql.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class AjfView{
   
//    -----------
    public static String get(HttpServletRequest req,String key){
        Object v = null;
        v=req.getAttribute(key);
        if(v==null){return "";}
        return v+"";
       
    }
    //-------------
   
   
}


4. Ajfconfig.java

package com.zjuhg2k.mvc;


public class AjfConfig{
   
    private AjfConfig(){}
   
   
    private static String ajf_error_page_url = "/common/ajf_error.jsp";
    private static String ajf_error_msg_key = "ajf_error_msg";
   
   
    public static String get_ajf_error_page_url(){
       
        return ajf_error_page_url;
    }
   
    public static String get_ajf_error_msg_key(){
       
        return ajf_error_msg_key;
    }
   
}
        (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java入门--生成可执行jar文件的教程 (01-14) · 程序人生--愿意做军官还是做特种兵? (01-14)
· 基础:抽象类和接口的区别,必须弄明白的 (01-14) · 高级:使用Spring更好地处理Struts动作 (01-14)
· J2SE综合--Java 5.0 多线程编程实践 (01-14) · 数据库相关:小结Hibernate的查询方式 (01-14)
· 开发框架:初学者学习Hibernate的方法 (01-14) · J2EE综合--分析Hibernate的缓存机制 (01-14)
· J2EE综合--Hibernate的事务处理机制 (01-14) · 开发框架--Hibernate中各个包的作用 (01-14)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 中小企业网站建设存在弊端 手机实名推波助澜
· CIO应如何克服三个关键错误信念 CIO委屈定理
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统