Struts是如何实现MVC的
2013-09-06 21:52
375 查看
上篇文章说到用servlet实现的一些弊端,下面,我们就解决一下这个问题,我们用struts来实现一个登陆的实例。
首先,了解一下struts与MVC的一一对应关系:
Model:The Model portion of an MVC-based system can be often bedivided into two major subsystems -- the internal state of the system and theactions that can be taken to change
that state. (from apache softwarefoundation)
Model是由Action和ActionForm等构成。Action对象封装了具体的处理逻辑,调用业务逻辑模块,可以用JavaBean和EJB等组件技术来处理数据库的访问,并且把响应提交到合适的View组件中。
View:The View portion of a Struts-based application is mostoften constructed using JavaServer Pages (JSP) technology and PresentationComponents. (from apache software foundation)
View部分是通过JSP技术实现的。Struts还提供了自定义的标记库,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装。
Controller: ActionServlet and ActionMapping
Controller功能由ActionServlet和ActionMapping对象构成,核心是ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
用一个图简单说明一下struts:
同时,这里是一般struts的调用流程:
我们根据这个流程来实现一下用户登录功能:
在这里,有一个非常重要的配置就是struts-config
LoginAction类:
LoginActionForm类,注意表单的属性必须和ActionForm中的get和set的属性一致
同时,看一下我们的表单:
这样,基本上就完成了,而且解决了之前遗留的问题,但是我们仅仅做出来是不够的,我们需要明白他的大概工作原理,下面用一张时序图来表述一下利用struts的大概调用关系
所以,当我们一步步调用的时候,就发现我们之前servlet中写的其实就是一个简易的struts,他把我们认为很繁琐的东西进行了抽象与封装,但是在使用struts框架时,因为他必须符合多种情况,所以让我们的系统做了很多对当前功能来说无用的判断,所以,sturts并不能提高程序运行的效率,相反,它反而降低了效率,但是,它使开发效率和维护效率大大增加了,这也就是使用框架的好处之一。
首先,了解一下struts与MVC的一一对应关系:
Model:The Model portion of an MVC-based system can be often bedivided into two major subsystems -- the internal state of the system and theactions that can be taken to change
that state. (from apache softwarefoundation)
Model是由Action和ActionForm等构成。Action对象封装了具体的处理逻辑,调用业务逻辑模块,可以用JavaBean和EJB等组件技术来处理数据库的访问,并且把响应提交到合适的View组件中。
View:The View portion of a Struts-based application is mostoften constructed using JavaServer Pages (JSP) technology and PresentationComponents. (from apache software foundation)
View部分是通过JSP技术实现的。Struts还提供了自定义的标记库,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装。
Controller: ActionServlet and ActionMapping
Controller功能由ActionServlet和ActionMapping对象构成,核心是ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
用一个图简单说明一下struts:
同时,这里是一般struts的调用流程:
我们根据这个流程来实现一下用户登录功能:
在这里,有一个非常重要的配置就是struts-config
<form-beans> <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/> </form-beans> <action-mappings> <action path="/login" type="com.bjpowernode.struts.LoginAction" name="loginForm" scope="request" > <forward name="success" path="/login_success.jsp"></forward> <forward name="error" path="/login_error.jsp"></forward> </action> </action-mappings> Web的配置: <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
LoginAction类:
package com.bjpowernode.struts; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登陆Action * 负责取得表单数据、调用业务逻辑、返回转向信息 * @author laner * */ public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginActionForm laf = (LoginActionForm)form; String username = laf.getUsername(); String password = laf.getPassword(); if("admin".equals(username) && "admin".equals(password)){ //登陆成功 return mapping.findForward("success"); }else{ //登陆失败 return mapping.findForward("error"); } //return super.execute(mapping, form, request, response); } }
LoginActionForm类,注意表单的属性必须和ActionForm中的get和set的属性一致
package com.bjpowernode.struts; import org.apache.struts.action.ActionForm; /* * 登陆ActionForm,负责表单数据收集 * 表单的属性必须和ActionForm中的get和set的属性一致 * */ public class LoginActionForm extends ActionForm { public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String username; private String password; }
同时,看一下我们的表单:
<form action="login.do" method = "post"> 用户名:<input type = "text" name ="username"><br> 密 码:<input type ="text" name="password"><br> <input type ="submit" value="登陆"><br> </form>
这样,基本上就完成了,而且解决了之前遗留的问题,但是我们仅仅做出来是不够的,我们需要明白他的大概工作原理,下面用一张时序图来表述一下利用struts的大概调用关系
所以,当我们一步步调用的时候,就发现我们之前servlet中写的其实就是一个简易的struts,他把我们认为很繁琐的东西进行了抽象与封装,但是在使用struts框架时,因为他必须符合多种情况,所以让我们的系统做了很多对当前功能来说无用的判断,所以,sturts并不能提高程序运行的效率,相反,它反而降低了效率,但是,它使开发效率和维护效率大大增加了,这也就是使用框架的好处之一。
相关文章推荐
- SSH框架-Struts如何实现MVC
- SSH之struts—如何实现MVC
- 概述struts,以及struts如何实现MVC架构的
- Struts是如何实现MVC的
- 概述struts,以及struts如何实现MVC架构的?
- Struts如何实现Model 2, MVC
- Struts如何实现MVC架构的
- (基础篇)struts是mvc的实现,mvc是什么?struts是如何实现的?
- struts如何实现mvc
- struts如何实现MVC,每一个模块都…
- Struts是如何实现MVC的
- Struts是如何实现MVC的
- Struts是如何实现MVC的
- MVC模式与如何实现struts MVC模式
- Struts,MVC 的一种开放源码实现
- Studs MVC Framework-----PHP的Struts1.X实现
- 如何实现servlet和struts的友好共存
- MVC 的各个部分都有那些技术来实现?如何实现?
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- Servlet是如何实现MVC的