Struts2的简介,框架环境的搭建,基础配置方法的介绍

12 篇文章 0 订阅
4 篇文章 0 订阅

      Struts2是一个针对Javaee三层结构中的Web层的框架。从用途方面出发,简单来说Struts2的最主要使用方式就是用来与页面进行数据交互,获取请求数据,过滤请求数据,处理数据,传递数据到Service层,接收数据处理结果,封装数据再返回至页面。

1、Struts2的简介

Struts2是一个基于MVC设计模式的WEB层的框架。简单描述一下什么是MVC设计模式,类似与Javaee三层结构(Web、Service、Dao),MVC更应该被称为一种软件开发模式,MVC(Model-View-Controller) 模式的基本思想是数据,显示和处理相分离。模型(Model)负责数据管理,视图(View)负责数据显示,控制器(Controller)负责业务逻辑和响应策略。

常见的WEB层框架:Struts1、Struts2、WebWork、Spring Mvc,其中Struts2、Spring Mvc最最常见,另外两个么的人用

2、框架环境的搭建

a、开发包:Struts2的开发包下载地址:http://struts.apache.org/

b、开发包目录介绍:

apps :Struts2提供一些项目。

docs :Struts2提供的开发规范和文档

lib :Struts2提供的开发jar包

src :Struts2提供的源代码

 c、基础版本Struts2的环境的搭建,可以参考apps目录中的blank项目使用的jar包,将该项目解压,lib目录下的全部jar包加到项目中即可。

3、基础配置

       在了解基础配置前,需要大致了解Struts2框架的基础执行流程,要使用Struts2,必须先在web.xml中配置Struts2的核心过滤器,当访问到这个核心过滤器后,才正式使用了Struts2框架。

       浏览器发送过来的请求,先经过前端控制器(核心过滤器:StrutsPrepareAndExecuteFilter),过滤器内部会执行一组拦截器,这组拦截器实现部分的功能,再根据配置文件找到并执行目标Action,根据Action中方法的返回值,再与配置文件中的结果属性匹配,跳转不同的页面或者转发到其他Action或者进行其他操作,最终回到浏览器。

        Struts2的核心过滤器StrutsPrepareAndExecuteFilter中有一个init()方法,该初始化方法的主要作用是用来加载整个Struts2的配置文件的,当web项目的服务器启动时,该方法会执行且仅执行一次。这与servlet中的init方法不同,servlet方法中的init方法在每次收到请求数据时都会调用。

        然后介绍一下Struts中的配置文件,首先是框架自带的配置文件,下面按配置文件的加载顺序一一列举:(a-c为框架自带的配置文件,d-f为我们需要创建的配置文件或参数)加载方法的调用列表如下:

init_DefaultProperties(); // [1] ---第一步加载default.properties

init_TraditionalXmlConfigurations(); // [2] ---第二步加载struts-default.xml,struts-plugin.xml,struts.xml

init_LegacyStrutsProperties(); // [3] ---第三步加载struts.properties

init_CustomConfigurationProviders(); // [5] ---第四步加载客户一些配置提供类

init_FilterInitParameters() ; // [6] ---第五步加载web.xml中配置核心过滤器参数

init_AliasStandardObjects() ; // [7] ---第六步加载标准对象

a、default.properties         struts-core/org/apache/struts2/default.properties

这个properties文件主要包含了框架中会使用到的一些键值对信息,如action的后缀名地址访问 上传文件的大小控制

b、struts-default.xml       struts-core/struts-default.xml

配置了Struts2的默认包,大量拦截器、拦截器组等信息

c、struts-plugin.xml  struts2整合spring需要用到的一个配置文件
           暂时不会用 当需要整合Spring框架时, 会导一个包 struts2-spring-plugin-2.3.24.jar, 这个配置文件就是jar包里面的

d、struts.xml  action的浏览器访问路径配置文件,一般配置与项目的src根目录下

e、struts.properties 作用同xml,基本不用

f、web.xml中的StrutsPrepareAndExecuteFilter的初始化参数值,   如     

      <init-param>
                    <param-name>struts.action.extension</param-name>
                    <param-value>bbb</param-value>
                 </init-param>

后面加载的配置文件内容如果和前面配置文件的内容相同了 后面的会覆盖前面的

下面主要介绍需要配置的web.xml和struts.xml

web.xml中核心过滤器的配置格式:

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

struts.xml文件的配置格式:

