提前祝大家新年快乐~~~!
项目是最好的学习方式,只是讲知识点的效果不是很好,你应该做的是学到一套自己的学习方法,才能受用终生
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中用了通配符,为了便于阅读,所以分开写来。