Struts是如何实现MVC的

上篇文章说到用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)

View:The View portion of a Struts-based application is mostoften constructed using JavaServer Pages (JSP) technology and PresentationComponents. (from apache software foundation)

Controller: ActionServlet and ActionMapping

用一个图简单说明一下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的大概调用关系

有时我们选择改变,并非经过深思熟虑,而更像是听见了天地间冥冥中的呼唤,

Struts是如何实现MVC的

相关文章:

你感兴趣的文章:

标签云: