Struts与策略模式那点事
来源:互联网 发布:网络电视卫星 编辑:程序博客网 时间:2024/05/18 02:12
Struts1无疑是一个灰常经典的MVC框架,在Struts有前端控制器和业务控制器的概念。那么这两个控制器的本质又是什么呢?让我来带你一步步走进它的世界。
前端控制器ActionServlet的职责:
1、通过对访问路径的截取
2、根据截取的路径,实例化相应的业务控制器
业务控制器Action的职责:
1、获取参数
2、调用业务逻辑
3、完成转向
下面,给大家看一个比较简单的struts的MVC框架的实现
Action:
public interface Action {public String execute(HttpServletRequest request, HttpServletResponse response)throws Exception;}public class AddUserAction implements Action {public String execute(HttpServletRequest request,HttpServletResponse response) throws Exception {String username = request.getParameter("username");//调用业务逻辑UserManager userManager = new UserManager();userManager.add(username);return "/add_success.jsp"; //转向路径可以通过配置文件读取}}
ActionServlet:
public class ActionServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//截取访问的URIString requestURI = request.getRequestURI();//对URI进行截取,例如localhost:8080//test/addUser.do,截取后就是/addUserString path = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));Action action = null;if ("//addUser".equals(path)) {action = new AddUserAction();}else {throw new RuntimeException("请求失败");}String forward = null;try {forward = action.execute(request, response);} catch (Exception e) {e.printStackTrace();}request.getRequestDispatcher(forward).forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
struts正是通过一个struts-config.xml来消除了ActionServlet中的if...else...语句,使得ActionServlet更加具有通用性,从而开发人员只需要编写Action,然后配置到xml文件中即可。
静下心来想,实质上不就是一个策略模式的调用么?回头之前做过的系统,要想系统变的灵活,其实就是一个又一个策略模式的应用。策略加反射的结合通常是一个框架的核心组成。
至此,对于策略模式的理解便不得不深入一下了。
最最开始接触策略模式的时候,是这样理解的:对于一件事的不同做法。而这一件事当初的理解是具体的事情,例如付款可以由用信用卡,现金,支票等。而对于付款和吃饭这两件事,就不会想到这是一件事。其实这只是粒度大小的不同而已。
如果提升到这都是人的一个活动层次上呢?二者是不是就可以说是一件事,不同的处理方法了呢?
struts就是这样做的,把所有的请求抽取一个接口Action,需要修改的方法为execute(),这些就是Struts的核心思想,其他的Struts核心对象在下篇博客中将会一一阐述。
使用框架会影响程序的效率,但是以现在硬件的水平,这些效率问题不再是主要问题,规范性开发被奉为最高纲领。软件开发从最初最少代码到现在规范性开发,这不得不赞叹计算机发展的速度。
- Struts与策略模式那点事
- 设计模式那点事--策略模式
- Netty那点事(四)Netty与Reactor模式
- 关于模式的那点事
- 《设计模式那点事》 - 书摘精要
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- iOS开发:设计模式那点事
- Activity启动模式的那点事
- 【转】Netty那点事(四)Netty与Reactor模式
- 【转】Netty那点事(四)Netty与Reactor模式
- 与CPU有关的那点事
- VS2005 与虚拟机的那点事
- php与mysql通讯那点事
- Sql Server 随机抽取数据效率优化
- 字符串连接的不同实现(针对初学者)
- java drawlines()方法
- android camera拍照/录像后查看图片/视频并删除所有内容后自动回到camera预览界面
- 日志20120104~0720
- Struts与策略模式那点事
- Draw2d 温度计例子
- 开发快车控件DXperienceUniversal-10.2.3安装方法
- android 图库中对非mp4格式的视频去掉"修剪"功能选项
- 日志20120723~1027
- 如何成为Android高手
- ant的Build.xml文件解析
- 为什么你打工10年还是穷,看看吧,对你有好处
- 浅谈JAVA中的空值与null的判断