老杨说话的地方
  • 首页
  • 关于老杨
  • 博客时间
  • 文章分类
    • 人生感悟
    • 信息技术
    • 往事随风
    • 情感随笔
    • 文学创作
    • 生活记录
    • 评论杂谈
    • 人工智能
  • 留言本
我是老杨
张驰有度 宠辱不惊
  1. 首页
  2. 信息技术
  3. 网上办公系统
  4. 正文

MVC的核心控制器

2008年12月31日 5197点热度 0人点赞 2条评论

其实控制器编写出来之后就很简单了。因为控制器其实没有具体的功能,只是将request中的数据提交给相应的模块进行处理。当然大型的项目可以有很多控制器,组成一个控制层,但是中央控制器只有一个。我这个框架比较简单,只有一个核心控制器。

这里是代码:

package beans.common;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.lang.reflect.Field;
import java.io.*;
import beans.action.*;
import java.lang.reflect.*;
/**
*
* @author Semor
*
*/
public class Controller extends HttpServlet {
    private static final long serialVersionUID = 1L;   
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Controller() {       
        super();
        //
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request,response);
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        try{           
            String configfile=this.getInitParameter("config");                   
            String req_uri=request.getRequestURI();           
            String ctxPath = request.getContextPath();
            String uri = req_uri.substring(ctxPath.length()+1);
            DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder Builder = Factory.newDocumentBuilder();
            InputStream   is=getClass().getResourceAsStream(configfile);
            Document doc=Builder.parse(is);
            doc.normalize();
            Element action = doc.getElementById(uri);           
            if(action==null)
            {               
                System.out.println("Action Not Found,Please Check Your Config File!");
                response.setContentType("text/html");
                response.setCharacterEncoding("utf-8");
                PrintWriter pw=response.getWriter();
                pw.print("Server Error!Please Visit Later");   
               
            }else{               
                Object obj=setProperty(action.getAttribute("formbean"),request);
                request.setAttribute("formbean", obj);
                Class actionbean=Class.forName(action.getAttribute("class"));
                Action ActionToExe=(Action)actionbean.newInstance();
                if(ActionToExe.execute(request,response))
                {
                    response.sendRedirect(action.getAttribute("forward")); 
                }else{
                    RequestDispatcher   dispatcher   =   request.getRequestDispatcher(action.getAttribute("errorpage"));                                      
                    dispatcher.forward(request,response);  
                }
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public Object setProperty(String ClassPath,HttpServletRequest req)
    {
        try{
            Class ClassName=Class.forName(ClassPath);
            Object ClassInstance=ClassName.newInstance();
            Method[] MethToExe=ClassName.getDeclaredMethods();
            for(int i=0;i<MethToExe.length;i++)
            {                               
                String MethName=MethToExe[i].getName();
                if(MethName.substring(0, 3).equals("set"))
                {                           
                    String Parameter=req.getParameter(MethName.substring(3));
                    if(Parameter==null||Parameter.trim().equals(""))
                    {
                        continue;
                    }else{
                        Object arglist[] = new Object[1];
                        arglist[0] = new String(Parameter);                       
                        MethToExe[i].invoke(ClassInstance, arglist);
                    }
                }
            }
            return ClassInstance;
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;       
    }
}

代码比较简单,稍作解释:

1、doGet方法并没有具体的操作代码,而是提交给doPost来处理;

2、setProperty方法将request提交过来的数据封装到一个bean中,方法是调用的bean中的set函数,这种方式可能并不一定好,但是我现在没有找到更好的方式;

3、主函数首先从初始参数中得到配置文件的地址,然后读取配置文件,从配置文件中得到符合当前请求的action,然后将formbean存放到request范围内,提交给处理bean;

4、其中最后跳转的方法用了两个,一个是forword,另外一个是sendRedirect,这是因为forword并没有重新生成request对象,这样的话可以从request中读出错误信息,sendRedirect的话request将不再是从前的那个request,相当于重新发送了请求,如果request中保存了什么信息,这里也将不再存在。

下面会贴出配置文件的代码。

标签: java servlet 控制器 框架
最后更新:2008年12月31日

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

点赞
订阅评论
提醒
guest

guest

2 评论
内联反馈
查看所有评论
姜少雷
姜少雷
游客
2010年1月31日 下午2:04

能不能发布Java 访问修饰符和static、final等关键字的配合实用的文章。

0
回复
老杨
老杨
作者
回复给  姜少雷
2010年1月31日 下午2:05

@姜少雷 什么意思?没听明白

0
回复

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

搜索
最新 热点 随机
最新 热点 随机
中国是不是体育强国? 成功的必备因素 关于华为 别再侮辱我的智商 春秋航空让人长见识 第二青春计划失败 第二青春计划 模型训练错误RuntimeError: expected scalar type Half but found Float 加载onnx模型进行推理 PyTorch模型转onnx格式
国产与爱国 打官司 Gitlab配置SMTP邮件发送 精致的利己主义者 明天回家 Ajax中DOM的使用 Debian在使用apt安装软件时提示package has no installation candidate 我在长大 基本确定的开发环境 自然辩证法笔记三
最新评论
  • 关于华为上的老杨确实,苹果手机系统还是有优势的。
  • 关于华为上的乱云AKAY自从换了苹果手机后,对手机再没以前那样热爱研究了,主要是系统省心。
  • 第二青春计划失败上的老杨第二都失败了,第三就算了吧。
  • 春秋航空让人长见识上的老杨应该提供一点水,至少给不想买水的人一个选择的空间。
  • 别再侮辱我的智商上的老杨那个很好,很值得。
  • 关于华为上的老杨Next系统基本没广告。大部分广告都可以关掉吧,我记得我写过一个文章,…
  • 第二青春计划失败上的xqiushi开始第三青春计划吧。
  • 春秋航空让人长见识上的xqiushi那个桌板能放下小米多看电子书,还是不错的。 这个矿泉水市面上没有,特供…
  • 别再侮辱我的智商上的xqiushi只投了那100亿的项目。
  • 关于华为上的xqiushi今年我爸的手机也换成华为,家庭里手机基本都是华为。最不满意的一点就是广…

Google java jsp linux QQ wordpress 中国 习惯 人生 公司 决定 博士 博客 同学 国家 大学 学习 实验室 家 小说 工作 开始 思考 情感 手机 技术 推荐 插件 数据库 文件 晴迷星途 朋友 生活 电影 相声 程序 笔记 网站 网络 置顶 美国 评论 软件 音乐 项目

关注公众号

COPYRIGHT © 2020 老杨说话的地方. ALL RIGHTS RESERVED.

THEME KRATOS YANG Modified BY 老杨

鲁ICP备17014997号-4

鲁公网安备 37021302000754号