`
viwo
  • 浏览: 221622 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

"Struts"的简易实现

    博客分类:
  • JAVA
阅读更多
java 代码
  1. package com.viwo.web.acion;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.lang.reflect.Method;   
  6. import java.util.Map;   
  7.   
  8. import javax.servlet.RequestDispatcher;   
  9. import javax.servlet.ServletException;   
  10. import javax.servlet.http.HttpServlet;   
  11. import javax.servlet.http.HttpServletRequest;   
  12. import javax.servlet.http.HttpServletResponse;   
  13.   
  14. import org.apache.commons.digester.Digester;   
  15. import org.apache.log4j.Logger;   
  16. import org.xml.sax.SAXException;   
  17.   
  18. import com.viwo.web.config.ConfigAction;   
  19. import com.viwo.web.config.ConfigForward;   
  20. import com.viwo.web.config.ViwoConfig;   
  21.   
  22. /**  
  23.  * the Frameword's entry,the Controller of All  
  24.  *   
  25.  * @author viwo   
  26.  *    
  27.  */  
  28. public class ViwoServlet extends HttpServlet {   
  29.      
  30.  private final static Logger logger = Logger.getLogger(ViwoServlet.class);   
  31.     public void doGet(HttpServletRequest request,   
  32.                HttpServletResponse response)   
  33.          throws IOException, ServletException {   
  34.     
  35.         process(request, response);   
  36.   
  37.      }   
  38.   
  39.      public void doPost(HttpServletRequest request,   
  40.                 HttpServletResponse response)   
  41.          throws IOException, ServletException {   
  42.        
  43.          process(request, response);   
  44.   
  45.      }   
  46.      
  47.      /**  
  48.       * the main method of ViwoServlet  
  49.       *   
  50.       * get the properties from web.xml and viwo-config.xml  
  51.       *   
  52.       * use these properties and url info to initialize and select appropriate action   
  53.       * and method to go.  
  54.       *   
  55.       * @param request  
  56.       * @param response  
  57.       */  
  58.      protected void process(HttpServletRequest request,   
  59.                 HttpServletResponse response)   
  60.       throws IOException, ServletException {   
  61.          String config = getServletConfig().getInitParameter("config");   
  62.          String template = getServletConfig().getInitParameter("template");   
  63.          logger.info("[viwo]-->[enter process]-->[config:]"+config);   
  64.             
  65.          String forward = "";   
  66.          Object returnValue = null;   
  67.             String url = request.getRealPath(config);   
  68.             logger.debug("[viwo]-->[process]-->[url:]"+url);   
  69.                
  70.             String requestURI = request.getRequestURI();   
  71.             int lastdot = requestURI.lastIndexOf(".");   
  72.             int lastbias = requestURI.lastIndexOf("/");   
  73.             int lastbiasbutone = requestURI.lastIndexOf("/",lastbias-1);   
  74.             String method = requestURI.substring(lastbias+1,lastdot);   
  75.             String action = requestURI.substring(lastbiasbutone+1,lastbias);   
  76.             Object actionObject = null;   
  77.             try  
  78.             {      
  79.              ViwoConfig viwoConfig = getViwoConfig(url);   
  80.              Map cfgActionMap  = viwoConfig.getActionMap();   
  81.              Map cfgForwardMap = viwoConfig.getForwardMap();   
  82.                 
  83.              if(cfgActionMap.get(action)!=null)   
  84.              {   
  85.               ConfigAction ca = (ConfigAction)cfgActionMap.get(action);   
  86.               action = ca.getType();   
  87.              }   
  88.                 
  89.              actionObject = Class.forName(action).newInstance();   
  90.                 Method m = getMethod(actionObject,method);   
  91.                 if(m != null)   
  92.                 {   
  93.                  returnValue = m.invoke(actionObject,new Object[]{request,response});   
  94.                  //如果方法调用返回的是null,则直接返回。   
  95.                  if(returnValue==null)   
  96.                   return;   
  97.                  //根据web.xml中配置的template参数决定选择使用哪种模板引擎。   
  98.                  if(template!=null)   
  99.                   forward = "/"+returnValue+"."+template;   
  100.                  else  
  101.                   forward = "/"+returnValue+".jsp";   
  102.                     
  103.                  if(cfgForwardMap.get(returnValue)!=null)   
  104.                  {   
  105.                   ConfigForward cf = (ConfigForward)cfgForwardMap.get(returnValue);   
  106.                   forward = cf.getPath();   
  107.                  }   
  108.        
  109.                  logger.debug("[viwo]-->[process]-->[forward:]"+forward);   
  110.                  RequestDispatcher rd = getServletContext().getRequestDispatcher(forward);   
  111.                  rd.forward(request, response);   
  112.                 }   
  113.                 else  
  114.                 {   
  115.                  logger.error("[viwo]-->[process]-->"+"There haven't the "+method+" Method,Please check URL!");   
  116.                  response.getWriter().print("There haven't the "+method+" Method,Please check URL!");   
  117.                 }   
  118.                    
  119.    }    
  120.             catch (ClassNotFoundException e)    
  121.    {   
  122.              logger.error("[viwo]-->[process]-->"+"There haven't the "+action+" Class,Please check URL!");   
  123.              response.getWriter().print("There haven't the "+action+" Class,Please check URL!");   
  124.    }    
  125.             catch (NoClassDefFoundError e)   
  126.             {   
  127.              logger.error("[viwo]-->[process]-->"+"There haven't the "+action+" Class,Please check URL!");   
  128.              response.getWriter().print("There haven't the "+action+" Class,Please check URL!");   
  129.             }   
  130.             catch (Exception e)   
  131.             {   
  132.              System.out.println(e.getMessage());   
  133.              logger.error("[viwo]-->[process]-->"+e.getMessage());   
  134.             }   
  135.     
  136.      }   
  137.         
  138.      /**  
  139.       * the method for parsing config file for ViwoServlet  
  140.       *   
  141.       * put the properties from viwo-config.xml to and object of ViwoConfig  
  142.       *   
  143.       * @param url  
  144.       * @return ViwoConfig  
  145.       */  
  146.      private ViwoConfig getViwoConfig(String url) throws IOException, SAXException   
  147.      {   
  148.       Digester digester = new Digester();     
  149.          digester.setValidating(false);    
  150.          digester.addObjectCreate("viwo-config""com.viwo.web.config.ViwoConfig");   
  151.             
  152.          digester.addObjectCreate("viwo-config/action""com.viwo.web.config.ConfigAction");   
  153.          digester.addSetProperties("viwo-config/action");   
  154.          digester.addSetNext("viwo-config/action""addAction""com.viwo.web.config.ConfigAction");   
  155.             
  156.          digester.addObjectCreate("viwo-config/forward""com.viwo.web.config.ConfigForward");   
  157.          digester.addSetProperties("viwo-config/forward");   
  158.          digester.addSetNext("viwo-config/forward""addForward""com.viwo.web.config.ConfigForward");   
  159.          ViwoConfig viwoConfig = (ViwoConfig) digester.parse(new File(url));   
  160.          return viwoConfig;   
  161.             
  162.      }   
  163.         
  164.      /**  
  165.       * get the actionObject's method Method  
  166.       *  
  167.       * @param actionObject  
  168.       * @param method  
  169.       * @return Method  
  170.       */  
  171.      private Method getMethod(Object actionObject,String method)    
  172.        throws IOException   
  173.      {   
  174.               
  175.      Method[] methods = actionObject.getClass().getMethods();   
  176.      if(methods==null||methods.length==0)   
  177.      {   
  178.       return null;   
  179.      }   
  180.      for(int i=0;i      {   
  181.       if(methods[i].getName().equals(method))   
  182.        return methods[i];   
  183.      }   
  184.      return null;   
  185.       
  186.      }   
  187.   
  188. }   
分享到:
评论

相关推荐

    struts简易留言板效果

    在这个“struts简易留言板效果”的项目中,我们可以深入理解Struts框架如何与数据库交互,以及如何实现用户界面的动态展示。 首先,我们要知道Struts框架的核心是ActionServlet,它是Servlet的一个扩展,负责接收...

    struts简易增删改查

    在"struts简易增删改查"这个主题中,我们将探讨如何使用Struts框架来实现一个基本的数据操作功能,包括添加(Add)、删除(Delete)、修改(Update)和查询(Search)数据。这些功能是任何数据库驱动的应用程序的...

    用struts开发的简易bbs论坛社区源码简洁设计网

    本源码提供的是一个基于Struts框架开发的简易BBS论坛社区,其设计简洁,适合初学者学习和理解Struts的工作原理以及Web应用开发的基本流程。 在Struts框架中,主要包含以下几个核心组件: 1. **ActionServlet**:这...

    Struts简易论坛

    Struts简易论坛是一款基于Struts框架开发的在线讨论平台,非常适合初学者学习和研究Web应用程序的构建。Struts是Apache软件基金会的一个开源项目,它是一个用于构建MVC(Model-View-Controller)模式的Java Web应用...

    自己实现的struts1简易框架

    在"自己实现的struts1简易框架"中,我们看到作者试图创建一个简化版的Struts1实现,以便更好地理解和掌握其核心机制。以下是对该简易框架中涉及的关键知识点的详细解释: 1. **配置Action**: 在Struts1中,Action是...

    struts简易留言本

    在本项目"struts简易留言本"中,我们可以通过学习和理解来掌握Struts如何用于创建一个简单的Web应用程序,特别是处理用户交互和数据管理。 首先,让我们了解Struts框架的核心概念: 1. **Action类**:在Struts中,...

    struts实现简易门票销售系统

    在这个简易门票销售系统中,Struts框架扮演了核心架构的角色,帮助开发者组织和协调各个组件,实现业务逻辑与视图的分离。 1. **MVC设计模式**:MVC模式是软件工程中的一种设计模式,它将应用分为模型(Model)、...

    spring3+hibernate3+struts2实现简易后台菜单控制

    标题 "spring3+hibernate3+struts2实现简易后台菜单控制" 涉及的是一个基于Java Web的经典技术栈构建的后台管理系统。这个系统利用Spring 3作为整体框架,提供依赖注入和AOP(面向切面编程)功能;Hibernate 3作为...

    struts2 mysql实现简单学生成绩管理代码

    本项目利用Struts2与MySQL数据库结合,实现了一个简易的学生成绩管理系统,旨在帮助初学者了解如何在实际项目中应用这两个技术。 在Struts2框架中,控制器负责接收用户的请求,通过Action类处理业务逻辑,并将结果...

    简易个人博客平台 struts+mybatis实现

    【简易个人博客平台 struts+mybatis实现】 本项目是一个基于Java技术栈的简易个人博客平台,主要利用了Struts2框架与MyBatis持久层框架进行开发。这个平台适用于初学者作为学习实践的实例,它包含了一些基本的CSS...

    struts版本的简易留言板 学习参考 含项目源码

    Struts是Apache软件基金会的一个...同时,你还能看到如何整合数据库和Struts,实现数据的增删查改。这将帮助你建立起一个关于MVC(Model-View-Controller)架构的直观理解,并为后续更复杂的企业级应用开发打下基础。

    javaweb的struts2银行简易系统

    这个"javaweb的struts2银行简易系统"的实现,不仅可以帮助开发者理解Struts2框架的基本使用,还可以深入学习如何在实际项目中结合银行业务逻辑来设计和实现Web应用。通过这个系统,你可以实践如何组织Action、配置...

    Struts2简易计算器.zip

    在这个“Struts2简易计算器”项目中,我们可以看到一个基础的JavaEE入门级编程练习,它展示了如何利用Struts2框架来实现一个简单的计算器功能。 首先,Struts2框架的核心在于它提供了控制器组件,用于处理HTTP请求...

    JavaWeb利用struts2实现一个简单计算器

    本资源通过使用Struts2来实现一个简单的计算器应用,旨在帮助学习者理解如何在实际项目中应用Struts2的核心概念和技术。 首先,我们需要理解Struts2的基本架构。Struts2框架的核心是Action类,它是业务逻辑的载体。...

    struts+SmartUpload实现的一个简易上传下载系统

    struts+SmartUpload实现的一个简易上传下载系统,此系统的主要代码已经放到俺博客上了,欢迎访问 “http://blog.csdn.net/zxingchao2009/archive/2010/09/08/5872106.aspx”

    struts小例子 简单的计算器

    Struts是一个开源的Java EE框架,它主要用于构建和维护可扩展、模块化和易于管理的Web应用程序。这个“struts小例子 - 简单的计算器”是一个基础的示例,用于展示Struts框架如何在实际应用中工作,特别是如何处理...

    Struts2 简易文档

    这个简易文档,"Struts2.0开发指南",将引领我们深入理解Struts2的核心概念和实践方法。 Struts2是MVC(模型-视图-控制器)设计模式的一个实现,它为开发者提供了丰富的特性,包括动作类、拦截器、结果类型、插件...

    自己写的简易struts 并且用它完成简单在线考试系统

    在这个项目中,你创建了一个简易的Struts实现,并用它构建了一个简单的在线考试系统。这对于初学者来说是一个很好的实践,因为它涉及到Web开发中的多个关键概念和技术。 首先,理解Struts框架的基础是必要的。...

    struts做的简易登陆界面

    在这个"struts做的简易登陆界面"项目中,我们可以推测这是一个用于教学目的的简单登录系统,它包含了数据库连接功能,可能涉及到用户验证和会话管理。 首先,我们需要理解Struts框架的核心组件和工作原理。Struts...

    用struts1.x 开发的简易计算器

    在本文中,我们将深入探讨如何使用Struts1.x来开发一个简易计算器应用,以及在这个过程中涉及的关键概念和技术。 首先,让我们了解Struts框架的核心组件。Struts1.x的主要目标是解耦应用程序的业务逻辑、控制流程和...

Global site tag (gtag.js) - Google Analytics