首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

再问一个,业务层和MVC中Controler(控制器)的关系解决方法

2012-03-13 
再问一个,业务层和MVC中Controler(控制器)的关系本类是同一个问题的,但是在我另外的一个帖子中没有很好的

再问一个,业务层和MVC中Controler(控制器)的关系
本类是同一个问题的,但是在我另外的一个帖子中没有很好的表达出来,真是失败啊。
进入正题:
众所周知,Servlet 和 Struts中的Action是属于MVC中的C(Controler),只是一个控制器,
按说在两者之中是不应该出现业务代码的,它们只是一个控制器,只负责将视图(JSP页面)
取得的数据转发到业务层来处理,然后根据业务层的处理结果来选择相应的视图来显示,
那么在Servlet或者Action中该不该出现判断数据的代码,又如何讲数据传递到业务层呢?
光说太抽象,来点代码:

Java code
//假设这是Servlet中的一个方法,来处理用户注册请求的public void register(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {        String username = request.getParameter("username");        String password = request.getParameter("password");        String repeatPass = request.getParameter("repeatPass");                //主要下面这段代码该在什么地方        if( password == null || password.length() < 6 ){            //密码长度小于6位,不能注册            response.sendRedirect("some page");            return;        }        if( !password.equals(repeatPass)){            //两次密码不相同,不能注册            response.sendRedirect("some page");            return;        }        //还有一些验证,比如判断用户名是否已存在,等等        //这些代码写在什么地方?这里?还是BO?                UserBo bo = new UserBo();        //是这传递        bo.addUser(new User(username,password));        //还是这样传递?        bo.addUser(username,password);        //forward or redirect}




[解决办法]
1、数据验证可以放在validate,该过程在xxform.java里
2、如果是简单的业务逻辑放在action也挺方便,复杂的业务逻辑就要写些类来操作,然后在action里调用,再根据处理情况给用户显示相应的view
[解决办法]
封装数据,交给业务层进行处理。
[解决办法]
可以通过请求request啊
也可以同ActionForm获得啊
[解决办法]
业务是在model里,一般是用bean,太简单没有复用价值的放在control里也就行了,我是这样认为的
[解决办法]
Controler是完成Model与View之间交互的
可以具体去看看MVC那个图
[解决办法]
探讨
是不是简单的逻辑可以放到控制器里,复杂的逻辑一定要在业务层完成了啊?
业务层属于MVC中的哪一层?是Controler还是Model?

[解决办法]
顶楼上!
[解决办法]
11楼的换可以
[解决办法]
11 说的不错!
[解决办法]
可以通过请求request啊 
也可以同ActionForm获得啊
[解决办法]
上楼的不错!
[解决办法]
up!!!
[解决办法]

[解决办法]

[解决办法]
servlet属于控制器,而控制器的作用就是接收客户端请求,调用相应的模型处理逻辑和数据,再由控制器根据处理的结果,选择相应的JSP或HTML文件响应客户端。所以,我认为,servlet无非就是两个作用,一个是接收用户请求数据,再一个就是完成页面的跳转,而关于如上的if判断语句我觉得应该交给bo,servlet调用bo,返回一个字符串,即目标地址。
[解决办法]
两次输入的密码是否一致,可以放在页面校验。不必到servlet校验。
[解决办法]
up
------解决方案--------------------


aa
[解决办法]
学习
[解决办法]

Java code
               Entity  Database  <----------> DAO层 <------> 业务层 <------> (业务门面) <------> 控制器 <------> 视图 <------> 客户端浏览器|           |                                                                                    || DB 服务器 | <-------------------------------- 应用服务器 ------------------------------------->||           |                                                                                    |
[解决办法]
servlet作用只有两个:就是接收客户端的请求数据,再一个就是完成页面的跳转!
像你上面的例子中的那些判断,完全可以在bo中写个方法public String getUrl(String password,String repeatPass)返回要跳转的url字符串!
后面得那个方法的参数当然是userName和password,封装进User应该在bo中进行!
[解决办法]
就是一个原则,servlet只是控制转向的,业务逻辑最好能封装进bo!

[解决办法]
顶一个!!!
[解决办法]
花开如梦,风过无痕http://www.ok1616.com/ 只为心中的思念…… 遥寄一份浓浓的祝福给你
悄悄问苍穹:别来可无恙 http://www.hao1234.org/寄语白云间:祝你永平安
[解决办法]
复杂的情况放入业务层。
[解决办法]
探讨
引用:
是不是简单的逻辑可以放到控制器里,复杂的逻辑一定要在业务层完成了啊?
业务层属于MVC中的哪一层?是Controler还是Model?


我觉得又有点 形而上学 了。

MVC解决不了所有问题,如果一个系统没有界面,又哪来MVC?

现在的J2EE,分层是它的第一架构特征,
业务层和WEB层完全是独立的,在WEB可以考虑MVC模式,业务层有其自身适用的模式,
仔细看看这张图:


追问下去,…

[解决办法]
可以在ACTIONFORM处理
[解决办法]
探讨
呵呵,回复很多啊,慢慢看了。
看来我太形式化了,仔细想想三层模式和MVC倒是没有什么必然的牵连关系
我只是想写出的代码更符合规范而已,难道是太在意模式了?...

[解决办法]
我也说两句,一般只有验证的话Struts1和Struts2都有专门用来进行页面提交数据验证的类,如果是复杂的数据库处理的话,一般写个方法封装起来,servlet只是从方法的返回值进行,判断和操作。
[解决办法]
探讨
引用:

武学至高境界,无招胜有招,编程也类似吧。


感觉抓住了什么,却又说不出个所以然来....

[解决办法]
校验用actionForm,写个validate方法,
xml中设置validate属性=true
[解决办法]
设计因需而变。
[解决办法]
讨论使人明智啊
[解决办法]
视具体情况而定
凡是简单的东西别弄得复杂化

[解决办法]
你可以这样理解,除了显示层(jsp文件和一些页面相关文件)和控制层(Action类)外其它的都可以说是Model层,而Model层又可以分成业务逻辑层和持久层,感觉这些只要了解就可以了,不需要深追
[解决办法]
套用一句话:没有最好,只有最适合
能简单 明了的完成一个任务 何必这么复杂 该用啥的时候用啥就好

热点排行