`
jdluojing
  • 浏览: 18004 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

struts2学习笔记(一) MVC模式

 
阅读更多

在学习struts2之前首先了解一下MVC模式。

 MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。分层概念

模型(Model)

用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

视图(View)

视图是用户看到并与之交互的界面,能够显示模型中传递的数据。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

控制器(Controller)

控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

MVC的组件关系图


交互顺序

(1)首先是展示视图给用户,用户在这个视图上进行操作,并填写一些业务数据

(2)然后用户会点击提交按钮,来发出请求

(3)视图发出的用户请求会到达控制器,在请求中包含了想要完成什么样的业务功能以及相关的数据。

(4)控制器会来处理用户请求,会把请求中的数据进行封装,然后选择并调用合适的模型,请求模型进行状态更新,然后选择接下来要展示给用户的视图。

(5)模型会去处理用户请求的业务功能,同时进行模型状态的维护和更新

(6)当模型状态发生改变的时候,模型会通知相应的视图,告诉视图它的状态发生了改变。

(7)视图接到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图本身的展示方式,把这些数据展示出来。

下面动手做一个练习,完成填写用户信息并显示:

使用Servlet中的Filter来充当控制器,他能够拦截用户的请求,通过他来分发这些请求到对应的Model和View。

User动作类:

public class User {

	private String userName;
	private String email;
	private String age;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}
	
	public void save(){
		System.out.println("保存实体");
	}
}

FilterDispatcher控制器类

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterDispatcher implements Filter {

	public void init(FilterConfig filterconfig) throws ServletException {
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest servletrequest,
			ServletResponse servletresponse, FilterChain filterchain)
			throws IOException, ServletException {

		HttpServletRequest req = (HttpServletRequest) servletrequest;
		HttpServletResponse resp = (HttpServletResponse) servletresponse;

		String uri = req.getRequestURI();
		
		//目标视图url
		String forwardUrl = null;
		
		if (uri.endsWith(".action")) {

			int lastIndex = uri.lastIndexOf("/");
			String action = uri.substring(lastIndex + 1);
			if ("input.action".equals(action)) {
				forwardUrl = "/input.jsp";

			} else if ("save.action".equals(action)) {//执行save动作
				
				User user = new User();
				user.setUserName(req.getParameter("userName"));
				user.setEmail(req.getParameter("email"));
				user.setAge(req.getParameter("age"));

				user.save();
				//用于将User对象传递到视图
				req.setAttribute("user", user);

				forwardUrl = "/detail.jsp";
			}

			if (forwardUrl != null) {

				RequestDispatcher dispatcher = req
						.getRequestDispatcher(forwardUrl);
				//跳转到指定视图
				dispatcher.forward(req, resp);
			}

		}

	}
}

在FilterDispatcher中的doFilter方法中对请求的资源进行处理:

(1)如果有必要,对相应的动作类进行实例化。

(2)如果动作对象存在,用请求参数填充该动作的相关属性

(3)如果动作对象存在,调用相应的动作方法。在这里User对象上的save方法就是Save动作的动作方法。

(4)把请求转发给视图。

这里的动作指的是能够应用程序可以完成的一项操作,和动作相关的POJO叫做动作对象。

视图

input.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>input</title>
  </head>
  
  <body>
  
  <form action="save.action">
    username : <input type="text" name="userName"/><br/>
       email : <input type="text" name="email"/><br/>
         age : <input type="text" name="age"/><br/>  
         <input type="submit" value="submit"/>
   </form>
   
  </body>
</html>

detail.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Detial</title>
  </head>
  
  <body>
  
    username : ${user.userName }<br/>
       email : ${user.email }<br/>
         age : ${user.age }
  </body>
  
</html>

测试:

总结:在这个小程序中,使用Servlet的Filter来充当控制器,来实现请求的转发。有input和save两个动作,input动作的作用仅仅是用于显示视图界面,在执行save动作时,控制器实例化一个动作对象(User对象),并且使用请求中携带的参数来填充动作对象中的属性,然后指定动作方法(save方法)来完成保存操作。程序中与业务逻辑和数据操作相关的部分都属于model层。初学struts2,将学习的过程记录下来,如有错误,望大家指出。


分享到:
评论

相关推荐

    struts2学习笔记总结

    Struts2是一个强大的Java Web应用程序开发框架,基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性、可扩展性良好的Web应用的解决方案。本笔记将全面总结Struts2的核心概念、主要功能以及实际...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    struts2学习笔记(完美总结)——转自OPEN经验库

    Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...

    struts2 学习重点笔记

    - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 WebWork 2,它融合了 Struts 1 的一些优秀思想。 - **优势**:使用 Struts2 可以显著提高...

    张龙圣思园struts2学习笔记word

    Struts2是MVC(Model-View-Controller)设计模式的一种实现,它通过拦截器(Interceptor)机制实现了灵活的业务逻辑处理。控制器负责接收用户请求,解析并转发到相应的业务逻辑,模型层处理业务,视图则负责展示结果...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    struts2学习笔记

    Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中广泛使用,提供了丰富的功能和灵活性。下面将详细讲解Struts2的一些核心知识点。 **一.Struts2核心文件:struts.xml配置** Struts2的...

    struts2学习笔记和源码

    这份"struts2学习笔记和源码"资源是学习这个框架的理想材料,特别适合初学者。 一、Struts2框架基础 Struts2是Apache软件基金会下的一个项目,它是Struts1的升级版,弥补了Struts1的一些不足,如动作映射和拦截器等...

    struts2 学习笔记 实战

    Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace ...

    牧紫小岩的Struts2学习笔记

    综上所述,**牧紫小岩的Struts2学习笔记**涵盖了Struts2框架的关键概念和技术细节,从框架的初始化流程、配置管理到Action的实现与调用,再到结果处理和异常管理,为初学者和资深开发者提供了一个全面深入的学习资源...

    Struts1及14. Struts2学习笔记

    本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...

    struts2学习笔记一

    Struts2是一个基于MVC设计模式的框架,它的主要目标是简化JavaWeb应用的开发。通过Struts2,开发者可以更方便地实现MVC模式,避免了在JSP和Servlet间手动传递参数、表单验证的复杂性、数据类型转换以及国际化等问题...

Global site tag (gtag.js) - Google Analytics