• 通过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目录下


    4.配置web.xml

    	<filter>
    		<filter-name>struts_filter</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>struts_filter</filter-name>
    		<url-pattern>*.action</url-pattern>
    	</filter-mapping> 

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

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

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

    5.添加一个struts.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
    	<package name="main" extends="struts-default">		
    		<action name="Example" class="my.ExampleAction">
    			<result name="success">/Result_Example.jsp</result>
    		</action>
    	</package>
    </struts>

    主要是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" %>
    <!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=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
       ID:<s:property value="id"/> <br/>
       姓名:<s:property value="name"/><br/> 
       手机号:<s:property value="phone"/><br/> 
    </body>
    </html>

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

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

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

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

    结果如图所示:


    好,至此一个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文件并加载其中的参数,并构建了一个<action_name,class>的映射表,其中就有<Example,ExampleAction> ,还有result映射表<success,Result_Example.jsp>

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

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

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

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

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



    二.Struts2的标签:

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

    把Example.jsp改成

    </head>
    <body>
       ID:<s:property value="id"/> <br/>
       姓名:<s:property value="name"/><br/> 
       手机号:<s:property value="phone"/><br/>      
     
      <s:if test="id > 100">
           id大于100
       </s:if>
       <s:elseif test="id<100">
            id小于100
       </s:elseif>    
    </body>
    </html>
    

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


    未完待续.......








  • 相关阅读:
    函数,封装
    c++增强c
    Git安装与使用
    Ajax&Jquery
    IntelliJ Idea2018.2,Pycharm20183.2破解教程
    事务&数据库连接池&DBUtils&JSP设计模式
    JSP&EL&JSTL
    Http协议和Servlet
    接收流信息---字符串
    lucene索引库优化一
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163489.html
Copyright © 2020-2023  润新知