Struts2框架入门

Struts2架构

Struts2概述    

  以上文本来自百度百科

 Struts2是一个基于VMC设计模式的web层架构

常见的web层框架

Struts2、Struts1、webwork、springMVC

web层框架都是基于前端控制器模型的

Struts2入门

下载Struts2开发环境

http://struts.apache.org/

解压Struts2开发包

 

  1. apps :Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以运行。
  2. docs :Struts2的开发文档和API
  3. lib :Strtus2框架的开发的jar包
  4. src :Struts2的源码

创建web项目,导入jar包

struts-blank项目下找jar包

创建一个jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Struts2的入门</h1>
<h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门</a></h3>
</body>
</html>

编写action类

public class HelloAction {

	/**
	 * 提供一个方法:
	 *  * 方法签名固定的
	 *  共有的 返回值是String类型 方法名execute 在这个方法中不能传递参数。
	 */
	public String execute(){
		System.out.println("HelloAction执行了...");
		return "success";
	}
}

对action进行配置    struts_demo1.xml

 

<?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>
	<!-- Struts2为了管理Action的配置,通过包进行管理。 -->
	<!-- 配置Struts2的包 ================ -->
	<package name="demo1" extends="struts-default" namespace="/">
		<!-- 配置Action================ -->
		<action name="hello" class="com.itheima.struts.demo1.HelloAction" >
			<!-- 配置页面的跳转=========== -->
			<result name="success">/demo1/success.jsp</result>
		</action>
	</package>
	
</struts>

配置前端控制器(核心过滤器)

web.xml中配置核心过滤器

 <!-- 配置Struts2的核心过滤器 -->
  <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>
  
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

编写前端success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>跳转成功页面!!!</h1>
</body>
</html>

Struts2执行流程

 当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转

Struts2的配置文件的加载顺序*(了解)

Struts中可以在很多地方设置初始化常量,实际用到哪一个,这就与加载顺序有关了

init_DefaultProperties() ----加载default.properties

init_TraditionalXmlConfigurations(); ----加载struts-default.xml、struts-plugin.xml、struts.xml

init_LegacyStrutsProperties(); ----加载struts.properties

init_CustomConfigurationProviders();  ----加载配置提供类

init_FilterInitParameters() ; // [6] ----加载web.xml中过滤器初始化参数

init_AliasStandardObjects() ; // [7] ----加载Bean对象

加载顺序

default.properties

struts-default.xml

struts-plugin.xml

struts.xml

struts.properties

web.xml

注意:后配置的常量的值会覆盖先配置的常量的值。

Action配置

package相关配置

  1. package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
  2. package标签的属性
    1. name :包的名称,只有在一个项目中不重名即可。
    2. extends :继承哪个包,通常值为struts-default。
    3. namespace :名称空间,与<action>标签中的name属性共同决定访问路径。
      1. 名称空间有三种写法:
        1. 带名称的名称空间 :namespace=”/aaa” 
        2. 跟名称空间 :namespance=”/”
        3. 默认名称空间 :namespace=””
      2. package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
      3. package标签的属性
        1. name :包的名称,只有在一个项目中不重名即可。
        2. extends :继承哪个包,通常值为struts-default。
        3. namespace :名称空间,与<action>标签中的name属性共同决定访问路径。
          1. 名称空间有三种写法:
            1. 带名称的名称空间 :namespace=”/aaa” 
            2. 跟名称空间 :namespance=”/”
            3. 默认名称空间 :namespace=””
        4. abstract :抽象的,用于其他包的继承。要想让别的包继承,就要将abstract设置成true

action相关配置

  1. action标签配置Action类。
  2. action标签的属性
    1. name :与namespace共同决定访问路径
    2. class :Action类的全路径
    3. method :执行Action中的哪个方法的方法名,默认值execute
    4. converter :用于设置类型转换器,比如将String转换成基本数据类型(int、double等)、时间日期类型的转换等

<package>中的    namespace    与   <action>   中的    name   共同构成访问路径

常量的配置

在Struts2的框架中,提供了非常多的常量:(在default.properties)

  1. struts.i18n.encoding=UTF-8 ----Struts2中所有的post请求的中文乱码不用处理。
  2. struts.action.extension=action,, ----Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。

