`

【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

 

 

优点:

1、编码简单

2、适合小型项目

 

缺点:

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

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

 

Model2

 

 

优点:

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

2、可扩展性强

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

 

缺点:

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

 

对比

 

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

 

Struts1

 

概念

 

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

 

Struts1实现MVC的模型图

 

 

各部分的职责

 

虽然说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下

如图所示:

2、编写代码

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 标准 ActionServlet 配置文件-->
  <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>


  <!-- 标准 ActionServlet Mapping配置信息 -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
</web-app>

 

 

struts-config.xml

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
	<form-beans>
		<form-bean name="loginForm" type="com.liang.struts.LoginActionForm"></form-bean>
	</form-beans>
	
	<action-mappings>
		<action path="/login" 
				type="com.liang.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>
</struts-config>

 

 

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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<form action="login.do" method="post">
		用户:<input type="text" name="username"><br>
		密码:<input type="password" name="password"><br>
		<input type="submit" value="登录"><br>
	</form>
</body>
</html>

 

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

 

 

 

总结

 

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

 

源码

 

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

 

分享到:
评论

相关推荐

    struts+hibernate+spring详细笔记

    1. **MVC模式**:理解MVC设计模式的基本概念和在Struts中的实现。 2. **Hibernate配置**:熟悉Hibernate的配置文件,实体类的映射,以及CRUD操作。 3. **Spring IoC和AOP**:深入理解依赖注入和面向切面编程的概念,...

    struts2+spring+bibernate

    总的来说,这个实例提供了从基础到进阶的SSH整合学习材料,可以帮助开发者深入理解MVC模式以及SSH框架的协同工作原理,对于提升Java Web开发能力大有裨益。通过阅读源代码,可以学习到如何组织项目结构,如何配置和...

    struts2+spring+hibernate

    Struts2、Spring和Hibernate是Java开发中...然而,随着技术的发展,Spring Boot和Spring Cloud等新兴框架逐渐成为主流,SSH框架的使用在近年来有所减少,但理解SSH仍然是了解企业级Java应用开发历史和进阶的重要一步。

    struts2+spring+hibernate环境

    Struts2、Spring和Hibernate是Java开发中三大主流框架,它们的集成应用构成了经典的SSH(Struts2-Spring-Hibernate)架构,为构建企业级Web应用程序提供了强大的支持。本篇文章将详细探讨这三个框架的核心功能、集成...

    传智播客SSH(struts2 spring2.5 hibernate3.5) ppt 课件

    SSH(Struts2 + Spring + Hibernate)是Java开发中一种常见的企业级应用框架组合,它由三个主要组件构成,用于构建高效、灵活的Web应用程序。本篇将详细讲解这三个组件的核心概念、工作原理以及如何在实际项目中进行...

    Struts2.0+hibernate3.0+Spring2.0

    Struts2.0、Hibernate3.0 和 Spring2.0 是经典的 Java Web 开发框架组合,通常被称为“SSH”(Struts2 + Spring + Hibernate)...尽管如此,理解SSH的集成和工作原理仍然是学习Java Web开发历史和进阶知识的重要部分。

    struts2.1.6+spring 2.0编程范例

    Struts2.1.6与Spring 2.0是Java Web开发中两个非常重要的开源框架,它们一起构建了SSH(Struts2 + Spring + Hibernate)框架体系,为开发者提供了高效、灵活的企业级应用开发解决方案。这个编程范例是学习和掌握SSH...

    spring+struts+hibernate

    6. **学习和实践**:学习SSH框架,首先要理解每个框架的基本概念和工作原理,然后通过实例项目进行实践,如创建用户管理、订单处理等模块。熟悉框架间的集成配置,如Struts2的Spring插件配置、Hibernate的...

    Java SSH 框架整合,学习源码

    在SSH整合中,Spring主要作为应用的核心,负责管理其他组件,如Struts和Hibernate,通过Bean工厂和ApplicationContext实现对象的创建和管理。 2. **Struts框架**:Struts是基于MVC(Model-View-Controller)设计...

    bbs.rar_bbs_bbs s_bbs ssh_ssh_ssh bbs

    1. SSH协议:讲解了SSH的基本概念,如何通过SSH进行安全的远程登录和数据传输,以及其加密机制。 2. BBS系统开发:涵盖了BBS的功能、架构和常见实现,如何设计用户交互和管理论坛帖子。 3. Struts框架:介绍了Struts...

    会员管理系统(ssh)

    这个“会员管理系统”项目实例是基于SSH框架搭建的,旨在为初学者提供一个实践平台,帮助理解并掌握这三个框架的协同工作原理。 1. **Struts2**:Struts2是一个MVC(Model-View-Controller)框架,负责处理用户请求...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》特别介绍了Struts 2对AjAX的支持,还重点剖析了SSH框架的整合开发,并给出了两个综合案例来展示整合SSH框架开发Web应用。 和已经出版的同类图书...

    JAVA SSH学习帮助文档1

    这个“JAVA SSH学习帮助文档1”涵盖了这三个框架的基础知识、进阶技巧以及常见问题的解决方案,是Java程序员学习SSH集成开发的宝贵资料。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它强调了控制层的分离,...

    韩顺平SSH视频下载地址

    根据提供的信息,我们可以总结出以下IT相关的知识点,主要聚焦于Struts框架以及SSH(Spring + Hibernate + Struts)集成项目的教学资源。 ### Struts框架基础介绍 #### 1. Struts框架概述 - **定义**:Struts是一...

    实习项目,基于SSH的器材管理系统,Mysql数据库,内容完整

    这是一个基于SSH(Struts2+Spring+Hibernate)的实习项目,名为“器材管理系统”,系统集成了Mysql数据库,提供了一套完整的解决方案。SSH是Java Web开发中的经典技术栈,它结合了Struts2的MVC设计模式、Spring的...

    当当网 SSH架构

    【当当网SSH架构】是一种基于Java Web技术的三层架构,SSH是Struts、Spring和Hibernate三个开源框架的缩写,常用于构建企业级的Web应用程序。这个项目非常适合初学者学习,因为它涵盖了从基础到进阶的许多核心概念,...

    struts1.rarstruts1.rar

    "s2sh-login.rar"很可能是一个简单的登录模块实现,使用Struts2(S)、Spring(S)和Hibernate(H)这三个框架。这个例子通常会涵盖用户认证、数据持久化以及事务管理等内容,是学习SSH集成开发的一个基础案例。 总...

    Java web开发进阶

    ### Java Web开发进阶知识点梳理 #### 一、基础级知识点 **1.1 面向对象基础** - **定义**: 面向对象编程(Object-Oriented Programming,OOP)是一种程序设计思想,它将现实世界中的事物抽象为类和对象,并通过...

    北大青鸟 ACCP5.0 SSH总结

    进阶Struts技术 #### 3.1 国际化和服务器端验证 - **国际化**:通过资源文件实现多语言支持,例如在ActionForm的validate()方法中添加ActionMessage,然后在JSP页面中使用标签显示错误信息。 - **服务器端验证**...

    java web开发技术大全

    第8章 Struts 2进阶 第9章 Struts 2的* 第10章 Struts 2的类型转换 第11章 Struts 2的输入校验 第12章 文件的上传和下载 第13章 国际化 第14章 Struts 2的标签库 第15章 Struts 2对AJAX的支持 第16...

Global site tag (gtag.js) - Google Analytics