通过Struts2Web应用框架深入理解MVC

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet.

一.用法简介:

1.Eclipse新建Dynamic Web Project, 项目名:Struts2Pro

2.Apache官网http://struts.apache.org/下载 struts-2.5.16-min-lib

3.把  struts-2.5.16-min-lib解压后的jar文件拷贝到WEB-INF的lib目录下

通过Struts2Web应用框架深入理解MVC_第1张图片

4.配置web.xml

	
		struts_filter
		org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
	
	
		struts_filter
		*.action
	 

这个配置是和配置servlet是一样的意思,就是当url中有满足.action的格式时,自动转到

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter这个类中去处理,

而这个类就在上面拷贝进去的jar文件中.    struts_filter时自己定义,不要重名即可

5.添加一个struts.xml:




			
		
			/Result_Example.jsp
		
	

主要是action这个节点,当发现为Example时,会调用my下的ExampleAction类去处理

然后result是绑定“success”到Result_Example.jsp

6.添加ExampleAction.java类:

package my;
import com.opensymphony.xwork2.ActionSupport;

public class ExampleAction extends ActionSupport
{
	private static final long serialVersionUID = 1L;

	@Override
	public String execute() throws Exception
	{
		// TODO Auto-generated method stub
		name="zhiduanqiangchang";
		phone="18357302156";
		return "success";
	}
	
	int id;
	String name;
	String phone;
	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getPhone()
	{
		return phone;
	}

	public void setPhone(String phone)
	{
		this.phone = phone;
	}
}

最关键的是该类继承了ActionSupport类,然后重载了execute方法

然后自定义了三个属性,id, name, phone

7.添加Result_Example.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>




Insert title here


   ID: 
姓名:
手机号:

其中<%@ taglib prefix="s" uri="/struts-tags" %> 是导入struts2 标签库 加了这个后就可以 使用 struts2标签了

所有 s:开头的标签都会被struts2框架解析

8.启动tomcat,浏览器访问 :

http://localhost:8080/Struts2Pro/Example.action?id=111111

结果如图所示:

通过Struts2Web应用框架深入理解MVC_第2张图片


好,至此一个Struts2的基本框架已经搭建完毕,让我们捋一捋是Struts2是如何实现的

1.首先,当我们访问http://localhost:8080/Struts2Pro/Example.action?id=111111该地址时,发送请求给tomcat服务器

2.但是先被web.xml中定义的Filter拦截了下来,因为url中有.action这样的格式,

3.然后调用了org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter这个类去处理请求,这个类是struts内部实现的

4.然后StrutsPrepareAndExecuteFilter类去寻找struts.xml文件并加载其中的参数,并构建了一个的映射表,其中就有<Example,ExampleAction> ,还有result映射表

5.发现url中存在Example,然后运用映射表,调用ExampleAction去处理

6.然后运用反射技术,构造my.ExampleAction,并调用其中的重载函数execute

7.execute执行完,给id,name,phone属性赋值,返回success

8.然后根据result映射表Result_Example.jsp>,实际上返回了Result_Example.jsp

8.解析jsp代码,替换里面的标签为响应的值,将处理后的Result_Example.jsp页面内容返回给浏览器



二.Struts2的标签:

上例中有s:propety,其实struts中还有很多标签,比如s:if

把Example.jsp改成



   ID: 
姓名:
手机号:
id大于100 id小于100

其中test中的“id>100”代表条件,框架会去判断id,也就是ExampleAction中的id属性是否大于100,然后输出对应的结果


三.从struts2理解MVC原理

        在Struts2,模型层对应业务逻辑组件,它通常用于实现业务逻辑及与底层数据库的交互等。视图层对应视图组件,通常是值指JSP页面。但也适用于其他视图技术。如Velocity或者Excel文档。控制层对应系统核心控制器和业务逻辑控制器。系统核心控制器为Struts2框架提供的FilterDispatcher,它是一个起过滤器作用的类,能根据请求自动调用相应的Action。   

        由此,可以看到Struts2和MVC是相对应的,Struts2中的FilterDispatcher对应着MVC中的控制层,Action对应着模型层,产生的结果Result对应视图层。

  • FilterDispatcher(StrutsPrepareAndExecuteFilter)-------控制层 C

       对控制层C来说, 在输入端,FilterDispatcher会根据URL和struts.xml中的配置,来调用对应的Action,在输出端,也是通过返回“success”类似的字符串,来调用对应的结果,既输入输出全部可配置,控制全在核心的struts.xml中,

控制层不需要关心具体的逻辑处理和视图处理,只需要关心输入什么->调用对应的Action,和输出什么->调用对应的Result,而这就是MVC的核心思想

        FilterDispatcher其实是一个过滤器Filter(Servlet规范中的一种Web组件),它是Struts2核心包里已经做好的类,不需要程序员去开发,是需要在项目的web.xml文件中配置一下即可。FilterDispatcher体现了J2EE核心设计模式中的前端控制器模式。

  • Action--------模型层 M

        Action负责把请求中的参数组装成合适的参数模型,并调用相应的业务逻辑进行真正的功能处理,然后产生下一个视图展示所需要的数据。最后得到下一个视图所需要的信息,并传递给控制层中的拦截器链。

  • Result--------视图层 V

        视图层主要用来与用户交互,它将从控制层得到的数据通过适合的展示方式展现给用户,让用户与之交互更加简洁简单。在Struts2中,除了大众熟知的JSP方式,还有freemarker、velocity等各种优秀的展示方式。

        总之,Struts2框架实现了MVC的设计思想,使得系统各组件之间的偶和降低,提高了程序的高度扩展性和可维护性。

      

        Struts2的开发优势

        Struts2是对MVC思想的具体实现,具有非常好的开发优势,它较低的软件开发周期以及高可维护性,都深深地吸引了众多的程序开发人员。随着时代的发展,各种开发工具层出不穷,程序开发人员对开发工具的需求也越来越灵活多变。Struts2融合了许多优秀的Web框架的优点,并对缺点进行了改进,使得Struts2在开发过程中具有更大的优势,下面是使用Struts2进行Java Web开发的一些优点,仅供参考:

  1. 通过简单、集中的配置来调度动作类,使得配置和修改都非常容易。
  2. 提供简单、统一的表达式语言来访问所有可访问的数据。
  3. 提供内存方式的数据中心,所有可访问的数据都集中在存放在内存中,所以在调用中不需要将数据传来传去,只需要去内存数据中心访问即可。
  4. Struts2提供标准的、强大的验证框架和国际化框架,而且与Struts2的其他特性紧密结合。
  5. 强大的标签库,使用标签库可以有效的减少页面代码。
  6. 良好的Ajax支持。增加了有效的、灵活的Ajax标签,就像普通的标准Struts2标签一样。
  7. 简单的插件。只需要简单的放入一个jar包 ,任何人都可以扩展Struts2框架,而不需要什么特殊的配置。这使得Struts2不是再是一个封闭的框架,任何人都可以为其添砖加瓦,可以通过实现Struts2的某些特殊的可扩展点,比如自定义拦截器、自定义结果类型、自定义标签等,来为Sturts2定制需要的功能,而且还可以快速的发布给别人使用,就像Eclipse的插件机制一样,简单易用。
  8. 明确的错误报告,Struts2的异常简单而明了,直接指出错误的地方。
  9. 智能的默认设置,不需要程序员另外进行繁琐的设置。很多框架对象都有一个默认的值,不用再进行设置,使用其默认设置就可以完成大多数程序开发所需要的功能。
参考链接:https://blog.csdn.net/li_qinging/article/details/72809789


未完待续.......








你可能感兴趣的:(JavaWeb)