【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

阅读更多

上面博文,主要简单的介绍了一下SSH的基本概念,比较宏观,作为初学者能够有一个整体上的认识,个人认为对学习有很好的辅助功能,它不仅仅是一个“瞭望塔”,更是检验是否真正掌握所有内容的一个前提。

Struts是基于MVC的框架,它进一步的对MVC进行了封装,它是怎么封装的,我们从先回顾一下MVC再到Struts,再用Struts给大家实现一个简单登录的实例。我们开始吧。

 

 

MVC

 

 

概念

 

MVC全名是Model View Controller,是模型(model)—视图(view)—控制器(controller)的缩写,知道这么多就够了。

 

大家都知道SUN公司对于MVC模式先后推出的一种规范,第一种是JSP Model1,第二种则是JSP Model2;Model1就是jsp + javabean,Model2就是jsp + servlet + javabean两种模式,前者是纯JSP,后者是简单的MVC。我们通过两个时序图来对比一下Model1和Model2:

 

Model1

 

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)_第1张图片

 

优点:

1、编码简单

2、适合小型项目

 

缺点:

1、显示层与业务逻辑混在一起

2、jsp的职责不单一,职责过重,不便于维护

 

Model2

 

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)_第2张图片

 

优点:

1、分层清晰,职责清楚,比较适合于大型项目架构

2、可扩展性强

3、实现了业务逻辑和显示分离,降低系统的耦合度

 

缺点:

1、增加了大量编写代码的工作量

 

对比

 

Model1在一定程序上实现了MVC,即JSP是控制层与表示层合二为一了,这样的效果显然不如将控制层单独划分出来的好。而Model2则是将控制层(sevlet)单独的划分出来了,专门负责业务流程的控制,接受页面的请求,创建所需的javabean实例,并将处理后的数据再返回给JSP,渲染页面,这样分层清晰,可扩展性强,降低系统的耦合度。

 

Struts1

 

概念

 

说概念真谈不上,Struts实质上就是采用JavaServlet/JSP技术,在Model2的基础上实现的一个MVC框架。

 

Struts1实现MVC的模型图

 

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)_第3张图片

 

各部分的职责

 

虽然说Struts不难,但对于初学者而言,真正的弄明白Struts也是一件很简单的事,我们介绍一下几个关键点的职责,以便对struts的原理有更进一步的认识。

 

ActionServlet,前端控制器

1、根据相应的规则截取Http请求的URL

2、将Http请求分发到相应的Action处理

 

ActionForm,相当于实体

1、收集表单数据,将表单数据转换成相应的数据类型

 

Action,业务层控制器

1、取得表单数据
2、调用业务逻辑
3、返回转向信息

 

我们再根据登录实例,对比上面的模型图,进一步理解一下Struts的基本原理,最后做一下总结。

 

登录实例

 

1、配置Struts

*拷贝struts相关的jar到WEB-INF/lib下
*在web.xml文件中配置ActionServlet
*提供struts-config.xml文件,需要放到WEB-INF下

如图所示:

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)_第4张图片

2、编写代码

 

web.xml

 



  
    index.jsp
  
  
  
  
    action
    org.apache.struts.action.ActionServlet
    
      config
      /WEB-INF/struts-config.xml
    
    
      debug
      2
    
    
      detail
      2
    
    2
  


  
  
    action
    *.do
  
  

 

 

struts-config.xml

 






	
		
	
	
	
		
			
			
		
	

 

 

LoginAction

 

package com.liang.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 liang
 *
 */
public class LoginAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginActionForm laf =(LoginActionForm)form;
		//从ActionForm获取表单数据
		String username = laf.getUsername();
		String password = laf.getPassword();
		UserManager userManager = new UserManager();
		try{
			//调用业务逻辑
			userManager.login(username, password);
			//跳转到成功页面
			return mapping.findForward("success");
		}catch(UserNotFoundException e){
			e.printStackTrace();
			request.setAttribute("msg", "用户不能找到,用户名称=[" + username + "]");
		}catch(PasswordErrorException e){
			e.printStackTrace();
			request.setAttribute("msg", "密码错误");
		}
		//跳转到失败页面
		return mapping.findForward("error");
	}

}

 

LoginActionForm

 

package com.liang.struts;

import org.apache.struts.action.ActionForm;
/**
 * 登录ActionForm,负责表单收集数据
 * 表单的属性必须和ActionForm中的get和set的属性一致
 * @author liang
 *
 */
@SuppressWarnings("serial")
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;
	}
}



 

login.jsp

 

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>




Insert title here


	
用户:
密码:

 

PS:登录页面不难,主要是一定注意action的名字和ActionServlet的配置一致。

 

 

 

总结

 

Struts很好的封装了MVC,界面从业务逻辑分离出来,灵活多变,同时,使用配置文件将控制层也变得更加灵活,降低了系统耦合。大道至简,一切变得轻松,简单了。

 

源码

 

留个悬念,下篇博文,我们一步步重构MVC实现Struts框架的流程。

 

你可能感兴趣的:(struts,ssh,mvc,框架)