struts2动态方法调用与j2ee交互传参

本文详细介绍了Struts2框架中动态方法调用的实现原理及应用,通过具体代码示例展示了如何在网页上进行加减乘除运算。同时,深入探讨了J2EE环境下参数传递的不同方式,包括ModelDriven接口、set/get方法、对象导航等,并分析了参数赋值过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态方法调用:

(action代码)

package com.zking.web;


import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ModelDriven;
import com.zking.entity.Cal;

public class CalAction implements ModelDriven<Cal>{

     private Cal cal = new Cal();
     private Object res;
     
     
     public Object getRes() {
		return res;
	}

	public void setRes(Object res) {
		this.res = res;
	}

	public String add() {
         ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())+Integer.valueOf(cal.getNum2()));
    	// res = Integer.valueOf(cal.getNum1())+Integer.valueOf(cal.getNum2());
    	 return "ok";
     }
     
     public String min() {
       ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())-Integer.valueOf(cal.getNum2()));
       //  res = Integer.valueOf(cal.getNum1())-Integer.valueOf(cal.getNum2());
    	 return "ok";
     }
     
     public String mul() {
        ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())*Integer.valueOf(cal.getNum2()));
       //  res = Integer.valueOf(cal.getNum1())*Integer.valueOf(cal.getNum2());
    	 return "ok";
     }
     
     public String div() {
        ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())/Integer.valueOf(cal.getNum2()));
      //   res = Integer.valueOf(cal.getNum1())/Integer.valueOf(cal.getNum2());
    	 return "ok";
     }

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

(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>
<script type="text/javascript">
 
 function doSubmit(num) {
	if(num == 1)
		claForm.action = "${pageContext.request.contextPath}/sy/calAction_add.action";
    else if(num == 2)
	    claForm.action = "${pageContext.request.contextPath}/sy/calAction_min.action";
    else if(num == 3)
	    claForm.action = "${pageContext.request.contextPath}/sy/calAction_mul.action";
    else if(num == 4)
	    claForm.action = "${pageContext.request.contextPath}/sy/calAction_div.action";    
    claForm.submit();
 }
</script>
</head>
<body>
   <h1>struts的入门</h1>
   <a href="${pageContext.request.contextPath}/sy/helloAction.action">点击测试1</a>
   
   <h1>动态方法的调用</h1>
   <form action="" id="claForm">
   Num1:<input type="text" name="num1">
   Num2:<input type="text" name="num2">
   <button value="+" onclick="doSubmit(1)">+</button>
   <button value="-" onclick="doSubmit(2)">-</button>
   <button value="*" onclick="doSubmit(3)">*</button>
   <button value="/" onclick="doSubmit(4)">/</button>
   </form>
  
</body>
</html>

j2ee的交互传参:

(action代码)

package com.zking.web;

import com.opensymphony.xwork2.ModelDriven;
import com.zking.entity.User;

/**
 * struts中的传值方式:
 * 1.游览器->后台
 *   1.modeldriven接口传值
 *   2.set,get 方法传值
 *   3.对象导航传值
 *   
 *   但会引发一个问题:参数赋值的问题
 *   user1.uname 时优先赋值的
 *   uname  没有值
 *   原因:就好比,一个人去面试,有三个公司的面试点,在面试第一个公司的时候成功面试上,那么就不会在去面试了
 *   
 * 2.后台  -> 游览器jsp 
 *   1.传统作用域向jsp传值
 *      与j2ee容器交互
 *    2.3.1 非注入 
        2.3.1.2 耦合
              ServletActionContext
        2.3.1.2 解耦(建立使用解耦模式)
              ActionContext
        2.3.2 注入
          2.3.2.1 耦合
          2.3.2.2 解耦
 *   2.值栈传值
 *   
 * @author 我是你爸爸
 *
 */
public class ParamAction implements ModelDriven<User>{
    // ModelDriven接口传值
	private User user1 = new User();
	//set   get方法传值
	//private String name;
	
	private String uname;
	//对象导航传值
	private User user2 = new User();

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

//	public String getName() {
//		return name;
//	}
//
//	public void setName(String name) {
//		this.name = name;
//	}
	
	

	public User getUser2() {
		return user2;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public void setUser2(User user2) {
		this.user2 = user2;
	}
	

	public String execute() {
		System.out.println("modelDriven接口传值:"+this.user1);
		System.out.println("set  get方法传值:"+this.uname);
		System.out.println("对象导航传值:"+this.user2);
		return null;
	}

}

(控制显示,参数赋值的问题)

 

 

2.3 与J2EE容器交互
    2.3.1 非注入
      2.3.1.2 耦合
              ServletActionContext

      2.3.1.2 解耦(建立使用解耦模式)
              ActionContext

   2.3.2 注入
      2.3.2.1 耦合
              作业:找出struts2中其它的几个注入接口(XxxAware)

      2.3.2.2 解耦

(相关代码展示)

package com.zking.web;

import java.util.Map;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;

public class J2eeAction implements ServletRequestAware{

	/**
	 * 注入:耦合:类实现接口  ServletRequestAware,ServletResponseAware
	 *       解耦:RequestAware  一般不用
	 *       
	 * 非注入:耦合:ServletActionContext.getRequest();
		           ServletActionContext.getResponse();
		            	
		             解耦:ActionContext context = ActionContext.getContext();
		           context.get("全类名");
	 */
	
	private HttpServletRequest req;
	
	public String execute() {
		return null;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		// TODO Auto-generated method stub
		this.req = arg0;
	}

//	@Override
//	public void setRequest(Map<String, Object> arg0) {
//		// TODO Auto-generated method stub
//		this.req = arg0.get("权限令名");
//	}
	
}

 

基于数据挖掘的音乐推荐系统设计实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cy_橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值