从Apache网站下载Struts2的Jar包。
打开压缩包中的Blank实例,copy其中的Struts.xml到项目的src目录下,copy其中的Web.xml中的filter部分到项目中的web.cml中。
copy blank实例中lib目录中的所有Jar包到项目中的lib目录下。
一般来说Action就是MVC中的Controller,Action一般要继承ActionSupport类
在里面写各种处理的方法即可。
<package name="default" namespace="/" extends="struts-default"> <action name="addStudent" class="com.lubby.action.Action1" method="add"> <result name="success">/welcome.jsp</result> </action> </package>namespace是指虚拟的路径,如果namespace="student" 那么action的路径就是localhost/student/addStudent.
extends一般默认的是struts-default
action标签中的那么就是浏览器请求的地址
class属性是指处理请求的Action是哪一个,包名+Action类名
method属性是指Action中处理请求的方法名
result就是转向返回的页面
name属性是指如果方法返回的字符串匹配就返回result中的页面。
使用通配符的方式使得action的配置更简洁
<package name="default" namespace="/" extends="struts-default">
<action name="student*" class="com.lubby.action.Action1"
method="{1}">
<result name="success">/student{1}.jsp</result>
</action>
<action name="addStudent" class="com.lubby.action.Action1"
method="add">
<result name="success">/welcome.jsp</result>
</action>
</package>
譬如浏览器请求的是studentDelete那么method的值就是Delete,就会交给Action中的Delete方法处理。
Action接收页面的参数非常简单。
只要在Action中声明的属性,并且写了set,get方法,那么前台的name和属性名一样,Struts就会自动调用set方法把值传给相应的属性。
如果Action中声明的属性是一个类对象,只要写了set,get方法,那么前台的name为对象名.对象属性。对象就能获得该属性值。
package com.lubby.action;
import java.util.Map;
import com.lubby.bean.Student;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Action1 extends ActionSupport{
private String name;
private int age;
private Student stu;
public String add(){
System.out.println(name());
System.out.println(age());
System.out.println(stu.getName());
System.out.println(stu.getAge());
return Action.SUCCESS;
}
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;
}
public Student getStu() {
return stu;
}
public void setStu(Student stu) {
this.stu = stu;
}
}
前端页面
<form action="addStudent" method="get">
<input type="text" name="name">
<input type="text" name="age">
<input type="text" name="stu.name"> <input type="text" name="stu.age"> <input type="submit"> </form>
result有个type标签,其中最常用的两个是dispatcher和redirect。
如果不写type的话,默认是dispatcher
区别:dispatcher是服务器跳转,客户端的地址栏中地址不会变的,request和session在跳转的页面保持不变。其实是整个ActionContext都没有改变。
redirect可以认为是客户端跳转,就是服务器告诉客户端重新进入新的地址,客户端的地址栏中的地址发生了改变,request和session改变了。
原文:http://blog.csdn.net/liu00614/article/details/19047311