SSH之struts—如何实现MVC

       学习drp的时候学过model2,相比较model1的jsp+javabean的开发模式,model2是jsp+servlet+javabean,它通过servlet实现控制,获取前端数据、调用业务逻辑并将结果返回到jsp,是MVC框架,servlet就是controler。但是在servlet需要具体指定jsp,如果jsp改名了就要修改程序,,而且它获得的前端数据都是字符串,每次传值后还要转换格式,显然这不是最好的方式,所以今天介绍struts怎么实现的MVC,如何避免这些问题?

一、回顾model2(mvc)

    在博客model1和model2的区别 中介绍了model2的开发模式,大家可以去回顾下servlet是如何控制的。

二、通过servlet讲解如何实现MVC

    既然对servlet是熟悉的,那就先通过servlet讲解。开始已经说到传统的model2模式存在一些弊端,struts对它做了改进,通过配置文件解耦controler。

1、时序图

   这里servlet的功能不再是收集信息调用业务逻辑,它的作用是:截取url,并根据配置文件分发到相应的action。让action去做原本servlet该做的,而且action返回不再是具体的jsp页面。

2、配置文件

web.xml

	<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>

    这里配置所有以.do结尾的action都去读取struts-config.xml配置文件,actionservlet的作用就是时序图中的servlet。

struts-config.xml

<struts-config>
	<!-- 配置actionForm -->
	<form-beans>
		<form-bean name="loginForm" type="com.zx.struts.LoginActionForm" />
	</form-beans>
    <!-- 配置action -->
	<action-mappings>
		<action path="/login" 
				type="com.zx.struts.LoginAction"
				name="loginForm"
				scope="request">
			<forward name="success" path="/login_success.jsp" />
			<forward name="error" path="/login_error.jsp" />
		</action>
	</action-mappings>
</struts-config>
      loginForm用来收集表单信息,和页面传过来的一样不用再改格式。path是截取的url,分发到LoginAction,如果成功返回success,定位到成功页面,error定位到失败页面。如果jsp被重命名只需该配置文件即可,不用动程序。所以action和loginform的作用是完成数据收集和业务逻辑调用。

三、struts如何实现

  上面讲述的是通过代码直观的表示,struts对它进行的封装。看下面的图:

    客户端将请求发到ActionServlet,它截取url,并且通过配置文件分发到具体的action,然后action调用业务逻辑,并返回结果,actionservlet再将结果转发到jsp。

1.loginForm如何工作

  

/**
 * 登录actionForm,负责收集表单数据
 * 表单的属性必须和actionform中的get和set的属性一致
 * @author zx
 *
 */
public class LoginActionForm extends ActionForm {

	private String username ;
	
	private String password;

	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;
	}
	
}


2.loginAction

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)){
			//登录成功,struts会new一个actionforward对象把信息放进去
			return mapping.findForward("success"); 
		}else{
			//登录失败
			return mapping.findForward("error"); 
		}
}
   execute方法封装了actionform,所以可以直接调用并取值,最后的返回值是字符串和配置文件对应。


四、总结

1、ActionServlet负责截取url和分支,它是一个中央控制器

2、ActionForm会收集表单数据,这样表单数据会自动转换成相应的数据类型,相比model2更灵活

3、Action业务层控制器,也是和模型层打交道的桥梁,和model2的servlet作用一样


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值