• Struts2基础学习(一)—初识Struts2


    目录

    一、什么是Struts2

    二、搭建Struts2的开发环境

    三、Struts2的配置文件

    四、MVC模式

    一、什么是Struts2

         Struts2是一个非常优秀的MVC框架,由传统的Struts1和WebWork两个经典框架发展而来。

         Struts2有以下几个核心功能:

         (1) 允许POJO(Plain Old Java Objects)对象作为Action。

         (2) Action的execute方法不再与Servlet API耦合,更易测试。

         (3) 支持更多的视图技术(JSP、FreeMarker、Velocity)。

         (4)基于Spring AOP思想的拦截器机制,更易扩展。

         (5)更强大、更易用输入校验功能。

    二、搭建Struts2的开发环境

    1.下载最新的包

         它的目录结构如下。

         image

         apps: 包含了基于Struts2的示例应用。

         docs: 包含了Struts2相关文档及API文档。

           libs: 包含了Struts2框架和核心类库,及第三方插件类库。

           src: 包含了Struts2框架的全部源码。

    2.复制核心jar包到工程中

         image

    3.配置核心过滤器

    	<!-- Struts2核心过滤器 -->
    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	</filter>
    
    	<filter-mapping>
    		<filter-name>struts2</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>

    4.创建struts.xml的配置文件放到src目录下

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    
    	<!-- 开启开发模式 -->
    	<constant name="struts.devMode" value="true"></constant>
    	<package name="p1" extends="struts-default">
    	
    		<!-- 配置一个动作 -->
    		<action name="sayHello" class="com.kiwi.action.HelloAction" method="sayHello">
    			<!-- 配置结果视图 -->
    			<result name="success">/success.jsp</result>
    		</action>
    	
    	</package>
    
    </struts>

    注意:

           配置struts.xml无提示问题的解决
          (1)在struts2-core-2.3.7.jar中含有 struts-2.3.dtd,将其复制到硬盘任意位置 例如:G:\struts-2.3.dtd。
          (2)myeclipse - window - preferences - 搜索xml catalog - Add,注意key的类型要选用url。

    三、Struts2的配置文件

    1.配置文件的加载顺序

    Struts2框架按照如下顺序加载struts2配置
         default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面。
         struts-default.xml 该文件保存在 struts2-core-2.3.7.jar。
         struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar。
          struts.xml 该文件是web应用默认的struts配置文件。
          struts.properties 该文件是Struts的默认配置文件。
          web.xml 该文件是Web应用的配置文件。

    如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值。

    2.配置文件的内容标签

    (1)package

         作用: 分模块开发。

         属性:

               name:  包的名称,唯一的。

               extends: 一般都需要直接或间接的一个叫做struts-default的包名,因为struts2的一些核心功能配置都在这里。

               abstract: 如果为true,说明是一个抽象包,让别人去继承,没有任何action子元素的包就可以定义为抽象包。

               namespace: 名称空间,一般以"/"开头,和action一起构成了用户的访问路径。

               image

               image

    Action名称的搜索顺序

    image

    (2)action

         作用: 配置动作。

         属性:

               name: 动作的名称,要唯一。

               class: 动作的全类名,可以不指定,默认是 com.opensymphony.xwork2.ActionSupport。

               method: 执行的动作类的动作方法。可以不指定,默认值是execute。

    (3)constant

         default.properties定义了struts2 框架的大量常量,开发者可以通过改变这些常量来满足应用的需求,修改struts2 的配置常量,可以通过以下三种方式配置。

         a: 配置src/struts.xml

            <constant name="struts.devMode" value="true"></constant>

         b: 配置src/struts.propertis

             struts.devMode=false

         c: 配置web.xml

    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    		
    		<init-param>
    			<param-name>struts.devMode</param-name>
    			<param-value>false</param-value>
    		</init-param>
    		
    	</filter>

    常见的constant

    指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出

         <constant name="struts.i18n.encoding" value="UTF-8"/>

    该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

         <constant name="struts.action.extension" value="action"/>

    设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

         <constant name="struts.serve.static.browserCache" value="false"/>

    当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

         <constant name="struts.configuration.xml.reload" value="true"/>

    开发模式下使用,这样可以打印出更详细的错误信息

         <constant name="struts.devMode" value="true" />

    默认的视图主题

         <constant name="struts.ui.theme" value="simple" />

    与spring集成时,指定由spring负责action对象的创建

         <constant name="struts.objectFactory" value="spring" />

    该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false

        <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

    上传文件的大小限制

         <constant name="struts.multipart.maxSize" value=“10701096"/>

    3.指定多个Struts配置文件

         在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:

    <struts>
    	<include file="struts-part1.xml"/>
    	<include file="struts-part2.xml"/>
    </struts>

    四、MVC模式

    1.概述

         MVC是一种架构型模式,它本是并不引入新的功能,只是指导我们改善应用程序的架构,使得应用程序的模型和视图相分离,从而得到更好的开发和维护效率。

         MVC模式中,应用程序被划分成模型视图控制器三个部分。其中模型部分包含了应用程序的业务逻辑和业务数据。视图部分封装了应用程序的输出形式,也就是页面。控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。

         MVC模式的这三个部分职责明确,而且相互分离,因此每个部分都可以独立改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。

    2.MVC各个部分的作用

    模型(Model): 负责封装应用的状态,并实现应用的功能。通常又分为数据模型和业务逻辑模型。数据模型负责存放业务数据,比如订单信息、用户信息。业务逻辑模型包含了应用的业务操作,比如订单的添加或者修改。

    视图(View): 将模型的内容展现给用户,用户可以通过视图请求模型进行更新。视图从模型获得要展示的数据,然后用自己的方式展现给用户,提供页面与用户进行交互。

    控制器(Controller): 用来控制应用程序的流程和处理视图所发出的请求。当控制器接收到用户的请求时,会调用相应模型来实现用户请求的功能,然后选择相应的视图把模型更新后的数据展示给用户。

    3.Struts2与MVC

         Struts2是一种基于MVC的Web应用框架。

         image

    1.控制器—FilterDispatcher

         用户请求首先会到达前端控制器FilterDiapatcher,FilterDiapatcher会根据用户提交的请求和struts.xml中的配置,选择合适的Action,然后让这个Action处理这个请求。

    2.模型—Action

         在用户请求经过FilterDiapatcher之后,被分发到相应的Action,Action负责把用户请求中的参数组成合适的数据模型,并调用相应的业务逻辑进行真正的功能处理,然后获取下一个视图展示所需要的数据。

    3.视图—Result

         视图结果把Action中获取到的数据展现给用户。

  • 相关阅读:
    JAVA环境变量的配置
    中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总
    1009. 说反话 (20)
    akoj-1162-计算表达式
    akoj-1153-p次方求和
    akoj-1055-矩阵乘法
    akoj-1076-Encoding
    C语言程序设计进阶 翁恺 第4周编程练习
    akoj-1272-字母统计
    akoj-1267-独木舟上的荡漾
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5468892.html
Copyright © 2020-2023  润新知