你说的应该是front controller吧,如果觉得太胖,就分几个瘦的吧,不过都是做做分发之类的事,还是瞒痛快的!

解决方案 »

  1.   

    回來了﹐謝謝hangzhoufeihu的回應﹐不過能不能詳細一點。談談你做JSP+Servlet+JavaBean實現MVC的結構是什麼樣的好嗎?
    我這裡再把問題說清楚一點﹐這裡有個圖表示request的流:HTML FORM ---(送請求到)---> Controller Servlet ---(提交)---> Handler* 問題1: 這裡handler是什麼東西﹐是個JavaBean嗎? 是不是Business Object(企業對象)? 是不是負責處理Business Logic(企業邏輯)? * 問題2: Handler怎麼訪問數據庫﹐訪問數據庫的操作就放在Handler裡嗎? 還是再通過一個專門訪問數據庫的層? 那麼這個層是不是又是一個JavaBean?* 問題3: 諸位高手能不能跟我說說MVC中你的數據庫訪問放在哪裡﹐我已經聽說過很多種不同的放法﹐有的放在Bean裡﹐有的放在一個Singleton的Class裡﹐哪種方法是最好的?
    MVC說起來容易﹐實現起來卻有得費腦筋的﹐何況我還是剛入此道。高手們﹐幫我一把吧。回答精彩一定給分!
      

  2.   

    当客户端请求的时候,control一般来说完成两个功能,一个是指定要执行的bean,在bean里面完成你的业务逻辑,一个是要指定你下一个要显示的页面,总之就是担任一个功能分发的作用,我是这么理解的
      

  3.   

    我们的做法是Controller Servlet根据请求的不同参数调用service servlet (实现Business Logic的服务),service通过EJB访问数据库(当然也可以用javabean直接访问,但是访问数据库都应该抽离单独的层),service根据处理结果,返回不同的参数回Controller ,Controller再根据参数进行JSP的流转
      

  4.   

    謝謝回應。zhaoxichao你們的做法是不是這樣的: HTML FORM ---> Controller Servlet ---> Service Servlet (Business Object) ---> Database Access Layer (a EJB to access database)Database Access Layer ---> Service Servlet (Business Object) ---> Controller Servlet ---> JSP1. Controller Servlet接到request﹐再把它們分發到相應的Service Servlet(也就是相當于Business Object﹐處理Business Logic)﹐2. Service Servlet通過EJB或一個專門訪問數據庫的Class的Instance來操作數據庫﹐3. Service Servlet把返回的結果"request.setAttribute(...)"保存起來,4. Controller Servlet通過"request.getAttribute(...)"得到Service Servlet的返回結果﹐5. Controller Servlet根據返回的結果forward到不同的JSP
    是不是這樣的一個流程? 
    Service Servlet是不是如我上面所說的這樣來返回結果呢(比較懷疑)?
    Service Servlet可不可以直接用Bean來代替﹐就象teddy_huang說的那樣"在Bean裡面完成你的業務邏輯(Business Logic)"?
      

  5.   

    基本上是这样,但可以通过xml来定义返回结果,也就是说在xml中定义来进行JSP的流转。比如
    <Forwards>
      <Forward>
        <ForwardName>A</ForwardName>
          <ForwardURL>a.jsp</ForwardURL>
      </Forward>
      <Forward>
        <ForwardName>B</ForwardName>
          <ForwardURL>B</ForwardURL>
      </Forward>
    </Forwards>Service Servlet是可以直接用Bean來代替,破坏了程序结构
      

  6.   

    cloud79: "Service Servlet是可以直接用Bean來代替,破坏了程序结构"為什麼這麼說呢?
      

  7.   

    你可以看一下STRUTS的实现,是个标准的MVC2的实现.
      

  8.   

    liankun(JeffLian):
    "你可以看一下STRUTS的实现,是个标准的MVC2的实现."能不能不涉及struts﹐我學MVC沒多久﹐不想一下子引來太多技術。能不能就圍繞JSP+Servlet+JavaBean的MVC來談?
      

  9.   

    1. Controller Servlet接到request﹐再把它們分發到相應的Service Servlet(也就是相當于Business Object﹐處理Business Logic)﹐2. Service Servlet通過EJB或一個專門訪問數據庫的Class的Instance來操作數據庫﹐3. Service Servlet把返回的結果"request.setAttribute(...)"保存起來,4. Controller Servlet通過"request.getAttribute(...)"得到Service Servlet的返回結果﹐5. Controller Servlet根據返回的結果forward到不同的JSP
    你的结果不一定用request来存储,而且很少用request,如果返回的结果对象较大时就不方便,可以直接在jsp中得到bean的属性值,或者用session来存储也可以,我以前就用过直接用session处理结果,效果也还可以,方便,就是把你的结果set到session中去,然后在jsp页面中get显示
      

  10.   

    Service Servlet可以直接用Bean來代替,但是Controller根据请求参数调用相应的Bean实现比较困难,也就是比较混乱,用servlet的话,用forward比较方面
    处理的结果集和下一个页面的参数"target"分开
    target放到request的attribute中,结果集可以放到request也可以放到session中,但是session中应该做remove。我们的做法是如果结果集传到一个jsp处理完后,不再用了,在jsp请求到Controller的时候,带一个removeattribute的参数,由Controller进行remove
      

  11.   

    我们现在是这样做的:
    client ---> Controller Servlet(分发,xml定义或servlet实现) ---> Service Servlet (具体的实现是请求business component(ejb或者是javabean总子应该只是一个黑盒子))
      

  12.   

    session可以在jsp显示完数据的最后remove
      

  13.   

    struts没有太多技术,你要学习的是它的流控制原理,就是典型的command-controller模式。
    另外它也可以定义多个controller的。只要添加相关的servlet mapping就行了。
    controller由于不执行业务逻辑,所以应该不会有太大的瓶颈
      

  14.   

    Controller曾可以用Servlet Filter来过滤请求,用多个过滤器过滤不同请求当可减轻controller的压力,我想~~~
      

  15.   

    "Service Servlet可以直接用Bean來代替,但是Controller根据请求参数调用相应的Bean实现比较困难,也就是比较混乱,用servlet的话,用forward比较方面处理的结果集和下一个页面的参数"target"分开
    target放到request的attribute中,结果集可以放到request也可以放到session中,但是session中应该做remove。我们的做法是如果结果集传到一个jsp处理完后,不再用了,在jsp请求到Controller的时候,带一个removeattribute的参数,由Controller进行remove"結果集也可以放在request裡啊﹐用request.setAttribute(...)﹐這樣當這個request結束時﹐結果集也消失了﹐不用象session那樣要手工remove結果集。
      

  16.   

    有时候结果集可能不光在一次jsp流转有效,需要保存在session。
    这样的话可能会出现有的结果集放在request有的session中,设计时为了保持一致,最好采用其中的一种