﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-魅力生活-文章分类-JAVA编程</title><link>http://www.blogjava.net/interfang/category/2120.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:48:35 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:48:35 GMT</pubDate><ttl>60</ttl><item><title>MVC</title><link>http://www.blogjava.net/interfang/articles/7600.html</link><dc:creator>cutelife</dc:creator><author>cutelife</author><pubDate>Wed, 13 Jul 2005 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/interfang/articles/7600.html</guid><wfw:comment>http://www.blogjava.net/interfang/comments/7600.html</wfw:comment><comments>http://www.blogjava.net/interfang/articles/7600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/interfang/comments/commentRss/7600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/interfang/services/trackbacks/7600.html</trackback:ping><description><![CDATA[接下来的这个wap项目设计，准备全面以mvc模式设计，数据持久，xml配置显示。不过先要把前面的数据统计做个阶段性的收尾。<BR>下班前设计成型后把整体设计放上来。<img src ="http://www.blogjava.net/interfang/aggbug/7600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/interfang/" target="_blank">cutelife</a> 2005-07-13 13:07 <a href="http://www.blogjava.net/interfang/articles/7600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用实例学习MVC模式 </title><link>http://www.blogjava.net/interfang/articles/7597.html</link><dc:creator>cutelife</dc:creator><author>cutelife</author><pubDate>Wed, 13 Jul 2005 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/interfang/articles/7597.html</guid><wfw:comment>http://www.blogjava.net/interfang/comments/7597.html</wfw:comment><comments>http://www.blogjava.net/interfang/articles/7597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/interfang/comments/commentRss/7597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/interfang/services/trackbacks/7597.html</trackback:ping><description><![CDATA[<DT>&nbsp;
<DD class=ArticleInfo>作者： <A id=HyperAuthor href="http://kb.csdn.net/ArticleAuthor.aspx?author="></A>∣来源：<A id=HyFromWhere href="http://www.javaresearch.org/article/" target=_blank>http://www.javaresearch.org/</A>∣<A id=HyHistoryUrl title=http://www.javaresearch.org/article/showarticle.jsp?column=31&amp;thread=11588 href="http://www.javaresearch.org/article/showarticle.jsp?column=31&amp;thread=11588" target=_blank>原文地址</A>∣<SPAN id=LblUpdateDate>2003-12-30</SPAN> 
<DD class=ArticleContent>
<DIV class=HideDiv style="OVERFLOW: hidden; WIDTH: 100%"><SPAN id=LblContent>1.1　MVC模式<BR><BR>MVC是三个单词的缩写，这三个单词分别为：模型（Model）、视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。下面以J2EE开发进行介绍。<BR>Model层实现系统中的业务逻辑，通常可以用JavaBean或EJB来实现。<BR>View层用于与用户的交互，通常用JSP来实现。<BR>Controller层是Model与View之间沟通的桥梁，它可以分派用户的请求并选择恰当的视图以用于显示，同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。<BR>现在来看一个例子，看MVC模式是怎样工作的。<BR>1.1.1　一个实例<BR>例1-a：<BR>&lt;servlet&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;Controller&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;nepalon.simplestruts.Controller&lt;/servlet-class&gt;<BR>&lt;/servlet&gt;&nbsp;&nbsp;<BR>&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;Controller&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/simplestruts/servlet/control/Controller&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>上面是web.xml文件的片段，在这里定义了一个servlet用于处理请求。<BR>例1-b（Test.jsp文件）：<BR>&lt;html&gt;<BR>&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=gb2312"%&gt;&nbsp;<BR>&lt;head&gt;<BR>&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<BR>&lt;title&gt;实例首页&lt;/title&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;&nbsp;&nbsp;<BR>&lt;table&nbsp;border="0"&nbsp;width="100%"&gt;<BR>&nbsp;&nbsp;&lt;tr&gt;&nbsp;<BR>&lt;td&gt;&lt;div&nbsp;align="center"&gt;<BR>&lt;a&nbsp;href="/simplestruts/servlet/control/Controller?command=showarticle"&gt;显示文章&lt;/a&gt;<BR>&lt;/div&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>在这个JSP中，我们并没有直接去调用JSP或JavaBean，而是把请求分送到Servlet中。下面，我们来看看Servlet的代码。<BR>例1-c：<BR>package&nbsp;nepalon.simplestruts;<BR>/**<BR>&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;MVC&nbsp;framework&lt;/p&gt;<BR>&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;Controller&lt;p&gt;<BR>&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;R2003&lt;/p&gt;<BR>&nbsp;*&nbsp;@author&nbsp;Nepalon<BR>&nbsp;*&nbsp;@version&nbsp;1.0<BR>&nbsp;*/<BR><BR>import&nbsp;javax.servlet.*;<BR>import&nbsp;javax.servlet.http.*;<BR>import&nbsp;java.io.*;<BR>import&nbsp;java.util.*;<BR><BR><BR>public&nbsp;class&nbsp;Controller&nbsp;extends&nbsp;HttpServlet&nbsp;&nbsp;<BR>{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init(ServletConfig&nbsp;config)&nbsp;throws&nbsp;ServletException&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.init(config);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;destroy()&nbsp;{}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;用于处理HTTP的GET和POST请求的函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request&nbsp;servlet&nbsp;request<BR>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;response&nbsp;servlet&nbsp;response<BR>&nbsp;&nbsp;&nbsp;&nbsp;*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;processRequest(HttpServletRequest&nbsp;request,HttpServletResponse&nbsp;response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;java.io.IOException&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//代码（1）通过if来实现对不同请求的分发&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(request.getParameter("command").equals("showarticle"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArticleCommand&nbsp;command&nbsp;=&nbsp;new&nbsp;ArticleCommand();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;=&nbsp;command.&nbsp;getAllArticle&nbsp;(request,&nbsp;response);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//代码（2）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatch(request,&nbsp;response,&nbsp;next);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;java.io.IOException&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processRequest(request,&nbsp;response);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;java.io.IOException&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processRequest(request,&nbsp;response);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;一个实现了分发者模式的函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request&nbsp;servlet&nbsp;request<BR>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;response&nbsp;servlet&nbsp;response<BR>&nbsp;&nbsp;&nbsp;&nbsp;*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;dispatch(HttpServletRequest&nbsp;request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;page)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;&nbsp;javax.servlet.ServletException,&nbsp;java.io.IOException&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher&nbsp;dispatcher&nbsp;=<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getServletContext().getRequestDispatcher(page);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatcher.forward(request,&nbsp;response);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>在Servlet中并没有直接处理所提交的请求，而是把请求的处理推后到ArticleCommand类中，通过ArticleCommand对象来执行，如代码（1）。在处理完请求后，转到相应的页面中，如代码（2）。下面，我们看一下ArticleCommand类的代码。<BR>例1-d：<BR>package&nbsp;nepalon.simplestruts;<BR><BR>/**<BR>&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;MVC&nbsp;framework&lt;/p&gt;<BR>&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;文章业务类&lt;p&gt;<BR>&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;R2003&lt;/p&gt;<BR>&nbsp;*&nbsp;@author&nbsp;Nepalon<BR>&nbsp;*&nbsp;@version&nbsp;1.0<BR>&nbsp;*/<BR><BR>import&nbsp;java.util.*;<BR>import&nbsp;javax.servlet.*;<BR>import&nbsp;java.io.*;<BR>import&nbsp;java.lang.*;<BR>import&nbsp;java.sql.*;<BR>import&nbsp;javax.sql.*;<BR><BR>public&nbsp;class&nbsp;Contribute<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Contribute()&nbsp;{}<BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getAllArticle(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;javax.servlet.ServletException,&nbsp;java.io.IOException<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn=null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;con_user&nbsp;=&nbsp;"example1";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;con_password&nbsp;=&nbsp;"example1";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;con_dburl&nbsp;=&nbsp;"jdbc:oracle:thin:@localhost:iasdb";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;con_driver&nbsp;=&nbsp;"oracle.jdbc.driver.OracleDriver";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;pstmt=null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rsComment=null;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vectorComment&nbsp;=&nbsp;new&nbsp;Vector();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;selectSQL=&nbsp;"SELECT&nbsp;content,&nbsp;time&nbsp;FROM&nbsp;article&nbsp;ORDER&nbsp;BY&nbsp;time&nbsp;DESC";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DriverManager.registerDriver(new&nbsp;oracle.jdbc.driver.OracleDriver());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(con_driver);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(con_dburl,con_user,con_password);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pstmt=conn.prepareStatement(selectSQL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsComment=pstmt.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(rsComment.next())&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommentItem&nbsp;commentItem&nbsp;=&nbsp;new&nbsp;CommentItem();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commentItem.setContent(rsComment.getString(1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commentItem.setTime(rsComment.getDate(2));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vectorComment.add(commentItem);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vectorComment.trimToSize();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;e){//做相应的处理}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//代码（1）保存处理结果并返回跳转页面<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute("vectorComment&nbsp;",&nbsp;vectorComment);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"/simplestruts/showallarticle.jsp";<BR>}<BR>……<BR>public&nbsp;String&nbsp;getNewArticle(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;javax.servlet.ServletException,&nbsp;java.io.IOException<BR>&nbsp;&nbsp;&nbsp;&nbsp;{…}<BR>}<BR>在这个类中进行的是取得所有文章的业务，最后返回如果成功执行操作后要跳转到的页面。当然，这个类中可能还有别的业务的相应函数，读者可自己实现。下面看一下要跳转到的页面的代码。<BR>例1-e（showallarticle.jsp文件）：<BR>&lt;html&gt;<BR>&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=gb2312"%&gt;&nbsp;<BR>&lt;%@&nbsp;page&nbsp;import="java.util.*,&nbsp;java.lang.*"%&gt;<BR>&lt;jsp:useBean&nbsp;id="vectorComment"&nbsp;type="java.util.Vector"&nbsp;scope="request"/&gt;<BR>&lt;head&gt;<BR>&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<BR>&lt;title&gt;显示文章&lt;/title&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;&nbsp;&nbsp;<BR>&lt;table&nbsp;border="0"&nbsp;width="100%"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&lt;tr&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;发表时间&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;文章内容&lt;/td&gt;<BR>&nbsp;&nbsp;&lt;/tr&gt;<BR>&lt;%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(vectorComment!=null&nbsp;&amp;&amp;&nbsp;vectorComment.size()&gt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;counter=vectorComment.size();&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommentItem&nbsp;commentlist&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;i&lt;counter;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commentlist=null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commentlist=(CommentItem)(vectorComment.get(i));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>%&gt;&nbsp;<BR>&nbsp;&nbsp;&lt;tr&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%=commentlist.getCmTime()%&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%=commentlist.getCmContent()%&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&lt;/tr&gt;<BR>&lt;%<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>%&gt;<BR>&lt;/table&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>在这个JSP中我们要做的只是取得结果并显示，没有涉及到相应的业务逻辑。<BR><BR>1.1.2　实例分析<BR>首先，我们看一下这个例子的序列图<BR>&nbsp;<IMG src="http://www.javaresearch.org/members/nepalon/images/seq1_1_2a.gif" width=400><BR>图1.1.2-1<BR>1)&nbsp;&nbsp;&nbsp;&nbsp;首先在Veiw层的test.jsp中提交一个请求/simplestruts/servlet/control/Controller?command=showarticle；<BR>2)&nbsp;&nbsp;&nbsp;&nbsp;在Controller层的Controller对象中，根据请求的类型来调用相应的业务处理类，在这里，command值为showarticle的请求的业务处理类为ArticleCommand类，所以调用该类的对象的相应函数；<BR>3)&nbsp;&nbsp;&nbsp;&nbsp;在Model层的ArticleCommand类主要实现请求的取得所有文章的业务功能，把结果保存在request中，并返回跳转页面作为返回值；<BR>4)&nbsp;&nbsp;&nbsp;&nbsp;回到Controller层的Controller对象，根据上一步骤的返回值进行页面转发。<BR>5)&nbsp;&nbsp;&nbsp;&nbsp;转发到View层的showallarticle.jsp页面，这个页面从request中取得结果并进行显示。在这个JSP中虽然也有Java代码，但这些代码只是用于显示结果，并没有涉及到任何业务逻辑。<BR><BR>1.1.3　MVC模式的好处<BR>本来这样一个简单的功能我们只需要2个JSP文件就能实现了，为什么要这么麻烦把它分到几个类中去实现呢？现在就来看一下MVC模式带来的好处。<BR>1)&nbsp;&nbsp;&nbsp;&nbsp;各施其职，互不干涉<BR>在MVC模式中，三个层各施其职，所以如果一旦哪一层的需求发生了变化，就只需要更改相应的层中的代码而不会影响到其它层中的代码。假如业务发生了变化，如在取文章时可能webmaster把一些文章作了无效标志，不能直接把所有文章取出来，只能取出有效的文章，这时业务就发生了改变。再设想一下，如果这个业务逻辑在100个页面中都要用到，那么MVC模式就体现了它的灵活性。我们可以不更改任何JSP，只要更改model层中的相应类中的SQL语句即可。<BR>2)&nbsp;&nbsp;&nbsp;&nbsp;有利于开发中的分工<BR>在MVC模式中，由于按层把系统开，那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP，对业务熟悉的开发人员可开发业务层，而其它开发人员可开发控制层。<BR>3)&nbsp;&nbsp;&nbsp;&nbsp;有利于组件的重用<BR>分层后更有利于组件的重用。如控制层可独立成一个能用的组件，视力层也可做成通用的操作界面。 <BR></SPAN></DIV></DD><img src ="http://www.blogjava.net/interfang/aggbug/7597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/interfang/" target="_blank">cutelife</a> 2005-07-13 11:47 <a href="http://www.blogjava.net/interfang/articles/7597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>