一 Action介绍
(1)Struts2中Action默认执行execute方法,方法返回类型String类型,默认为Success,此时success表示的意思:
<action><result name="success">/ActionIntroduction.jsp</result></action>
(2)Struts2中Path路径说明:在这命名空间下访问Action
<package name="path" extends="struts-default" namespace="/path"></package>
(3)Struts2中方法调用,在Action中配置属性method="add",返回类型为String,默认会执行此Action中方法为add方法,Form中action参数为ActionName!add进行调用。
<!---获取当前服务器请求路径--->
<% String context = request.getContextPath(); %>
<a href="<%=context %>/user/userAdd">添加用户</a>
(4)Sturts2中用户自定义Action需要继承com.opensymphony.xwork2.ActionSupport类,
可在Action写自定义方法。
public class UserAction extends ActionSupport {
public String add() { return SUCCESS; }
}
(5)Struts2中可以采用通配符来优化Struts2中Action配置项
<struts>
<constant name="struts.devMode" value="true" />
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
</package>
</struts>
(6) Sturts获取请求参数形式One,
服务器路径为/webpath/actionName!actionMethod?name=aa&pass=123
public class action Name extends ActionSupport {
// 用户自定义action
private String name;
private int age;
public String actionMethod () {
System.out.println("name=" + name);
System.out.println("age=" + age);
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;
}
}
(7)Sturts获取请求参数形式Two
服务器路径为/webpath/actionName!actionMethod?name=aa&age=123
//Bean定义
public class User {
private String name;
private int 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; }
}
//Action定义,采用实体对象获取request请求参数
private User user;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
public User getUser() { return user; }
public void setUser(User user) { this.user = user;}
(8)解决Sturts2中请求乱码问题,在web.xml配置,注意试用版本
<filter>
<filter-name>struts2</filter-name> <!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
(9)Sturts2常用配置项
//表示项目处于开发模式
<constant name="struts.devMode" value="true" />
// 以下配置注意版本试用,是Bug。
<constant name="struts.i18n.encoding" value="GBK" />
(10)采用Sturts提示对Form验证提示信息。
//Action定义
public class UserAction extends ActionSupport {
private String name;
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//jsp页面重要内容
<%@taglib uri="/struts-tags" prefix="s" %>
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
(11)Strust2中获取web对象request,response,appliction对象方法:
方法一:
package com.web.request;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Actionrequest_1 extends ActionSupport {
private static final long serialVersionUID = -8900237973267034703L;
private Map request;
private Map session;
private Map application;
public String getRequest1()
{
request=(Map)ActionContext.getContext().get("request");
session=(Map)ActionContext.getContext().getSession();
application=(Map)ActionContext.getContext().getApplication();
request.put("xiezepeng", "suenpeng");
session.put("aa", "难道不好吗?");
application.put("bb", "bb_1");
return "request1";
}
}
方法二:
package com.web.request;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class Actionrequest_2 extends ActionSupport
implements RequestAware,SessionAware,ApplicationAware{
private static final long serialVersionUID = 1816809311006760008L;
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
public String getRequest2()
{
request.put("suenpeng", "suenpeng");
session.put("www", "难道不好吗?");
application.put("ccc", "bb_1");
return "request2";
}
public void setRequest(Map<String, Object> request) {
this.request=request;
}
public void setSession(Map<String, Object> session) {
this.session=session;
}
public void setApplication(Map<String, Object> application) {
this.application=application;
}
}
方法三:
package com.web.request;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Actionrequest_3 extends ActionSupport{
private static final long serialVersionUID = 8585891770147868244L;
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String getRequest3() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return "request3";
}
}
方法四:
package com.web.request;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
public class Actionrequest_4 extends ActionSupport implements ServletRequestAware{
private static final long serialVersionUID = 4438481186630747030L;
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String getRequest4()
{
request.setAttribute("r11", "r1");
session.setAttribute("s11", "s1");
application.setAttribute("a11", "a1");
return "request4";
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}
}
以上方法中Action配置如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/">
<!--获取web值方法1-->
<action name="Actionrequest_1" class="com.web.request.Actionrequest_1" method="getRequest1">
<result name="request1">/request.jsp</result>
</action>
<!--获取web值方法2-->
<action name="Actionrequest_2" class="com.web.request.Actionrequest_2" method="getRequest2">
<result name="request2">/request2.jsp</result>
</action>
<!--获取web值方法3-->
<action name="Actionrequest_3" class="com.web.request.Actionrequest_3" method="getRequest3">
<result name="request3">/request3.jsp</result>
</action>
<!--获取web值方法4-->
<action name="Actionrequest_4" class="com.web.request.Actionrequest_4" method="getRequest4">
<result name="request4">/request4.jsp</result>
</action>
</package>
</struts>
页面编写如下:
<tr><td><s:property value="#request.r11"/> || <%=request.getAttribute("r11") %></td> </tr>