http://hi.baidu.com/nanting520/blog/item/a48d5e8892935291a5c2721e.html
.1 MVC模式
MVC是三个单词的缩写,这三个单词分别为:模型(Model)、视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。下面以J2EE开发进行介绍。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。View层用于与用户的交互,通常用JSP来实现。Controller 层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操 作。现在来看一个例子,看MVC模式是怎样工作的。
1.1.1 一个实例
例1-a:
上面是web.xml文件的片段,在这里定义了一个servlet用于处理请求。
例1-b(Test.jsp文件):
在这个JSP中,我们并没有直接去调用JSP或JavaBean,而是把请求分送到Servlet中。下面,我们来看看Servlet的代码。
例1-c:
在Servlet中并没有直接处理所提交的请求,而是把请求的处理推后到ArticleCommand类中,通过ArticleCommand对象来执 行,如代码(1)。在处理完请求后,转到相应的页面中,如代码(2)。下面,我们看一下ArticleCommand类的代码。
例1-d:
在这个类中进行的是取得所有文章的业务,最后返回如果成功执行操作后要跳转到的页面。当然,这个类中可能还有别的业务的相应函数,读者可自己实现。下面看一下要跳转到的页面的代码。
例1-e(showallarticle.jsp文件):
在这个JSP中我们要做的只是取得结果并显示,没有涉及到相应的业务逻辑。
实例分析
首先,我们看一下这个例子的序列图
1) 首先在Veiw层的test.jsp中提交一个请求/simplestruts/servlet/control/Controller?command=showarticle;
2) 在Controller层的Controller对象中,根据请求的类型来调用相应的业务处理类,在这里,command值为showarticle的请求的业务处理类为ArticleCommand类,所以调用该类的对象的相应函数;
3) 在Model层的ArticleCommand类主要实现请求的取得所有文章的业务功能,把结果保存在request中,并返回跳转页面作为返回值;
4) 回到Controller层的Controller对象,根据上一步骤的返回值进行页面转发。
5) 转发到View层的showallarticle.jsp页面,这个页面从request中取得结果并进行显示。在这个JSP中虽然也有Java代码,但这些代码只是用于显示结果,并没有涉及到任何业务逻辑。
MVC模式的好处
本来这样一个简单的功能我们只需要2个JSP文件就能实现了,为什么要这么麻烦把它分到几个类中去实现呢?现在就来看一下MVC模式带来的好处。
1) 各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。假如业务发生了变化, 如在取文章时可能webmaster把一些文章作了无效标志,不能直接把所有文章取出来,只能取出有效的文章,这时业务就发生了改变。再设想一下,如果这 个业务逻辑在100个页面中都要用到,那么MVC模式就体现了它的灵活性。我们可以不更改任何JSP,只要更改model层中的相应类中的SQL语句即 可。
2) 有利于开发中的分工
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3) 有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视力层也可做成通用的操作界面。
这是前人总结出来的
bean的种类分三种:
第一种:负责操作数据库,只有一个DBOperate.java,里面包括加载驱动、建立链接等,对外提供两个方法ResultSet executeQuery(String sql)和boolean executeUpdate(String sql);
第二种:描述数据结构的bean,基本上是每个jsp页面/数据库表一个bean,其属性都是表单/数据库表中的字段,方法全是set(),get(), 如对于用户注册,可以写一个UserInfo.java,属性包括user_name,user_id等,方法包括 getUserName(),setUserName,getUserID(),setUserID()等
第三种:负责控制的bean,应该是一个对象一个bean,如对于用户你可以建立一个User.java,里面全是方法,如boolean addUser(UserInfo user_info),boolean deleteUser(int user_id),UserInfo queryUser(int user_id)等
我自己实践了一下,觉得第二第三也可以合在一起
只是在进行update和delete的时候觉得不是很灵活,不知如何设计update()和delete()方法,以灵活处理各种条件限制
update table set column1 = ?,......where columnn=?
delete from table where .............
大家是怎么实现的,请指教
你说的前人总结出来的很正确!!
第一个bean成为工具类,提供访问数据库接口,这个类一般要通过连接池来运行
第二种类对应每个表的记录,就是所谓的EntityBean,只保存数据,不处理。只包含set,get方法
第三种类就是SessionBean,包含处理EntityBean的方法,每个EntityBean至少对应一个SessionBean
.1 MVC模式
MVC是三个单词的缩写,这三个单词分别为:模型(Model)、视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。下面以J2EE开发进行介绍。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。View层用于与用户的交互,通常用JSP来实现。Controller 层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操 作。现在来看一个例子,看MVC模式是怎样工作的。
1.1.1 一个实例
例1-a:
<servlet> |
上面是web.xml文件的片段,在这里定义了一个servlet用于处理请求。
例1-b(Test.jsp文件):
<html> |
在这个JSP中,我们并没有直接去调用JSP或JavaBean,而是把请求分送到Servlet中。下面,我们来看看Servlet的代码。
例1-c:
package nepalon.simplestruts; |
在Servlet中并没有直接处理所提交的请求,而是把请求的处理推后到ArticleCommand类中,通过ArticleCommand对象来执 行,如代码(1)。在处理完请求后,转到相应的页面中,如代码(2)。下面,我们看一下ArticleCommand类的代码。
例1-d:
package nepalon.simplestruts; |
在这个类中进行的是取得所有文章的业务,最后返回如果成功执行操作后要跳转到的页面。当然,这个类中可能还有别的业务的相应函数,读者可自己实现。下面看一下要跳转到的页面的代码。
例1-e(showallarticle.jsp文件):
<html> |
在这个JSP中我们要做的只是取得结果并显示,没有涉及到相应的业务逻辑。
实例分析
首先,我们看一下这个例子的序列图
![](http://tech.ccidnet.com/col/attachment/2004/6/299609.gif)
1) 首先在Veiw层的test.jsp中提交一个请求/simplestruts/servlet/control/Controller?command=showarticle;
2) 在Controller层的Controller对象中,根据请求的类型来调用相应的业务处理类,在这里,command值为showarticle的请求的业务处理类为ArticleCommand类,所以调用该类的对象的相应函数;
3) 在Model层的ArticleCommand类主要实现请求的取得所有文章的业务功能,把结果保存在request中,并返回跳转页面作为返回值;
4) 回到Controller层的Controller对象,根据上一步骤的返回值进行页面转发。
5) 转发到View层的showallarticle.jsp页面,这个页面从request中取得结果并进行显示。在这个JSP中虽然也有Java代码,但这些代码只是用于显示结果,并没有涉及到任何业务逻辑。
MVC模式的好处
本来这样一个简单的功能我们只需要2个JSP文件就能实现了,为什么要这么麻烦把它分到几个类中去实现呢?现在就来看一下MVC模式带来的好处。
1) 各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。假如业务发生了变化, 如在取文章时可能webmaster把一些文章作了无效标志,不能直接把所有文章取出来,只能取出有效的文章,这时业务就发生了改变。再设想一下,如果这 个业务逻辑在100个页面中都要用到,那么MVC模式就体现了它的灵活性。我们可以不更改任何JSP,只要更改model层中的相应类中的SQL语句即 可。
2) 有利于开发中的分工
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3) 有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视力层也可做成通用的操作界面。
这是前人总结出来的
bean的种类分三种:
第一种:负责操作数据库,只有一个DBOperate.java,里面包括加载驱动、建立链接等,对外提供两个方法ResultSet executeQuery(String sql)和boolean executeUpdate(String sql);
第二种:描述数据结构的bean,基本上是每个jsp页面/数据库表一个bean,其属性都是表单/数据库表中的字段,方法全是set(),get(), 如对于用户注册,可以写一个UserInfo.java,属性包括user_name,user_id等,方法包括 getUserName(),setUserName,getUserID(),setUserID()等
第三种:负责控制的bean,应该是一个对象一个bean,如对于用户你可以建立一个User.java,里面全是方法,如boolean addUser(UserInfo user_info),boolean deleteUser(int user_id),UserInfo queryUser(int user_id)等
我自己实践了一下,觉得第二第三也可以合在一起
只是在进行update和delete的时候觉得不是很灵活,不知如何设计update()和delete()方法,以灵活处理各种条件限制
update table set column1 = ?,......where columnn=?
delete from table where .............
大家是怎么实现的,请指教
你说的前人总结出来的很正确!!
第一个bean成为工具类,提供访问数据库接口,这个类一般要通过连接池来运行
第二种类对应每个表的记录,就是所谓的EntityBean,只保存数据,不处理。只包含set,get方法
第三种类就是SessionBean,包含处理EntityBean的方法,每个EntityBean至少对应一个SessionBean