为什么用struts
Struts告一段落,回顾一下,突然没感觉,究竟为什么给忘了,东西太多了…有点犯浑:),理了一下思路比较糙,只为加深印象。
不使用struts:业务逻辑和控制逻辑全部由servlet实现:既包括请求的分析又包括请求的处理:如取得表单数据—处理数据—然后转向,
//取得表单数据 String username = request.getParameter("xxx"); //调用业务逻辑 //转向相应的页面,显示出查询结果 request.setAttribute("xxxx", zzzz); //c.jsp,取出数据"xxxx" request.getRequestDispatcher("/result.jsp").forward(request, response);
进一步,可以把不同的请求放到一个servlet中,比如servlet配置用*.do匹配,拦截所有请求。分析定义比较规则的url,截取然后做出不同的处理和response
String requestURI = request.getRequestURI(); System.out.println("requestURI=" + requestURI); String path = requestURI.substring(requestURI.indexOf("/", 1), requestURI.length()); path = path.substring(0, path.indexOf(".")); System.out.println("path=" + path); Action action = null; if ("/请求1".equals(path)) { //业务处理 //request.getRequestDispatcher(forwardPath).forward(request, response); } else if ("/请求2".equals(path)) { //业务处理 //request.getRequestDispatcher(forwardPath).forward(request, response); } //... ...
当然,你可以定义多个servlet分别处理在servlet里面只做调用,但是还无法把jsp表现层和业务逻辑分开,struts可以说把问题给我们分解了
引出struts的配置原理草稿(非真实配置,这是我们假想的处理方式,我们想这样把我们的请求处理,业务逻辑调用和展现分开)可以吗?可以 Struts就是这样做的!
根据Web.xml里面的匹配规则截获请求url,和path匹配,(由struts的核心控制器Actionservlet分析),然后若必要调用用户自定义的业务逻辑控制器Action,完成后根据forward的name属性就像上面的xml草图一样,业务调用成功转向成功页面.jsp,失败转向失败失败.jsp。
这样jsp可以作为struts的表现层(V),struts负责用控制器调用业务逻辑组件,并负责控制器与视图技术(JSP、FreeMarker和Velocity等)的整合(C控制层)。
结果是: more…