在Struts2中修改一些常量的值:

  1. 修改常量的值,可以有三个位置进行修正
    1. struts.xml中进行修改
    2. struts.properties中进行修改(这个配置文件是我们自己在src下创建的,用户可以自行修改的,只能修改常量
    3. web.xml中进行修改

分模块开发的配置

include标签,在struts.xml中配置

action的访问

Action类的写法

Action类是POJO(Plain Ordinary Java Object   简单的java类型)类

/**
 * Action的编写方式:Action类是一个POJO的类
 *
 */
public class ActionDemo1 {

	public String execute(){
		System.out.println("ActionDemo1执行了...");
		return null;
	}
}

Action类实现Action接口

/**
 * Action的编写方式二:实现一个Action的接口
 * * 实现接口的这种方式:提供了五个常量(五个逻辑视图的名称)
 * 		* SUCCESS	:成功
 * 		* ERROR		:失败
 * 		* LOGIN		:登录出错页面跳转
 * 		* INPUT		:表单校验的时候出错
 * 		* NONE		:不跳转
 *
 */
public class ActionDemo2 implements Action{

	@Override
	public String execute() throws Exception {
		System.out.println("ActionDemo2执行了...");
		return NONE;
	}

}

Action类继承ActionSupport类推荐使用这种,因为ActionSupport类实现了Action接口,同时增加了许多功能)

import com.opensymphony.xwork2.ActionSupport;

/**
 * Action的编写方式三:Action类继承ActionSupport类
 * * 推荐使用继承ActionSupport方式
 * 		* ActionSupport中提供了数据校验、国际化等一系列操作的方法。
 *
 */
public class ActionDemo3 extends ActionSupport{

	@Override
	public String execute() throws Exception {
		System.out.println("ActionDemo3执行了...");
		return NONE;
	}
}

Action的访问方法

但在实际开发中,我们一般是一个    模块    对应一个    类  ,一个    请求    对应类中的一个   方法

因此Struts2提供了三种访问的方法

通过method属性配置

前端代码

<h3>通过method方式</h3>
<a href="${ pageContext.request.contextPath }/userFind.action">查询用户</a><br/>
<a href="${ pageContext.request.contextPath }/userUpdate.action">修改用户</a><br/>
<a href="${ pageContext.request.contextPath }/userDelete.action">删除用户</a><br/>
<a href="${ pageContext.request.contextPath }/userSave.action">保存用户</a><br/>

 配置Struts2的包

<package name="demo3" extends="struts-default" namespace="/">
		<action name="userFind" class="com.itheima.struts.demo3.UserAction" method="find"></action>
		<action name="userUpdate" class="com.itheima.struts.demo3.UserAction" method="update"></action>
		<action name="userDelete" class="com.itheima.struts.demo3.UserAction" method="delete"></action>
		<action name="userSave" class="com.itheima.struts.demo3.UserAction" method="save"></action>
</package>

 这样子,不同的前端请求,就会访问到UserAction类中的不同的方法中去

通过通配符的方式设置

前端页面访问

<h3>通过通配符的方式</h3>
<a href="${ pageContext.request.contextPath }/product_find.action">查询商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_update.action">修改商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_delete.action">删除商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_save.action">保存商品</a><br/>

Struts2的包配置

<package name="demo3" extends="struts-default" namespace="/">
		
		<!-- 通配符的方式 -->
		<action name="product_*" class="com.itheima.struts.demo3.ProductAction" method="{1}"></action>
	</package>

动态方法访问(Struts2中默认是关闭的)

配置Struts2的包

<package name="demo3" extends="struts-default" namespace="/">
		<!-- 动态方法访问的方式 -->
		<action name="customer" class="com.itheima.struts.demo3.CustomerAction"></action>
	</package>

由于动态访问在Struts2中默认是关闭的,因此我们需要设置一下动态访问的常量,在struts.xml或其子配置文件中(如struts_demo3.xml)配置

<!-- 开启动态方法访问 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

编写动态访问路径,路径为     acting标签中配置的name   +   !   +    要访问的方法名 .action

<h3>通过动态方法访问的方式</h3>
<a href="${ pageContext.request.contextPath }/customer!find.action">查询客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!update.action">修改客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!delete.action">删除客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!save.action">保存客户</a><br/>

 

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值