Struts2学习第二天

提前祝大家新年快乐~~~!

项目是最好的学习方式,只是讲知识点的效果不是很好,你应该做的是学到一套自己的学习方法,才能受用终生

namespace:

这里有一个概念叫做命名空间(namespace),第一天的学习中基本了解到struts2的运行过程,一切都要从URL地址开始,牢记这一点

根据struts中的内容,


命名空间你可以把它理解为包名,而action可以称为类名,就相当于是java中的包和类一样,映射到xml文件中,只是把他们写到了配置文件中,package的作用可以区分不同的包名和类名, 而namespace 表示的是url地址中解析的位置


第一天我们知道url会先找到namespace 中的位置,再根据namespace的位置找到对应的action名,把结果返回给客户端

所以上面第一个访问方式是这样的:


记住:struts2中用道德路径都是绝对路径

上面第二种方式访问方式:

你可以看到第二种访问方式没有写namespace,意思就是你对命名空间没有要求,任何的路径都会访问到namespace.jsp,把结果返回给你:


如图:你的命名空间可以随意起名字,但是最后一个访问路径的名字一定要是对应的 action对应的路径,所以找到的是action下面的java_web

Action:

下面来谈一谈action关键字

我们新建三个class 如图:


在IndexAction1 中是最简单的实现方式:

public class IndexAction1 {

	public String execute() {
		return "success";
	}
}
在IndexAction2 中采用实现外部接口的方式
public class IndexAction2 implements Action{

	public String execute() throws Exception {
		return "success";
	}

}

在IndexAction3 中采用继承的实现方式

public class IndexAction3 extends ActionSupport{
	
	public String execute() {
		return "success";
	}
	
//	一般用第三种方式,ActionSupport实现了execute(),返回的是一个"success"常量
}

一般我们会用第三种方式,用继承ActionSupport的方法比较灵活


源码中返回的SUCCESS,是一个final 常量:


而你在struts.xml需要配置这个class 类的映射


IndexAction3中返回的success 结果就是  struts.xml文件中的result 中的name

Path:

strut2中的路径一般用的都是绝对路径

新建一个PathAction:

public class PathAction extends ActionSupport{

	public String execute() throws Exception {
		return "path";
	}
	
}

action返回一个path 所以你需要在struts.xml中 的result改为path


结果匹配返回到path.jsp中:


request对象的方法见 博客:http://blog.csdn.net/u010180031/article/details/52369537

如果你用的是index.jsp 使用的是相对路径,但我们用的是绝对路径,所以你需要采用第一种方式。

Action中的方法调用

如图所示,新建StudentAction和 TeacherAction的两个类。每个类中都有两个方法,返回值不同

public class StudentAction extends ActionSupport{

	public String add() {
		return SUCCESS;
	}
	
	public String delete() {
		return ERROR;
	}
}
public class TeacherAction extends ActionSupport{
	
	public String add() {
		return SUCCESS;
	}
	
	public String delete() {
		return ERROR;
	}
}

在struts.xml中的配置如图:


在index.jsp中可以通过下面两种方式访问对应的jsp页面


第一种方式的method在struts.xml中配置, 第二种方式直接在index.jsp 中配置方法

一般第二种方法比较灵活,直接在一个配置文件中操作,不同于第一种方式不用换配置文件,灵活性更强


通配符

*表是一个或者多个

如下面例子新建一个StudentAction的类:

public class StudentAction extends ActionSupport{

	private String name;
	private int age;
	
	public String add() {
		System.out.println("add name = " + name);
		System.out.println("add age = " + age);
		return SUCCESS;
	}
	
	public void delete() {
		System.out.println("delete name = " + name);
		System.out.println("delete age = " + age);
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

在struts.xml有如下配置:


我们说在项目中约定是最重要的,就是说项目的命名要有一定的命名规则,由此引申了通配符的含义,比如上面的配置于下面的命名一起看:


在第一个例子中把add当作第一个关键字,所以方法中引申为{1} 要用大括号括起来,结果链接的地址也应该用关键字链接,上面两个例子中有一处不一样:第一个class中没有用通配符,第二个class中用了通配符,为了便于阅读,所以分开写来。




猜你喜欢

转载自blog.csdn.net/qq_36894974/article/details/79329746