我用的是Struts2为2.3.4版本的
Struts2的了解
1)Struts2框架主要是通过过滤器将Struts集成到Web应用中去,这个过滤器就是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.通过它Struts2可以拦截Web应用中的HTTP请求,并将这个请求转发到指定的Action进行处理,Action根据处理过后的结果返回给客户端指定的页面。
web.xml的配置
<filter>
<filter-name>Struts2<filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2<filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
自带struts.xml的配置
<struts>
<package name="myPackage" extends="struts-default">
<action name="first">
</span><!--处理成功后映射的页面 -->
</span><result>/first.jsp</result>
</action>
</package>
</struts>
Action对象
1)Action对象是Struts2的重要对象,主要用于HTTP请求,通常情况下,我们实现一个Action接口只要是实现其中的execute()方法还有了解其中的5个静态常量。
public interface Action{
public static final String SUCCESS = "success";
public static final String NONE= "none";
public static final String SUCCESS = "error";
public static final String SUCCESS = "input";
public static final String SUCCESS = "login";
public String execute() throws Exception;
}
Struts2的Action动态方法调用
1)指定method属性
<struts>
<package name="user" namespace="/" extends="struts-default">
<action name="page" class="topPage.UserAction">
<result>jsp/userPage.jsp</result>
</action>
<action name="add" method="addUser" class="topPage.UserAction">
<result>jsp/userAdd.jsp</result>
</action>
<action name="update" method="updateUser" class="topPage.UserAction">
<result>jsp/userUpdate.jsp</result>
</action>
<action name="remove" method="removeUser" class="topPage.UserAction">
<result>jsp/userRemove.jsp</result>
</action>
</package>
</struts>
2)使用感叹号(!)
<struts>
<package name="user" namespace="/" extends="struts-default">
<action name="page" class="topPage.UserAction">
<result>jsp/userPage.jsp</result>
<result name="addUser">jsp/userAdd.jsp</result>
<result name="updateUser">jsp/userUpdate.jsp</result>
<result name="removeUser">jsp/userRemove.jsp</result>
</action>
</package>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
</struts>
其中addUser、updateUser、removeUser跟Action中的方法名称和返回值一致。
public String addUser(){
System.out.println("新增用户");
return "addUser";
}
public String updateUser(){
System.out.println("修改用户");
return "updateUser";
}
public String removeUser(){
System.out.println("删除用户");
return "removeUser";
}
3)使用通配符(*)
<struts>
<package name="user" namespace="/" extends="struts-default">
<action name="page_*" method="{1}" class="topPage.UserAction">
<result>jsp/userPage.jsp</result>
<result name="addUser">jsp/userAdd.jsp</result>
<result name="updateUser">jsp/userUpdate.jsp</result>
<result name="removeUser">jsp/userRemove.jsp</result>
</action>
</package>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
</struts>
其中addUser、updateUser、removeUser跟Action中的方法名称和返回值一致。
public String addUser(){
System.out.println("新增用户");
return "addUser";
}
public String updateUser(){
System.out.println("修改用户");
return "updateUser";
}
public String removeUser(){
System.out.println("删除用户");
return "removeUser";
}
接收参数
1)使用Action属性接收参数
Action代码
public class UserAction extends ActionSupport {
private String name;
private int age;
private char sex;
public String userMessage(){
System.out.println("用户信息:"+name+", "+age+", "+sex);
return 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 char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
struts.xml配置文件代码
<package name="login" namespace="/" extends="struts-default">
<action name="login" method="userMessage" class="topPage.UserAction">
<result>jsp/userPage.jsp</result>
</action>
</package>
login.jsp代码
<form action="login.action" method="post">
用户名:<input type="text" name="name">
年龄:<input type="text" name="age">
性别:<input type="text" name="sex">
<input type="submit" value="提交">
</form>
2)使用Domain Model接收参数
实体类代码
public class User {
private String name;
private int age;
private char sex;
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 char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
Action类代码
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String userMessage(){
System.out.println("用户信息:"+user.getName()+", "+user.getAge()+", "+user.getSex());
return SUCCESS;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
login.jsp代码
<form action="login.action" method="post">
用户名:<input type="text" name="user.name">
年龄:<input type="text" name="user.age">
性别:<input type="text" name="user.sex">
<input type="submit" value="提交">
</form>
配置文件不变
3)使用ModelDriven接收参数
实体类不变
Action类代码
public class UserAction extends ActionSupport implements ModelDriven<User> {//实现ModelDriven接口
private User user = new User();//必须实例化
public String userMessage(){
System.out.println("用户信息:"+user.getName()+", "+user.getAge()+", "+user.getSex());
return SUCCESS;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
@Override
public User getModel() {//返回前台要展示的对象
return user;
}
}
login.jsp代码
<form action="login.action" method="post">
用户名:<input type="text" name="name">
年龄:<input type="text" name="age">
性别:<input type="text" name="sex">
<input type="submit" value="提交">
</form>
配置文件不变