再问一个,业务层和MVC中Controler(控制器)的关系
本类是同一个问题的,但是在我另外的一个帖子中没有很好的表达出来,真是失败啊。
进入正题:
众所周知,Servlet 和 Struts中的Action是属于MVC中的C(Controler),只是一个控制器,
按说在两者之中是不应该出现业务代码的,它们只是一个控制器,只负责将视图(JSP页面)
取得的数据转发到业务层来处理,然后根据业务层的处理结果来选择相应的视图来显示,
那么在Servlet或者Action中该不该出现判断数据的代码,又如何讲数据传递到业务层呢?
光说太抽象,来点代码:
//假设这是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}
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/寄语白云间:祝你永平安
[解决办法]
复杂的情况放入业务层。
[解决办法]