首先介绍各个常用标签的含义: 

a、package配置

<package>标签

name :包的名称,在配置文件中不要出现重名的包即可。

extends :用于继承其他的包,通常继承struts-default.

namespace :名称空间,与<action>标签中name一起决定访问路径的。如namespace为"/",Action的name为test,那么访问路径即/test

namespace=”” :默认名称空间

namespace=”/” :跟名称空间

namespace=”/aaa” :带有名称名称空间

abstract :抽象的,将这个值设置为true,用于其他包继承。

<action>标签,action标签位于package标签内

name :与namespace共同决定访问路径

class :Action类全路径

method :执行Action中的哪个方法,默认值是execute.

<result>标签配置:

name :逻辑视图的名称。默认值是success。

type :

dispatcher :默认值,转发。(转发到JSP的页面)

redirect :重定向。(重定向到JSP的页面)

chain :转发到另一个Action。

redirectAction :重定向到另一个Action。

stream :文件的下载。

*result标签位于action标签内,与action匹配,但也可以使用global-results标签配置全局结果页,在action标签外,package标签内,举例如下:

<global-results>
          <result name="ok">/jsp/ok.jsp</result>
 </global-results>

b、constant配置,用于配置Struts常量,后面配置的constant标签可以覆盖前面加载的

格式如下:<constant name="struts.action.extension" value="abc"/>

此外,Struts2的常量也可以在另外两个地方配置,

struts.properties:key=value

web.xml:

  <filter>

   <filter-name>struts2</filter-name>

   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

   <init-param>

   <param-name>struts.action.extension</param-name>

   <param-value>xyz</param-value>

   </init-param>

  </filter>

c、include标签,用于包含其他配置文件

完整配置文件如下:

<?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.action.extension" value="abc"></constant>
	<!-- 使用动态方法 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<!-- name: 包名 对于咱们来说意义不大 作用:给别人继承用  
	extends: 继承  默认值:默认基层struts2提供的一个包 包名:struts-default
			 继承哪个包 那这个包下的所有东西都有一份
	namespace: 名称空间   和浏览器访问地址相关
	abstract:抽象的 默认是false 如果写成了true 代表当前的pageage下面不能出现action 他们2个是互
             斥的
		     该包只能被用来继承
	-->
	<package name="test1" extends="struts-default" namespace="/">
    <!--做action的地址访问路径
    name:action的名字  和浏览器访问地址相关
    namespace和name 组成了当前action的访问地址
    class:全限定名
    method: 可以不写 默认就是执行叫一个execute的方法  -->
		
	    <action name="hello" class="cn.itcast.action.ActionDemo1" >
            <!--result: 接收返回值
            name:返回的别名对比 -->
		     <result name="abc">/jsp/demo.jsp</result>
	     </action>
	</package>
	
	<!-- 引入外部的action配置  -->
	<include file="struts_user.xml"></include>
	
	<package name="test3" extends="struts-default" namespace="/">
	
		<global-results>
			<result name="ok">/jsp/ok.jsp</result>
		</global-results>
		
		<action name="hello2" class="cn.itcast.action.ActionDemo2" >
			<result name="success">/jsp/demo.jsp</result>
		</action>
		
		<action name="hello3" class="cn.itcast.action.ActionDemo3" >
			
		</action>
		
	<!-- action的3种访问方式 -->
		<!-- method方式 -->
		<action name="product_save" class="cn.itcast.action.ActionDemo4" method="save" >
	 	</action>
	 	<action name="product_delete" class="cn.itcast.action.ActionDemo4"                 
method="delete" >
	 	</action>
	 	<action name="product_update" class="cn.itcast.action.ActionDemo4" method="update" >
	 	</action>
	 	<action name="product_find" class="cn.itcast.action.ActionDemo4" method="find" >
	 	</action>
	 	
	 	<!-- 通配符方式(掌握)  
	 			*: save
	 			   delete
	 			   update
	 			   find
	 			   
	 			{1} :第一个星号的值
	 	
	 	-->				 
	 	<action name="product_*" class="cn.itcast.action.ActionDemo4" method="{1}" >
	 	</action>
	 	
	 	<!-- 动态方法方式(了解) 
	 			1 动态方法方式默认是关闭的  需要开启   default.properties
	 			2 页面要使用特殊写法
	 	-->
	 	<action name="product" class="cn.itcast.action.ActionDemo4" ></action>
	 	
	</package>
	
</struts>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值