struts2入门

一.环境搭建

1.导包

到要导入的9个包

commons-fileupload-1.2.2

commons-io-2.0.1

commons-lang-2.5

commons-logging-1.1.1

freemarker-2.3.18

javassist-3.11.0GA

ognl-3.0.4

struts2-core-2.3.1.2

xwork-core-2.3.1.2


2.web.xml

在其中添加过滤器,接收任何的网站,执行org.apache....类

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

3.struts.xml

在src下面新建struts.xml,并将<!.....>这其中的代码粘贴进去,在<struts>之间进行配置

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

</struts>

二.完成第一个struts2的例子

1.新建jsp文件:result.jsp

2.写一个继承ActionSupport的类:HelloWorldAction.java

public class HelloWorldAction extends ActionSupport{


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

	
}

3.在struts.xml中添加action行为

<struts>
    
    <package name="default" namespace="/" extends="struts-default">
      
      <action name="helloworld"  class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>

      </action>
    
    </package>
</struts>

指定了action的行为类是HelloWorldAction,然后调用其中默认的方法(execute),最后跳转到根目录下的result.jsp

注意这个action的name属性,默认的情况下调用的网址是:.../项目名/helloworld.action

4.原理

先来看张图


其过程是:客户请求,在web.xml中的过滤器进行过滤,当ActionMapper检测到网址的后缀名是以.action结尾的话,就交个StrusPrepareAndExecuteFilter(和之前web.xml中的filter的class是一样的),然后会通过Manager与struts.xml关联,在通过一些拦截器后执行action,并返回到Template,最后在通过拦截器,回复到客户端


三.struts的基本用法简介(讲接收参数,结果处理)

1.接收参数的三种方法

<1>action属性

<form action="helloworld.action" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="text">
<input type="submit" value="提交" >
在和helloworld.action关联的方法中

public class HelloWorldAction extends ActionSupport{

	/*
	 * 第一种获取表单值的方法是使用和表单中相同的属性名,
	 * 一定要记得添加set,get方法,表单会自动通过这些方法将对应的值添加进去
	 */
	private String username;
	private String password;
	

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		System.out.println(username);
		
		return SUCCESS;
	}
}

<2>使用DomainModel

传入一个对象,类User按照JavaBean写法,然后是在jsp的表单中属性名前面加上对象名

下面调用的是loginAction()方法,这个需要在struts的action里添加method属性为"loginAction"

public class HelloWorldAction extends ActionSupport{

	/*
	 * 第二种接收参数的方法是使用对象,同样要使用set,get方法
	 * 要实现表单中的属性名和该对象中的属性匹配,需要在表单中添加对象名,来确定往哪个对象中传值
	 */
	private User user;

	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

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

	public String  loginAction(){
		
		
	
		System.out.println(user.getUsername());
		return SUCCESS;
	}
}

<3>实现ModelDriven接口

与第二种方法不同的是不用再jsp页面使用对象名来命名了,直接使用和User匹配的属性,即第一种中使用的

public class HelloWorldAction extends ActionSupport implements ModelDriven<User>{

	/*
	 * 第三种方法是实现ModelDriven接口
	 */
	User user=new User();
	
	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	public String  loginAction(){
		System.out.println(user.getUsername());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
}

2.关于input

限制输入的条件

HelloWorldAction类

public class HelloWorldAction extends ActionSupport implements ModelDriven<User>{

	User user=new User();
	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	public String  loginAction(){
		System.out.println(user.getUsername());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	@Override
	public void validate() {
		// TODO Auto-generated method stub
		if(user.getAge()==0){
			//如果年龄为空,就会调用下面这句,返回到struts中的result="input"的jsp页面
			this.addFieldError("age", "年龄不能为空");
			//if语句写在其他函数中要想自动返回还要加return INPUT;
		}
	}
}

上面的if条件是可以写到loginAction中的,只是要多加一条return的语句,因为下面struts.xml中action对应的方法就是loginAction,当然ActionSupport类给我们提供了更新的方法,会自动调用

struts.xml

<struts>
    
    <package name="default" namespace="/" extends="struts-default">
      
      <action name="helloworld" method="loginAction" class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>
          <result name="input">/login.jsp</result>
      </action>
    
    </package>
</struts>

在jsp页面中添加s标签

声明

<%@ taglib prefix="s" uri="/struts-tags" %>
在年龄input的后面添加如下语句

<s:fielderror name="age"></s:fielderror>
然后当login.jsp页面中提交后,如果age等于空,就会显示年龄不能为空



基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值