Struts2---Action

原创 2016年08月29日 20:43:09

一、Action的定义
1、Action定义的三种方式:
(1)普通的一个类,其中必须要有一个方法:
public String execute() throws Exception{}
(2)实现Action接口,覆盖其中的execute()方法;
(3)继承ActionSupport类,覆盖execute()方法;ActionSupport中定义了几个字符串常量;
注意:表单的属性名和action类的set方法有关系,和action中的属性名没有关系;


2、Action的配置:
当用户发出请求后,首先通过在web.xml中配置的拦截器进行拦截后,接下来再struts.xml文件中进行查找业务逻辑的action;
Action配置在struts.xml文件中,struts2使用package来管理action,action是配置在package下的一个子元素。


3、Action的动态方法调用
方法1:直接指定要调用的方法,格式如下:
ActioName!methodName.action
  例如:<a href="<%=path%>/user!login.action>Login</a>
  user为action的名字,login为action类中被调用的方法名;
方法2:为action元素指定method属性,同一个action类对应多个逻辑action配置;
  例如:
  <package name="example" extends="struts-default" >
<action name="userLogin" class="com.my.action.LoginAction" method="login" >
<result name="success">/WEB-INF/pages/login/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="userRegister" class="com.my.action.LoginAction" method="register" >
<result name="success">/WEB-INF/pages/login/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
方法3:通配符
  action元素的name、class和method属性都可以指定通配符;
  例如:
<package name="example" extends="struts-default" >
<action name="*Action" class="com.my.action.LoginAction" method="{1}" >
<result name="success">/WEB-INF/pages/login/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
注释:只要求请求复合*Action.action模式,该action就会处理;
  若请求是registerAction.action,则调用action中的register方法;
  若请求时loginAction.action,则调用action类中的login方法。


二、类型转换器
struts2的类型转换器是基于OGNL的,在OGNL中有一个TypeConverter接口;
1、struts2提供了内置的类型转换器:boolean和Boolean、char和Character、int和Integer、long和Long、double和Double、float和Float、Date;
2、自定义类型转换器
方法1:实现ognl中的TypeConverter接口,其中有一个方法convertValue方法,该方法过于复杂;
方法2:使用DefaultTypeConverter类,该类实现了TypeConverter接口,并提供了一个简化的convertValue方法;
public Object convertValue(Map map, Object obj, Class toType){}
  参数map是表示OGNL上下文的Map对象,obj是需要转换的对象,toType是要转换的目标类型。
  例如:
   public class PointConverter extends DefaultTypeConverter
   {
@Override
public Object convertValue(Map map, Object obj, Class toType)
{
if(toType == Point.class)
{
String[] strs = (String[]) obj;
String[] xy = strs[0].split(",");
Point p = new Point();
p.setX(Integer.parseInt(xy[0]));
p.setY(Integer.parseInt(xy[1]));
return p;
}
else if(toType == String.class)
{
Point p = (Point) obj;
return "["+p.getX()+","+p.getY()+"]";
}
else
{
return null;
}
}

   }

方法3:stuts2提供了一个strutsTypeConverter抽象类,该类继承类DefaultTypeConverter,通过它更为简洁;
例如:
public class PointConverter extends strutsTypeConverter
{
@Override
public Object convertFromString(Map map, String[] obj, class toType)
{
String[] strs = (String[]) obj;
String[] xy = strs[0].split(",");
Point p = new Point();
p.setX(Integer.parseInt(xy[0]));
p.setY(Integer.parseInt(xy[1]));
return p; 
}

@Override
public String converterToString(Map map, Object obj)
{
Point p = new Point();
return "["+p.getX()+","+p.getY()+"]";
}

}
3、配置类型转换器(类型转换器实现)
  方法1:局部 (该文件放在action类所在的目录下面)
命名:ActionName-conversion.properties
内容:属性=类型转换器
 例如:point=com.my.action.PointConverter
方法2:全局 (该文件放在src目录下面)
命名:xwork-conversion.properties
内容:属性类型=类型转换器
 例如:com.my.bean.Point=com.my.action.PointConverter
 
