介绍:
strus2缘起于Apache Struts的WebWork框架,旨在提供相对于Struts框架的增强和改进,同时保留与Struts框架类似的结构。2005年12月,WebWork宣布WebWork 2.2以Apache Struts 2的名义合并至Struts。2007年2月第一个全发布(full release)版本释出。
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。


文章目录

  • 环境搭建
  • 动态方法调用
  • 传参数


环境搭建

1,首先第一步,当然是下载strus2的jar包,然后在项目的pom.xml里配置好,不知如何配置的朋友请参考我 Maven环境搭建和创建Maven项目 这篇博客里的环境搭建。

,2,第二步,配置文件,就和mvc.xml文件一样,strus2也是需要配置文件的,

他的核心源码jar包是

java中怎么传query Parameters_struts2


在这里我根据自己的意愿,划分了3个xml,参照的是这个jar包里的

java中怎么传query Parameters_struts_02


第一个xml是struts_vase.xml,里面相当于basedao文件,作用于所有模块的,

java中怎么传query Parameters_System_03


第二个是struts_sy.xml,类似mvc.xml等配置文件,在里面配置action来控制请求。

java中怎么传query Parameters_struts2_04


第三个是总配置文件,用来调用使用xml,这样如果是团队项目的话,可以很清晰的找到问题所在。

java中怎么传query Parameters_xml_05


3,第三步是配置拦截器,上文讲到的Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求。

java中怎么传query Parameters_System_06


这样环境已经搭建完成了。

动态方法调用

首先写一个action

package com.zlk.web;

import java.util.Map;

import com.zlk.entity.Cal;

public class HelloAction {

	private Cal cal1 = new Cal();
	private Cal cal2;
	private String sex;
	
	public Cal getCal2() {
		return cal2;
	}

	public void setCal2(Cal cal2) {
		this.cal2 = cal2;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String add() {
		System.out.println("调用add()方法");
		return "rs";
	}
	
	public String del() {
		System.out.println("调用del()方法");
		return "rs";
	}

	
}

然后在struts-sy-xml里面配置,

在package里的 extends属性是调用struts-base.xml里的,

action里的name属性中的号就像占位符一样,可以用数字来代替,1代表第一个号,

java中怎么传query Parameters_xml_07


接下来写好操作页面和接受结果页面,

在操作页面中,要如下方写好调用的action

java中怎么传query Parameters_struts_08


然后当我点击时,如果能在控制台输出。那就说明成功了。

传参数

一般在调用方法时,都得传参数过去,struts2和struts不同,他是采用拦截器的,所以他是不能使用在参数中传req过去,
但struts也有自己独特的传参方式,

当页面传参数过来时,这里介绍三种接受方式
1,,Action中定义属性,并提供get/set方法
userName, getUserName/setUserName
2, ModelDriven
返回实体,不能为null,不需要提供get/set方法
3, ModelDriven
返回实体和Action中属性重名,ModelDriven中优先级更高

package com.zlk.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;
import com.opensymphony.xwork2.ModelDriven;
import com.zlk.entity.Cal;

public class HelloAction implements ModelDriven<Cal> {
	private HttpServletRequest req;
	private Cal cal1 = new Cal();
	private Cal cal2;
	private String sex;
	
	public Cal getCal2() {
		return cal2;
	}

	public void setCal2(Cal cal2) {
		this.cal2 = cal2;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String add() {
		System.out.println("调用add()方法");
		return "rs";
	}
	
	public String del() {
		System.out.println("调用del()方法");
		return "rs";
	}
	
	/**
	 * implements modelDrivern
	 * @return
	 */
	public String accept1() {
		System.out.println(cal1);
		return "rs";
	}
	
	/**
	 * 类实例.属性名
	 * @return
	 */
	public String accept2() {
		System.out.println(cal2);
		return "rs";
	}
	
	/**
	 * set/get
	 */
	public String accept3() {
		System.out.println(sex);
		return "rs";
	}
	
	@Override
	public Cal getModel() {
		return cal1;
	}
}

然后在jsp页面调用一下,(页面报错是正常的,所以可以正常运行)

java中怎么传query Parameters_struts_09


正常情况下,控制台都可以接受到的。

而当action传返回值的时候,这里有两种方式可以返回:
1,get/set方法
2,通过req,

get/set方法是比较简单的,运用上方的方法就可以传递到jsp页面,但其中的accpt1是不可以的因为他是通过implements modelDrivern,并没有set/get,
所以可以通过第二种方法来传递。
而获取req有四种方式:
分为两类:
1, 非注入
1.1 耦合
ServletActionContext

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

2, 注入
2.1 耦合
2.2 解耦

注入也就是实现ServletRequestAware接口来获取request,然后他会提供下列方法,你只需在上方实例化一个req来接受他即可使用,

@Override
	public void setServletRequest(HttpServletRequest req) {
		this.req=req;
	}

而非注入也就是不继承
,但他是通过ServletActionContext.getRequest();来获取request的。