4、struts2的类型拦截器错误处理



三、Action中访问Servlet API


方法1:ActionContext
(1) Object get(Object obj);相当于HttpServletRequest对象的getAttribute方法;
(2) Map getApplication(); Map中保存ServletContext作用域的对象;
(3) static ActionContext getActionContext(); 该静态方法返回ActionContent实例;
(4) Map getParameters(); 该方法和HttpServletRequest对象的getParamterMap方法对应;
(5) Map getSession(); Map中保存的是session作用域内的对象;
例如:
ActionContext ac = ActionContext.getActionContext();
Map<String, Object> session = ac.getSession();
session.put("user1", user);

方法2:实现如下的接口
(1)ServletContextAware 通过以来注入可以得到ServletContext对象;
(2)ServletRequestAware 通过以来注入可以得到HttpServletRequest对象;
(3)ServletResponseContextAware  通过以来注入可以得到HttpServletResponse对象;
例如:
public class LoginAction2 extends ActionSupport implements ServletRequestAware, ServletResponseAware
{
public HttpServletRequest request;
public HttpServletResponse reponse;

@Override
public String execute() throws Exception
{
if(username != null && username.equals("amake"))
{
HttpSession session = request.getSession();
session.setAttribute("username", username);
return SUCCESS;
}
this.setTip("用户名密码错误");
return INPUT;
}


@Override
public void setServletRequest(HttpServletRequest request)
{
this.request = request;



@Override
public void setServletResponse(HttpServletResponse response)
{
this.reponse = response;
}

private String username;
private String password;
private String tip;

public String getUsername()
{
return username;
}


public void setUsername(String username)
{
this.username = username;
}


public String getPassword()
{
return password;
}


public void setPassword(String password)
{
this.password = password;
}

public String getTip()
{
return tip;
}


public void setTip(String tip)
{
this.tip = tip;
}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

struts2中如何根据请求路径定位到详细的访问action

在struts2中在访问一个菜单链接时,我们只需要将相应的package 命名空间和 action的name进行组合,并加上相应的后缀,就可以直接访问到相应的Action了,那么这个过程是如何进行的,...

Struts2学习之Action接收参数方法二(用DomainModel接收参数(模型驱动))

用DomainModel接收参数(模型驱动) 如果要接受的参数的个数很多,可以不用定义属性而是直接定义一个对象。 前台代码: …… DoMainModel?user.userName...

Struts2中Action的动态调用方法

在Struts2中,Action执行的时候并不一定要执行execute,我们可以指定Action执行哪个方法,下面分别介绍三种方法来指定Action执行哪个方法: 1.第一种方法,通过Action...

struts2中的Action接口和Actionsupport接口的作用

Struts 2的Action无须实现任何接口或继承任何类型,普通的POJO类就可以用做Action类,   但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony....

struts2中多个submit向一个Action提交

有时候我们需要这样一种情况: 一个form表单,对应多个submit,需要提交到一个action,那么这时候我们应该怎么做呢? 其实struts1中就有关于多submit提交的处理方式,这里咱们只...

struts2中action接收参数的3种方法

Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action...

Struts2的使用注解配置Action(零配置)

1,首先引入struts2注解的jar包:struts2-convention-plugin.jar [java] view plain copy     ...
  • dhdhxgx
  • dhdhxgx
  • 2017年05月27日 17:15
  • 489

应用jQuery Ajax 实现前台与Struts2中Action的交互,并返回一个ArrayList的JSON对象,在前端表格中显示

功能描述: 在不刷新网页的情况下,发送Ajax异步请求,获取到Struts2 Action从数据库中读取的数值型数据,并在前端的表格中显示。 实现流程: 一.部署jQuery Ajax ...

Struts2在web.xml中配置为“/*”和“*.action,*.jsp”的差别

问题: 1、Struts2在web.xml中配置为“/*”和“*.action,*.jsp”的差别。 2、There is no Action mapped for namespace / a...

Struts2配置详解_配置Action

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2---Action
举报原因:
原因补充:

(最多只允许输入30个字)