疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

struts2动作类及xml配置


 

  

 
一、编写动作类的三种方式
 
1、第一种方式: 
创建一个普通的Java类。它就是一个POJO(Plain Old Java Object),原始老的Java对象
 
public class DemoAction{
    public String hello(){
        return "success"
    }
}
 
2、第二种方式: 
创建一个普通类,实现Action接口,实现接口中的方法
 
/**
*Action接口中的常量
*SUCCESS  "success"  当执行成功后,前往指定的位置
*NONE     "none"     不返回任何结果视图,相当于return null
*ERROR    "error"    出现异常时,前往指定页面
*INPUT    "input"    用于数据回显
*LOGIN    "login"    一般用于返回登录页面
*/
public class DemoAction implements Action{
    public String execute() throws Exception{
        return null;
    }
}
 
3、第三种方式(开发中常用) 
创建一个普通类,继承ActionSupport
 
public class DemoAction extends ActionSupport{
    //当我们不写动作方法时,有一个默认的动作方法:execute()
}
二、动作方法
 
    写动作方法要求:方法必须是public类型;必须没有参数;返回值是String类型
 
public class DemoAction extends ActionSupport{
    public String actionMethod(){
        return "success"
    }
}
 
三、获取servletAPI
 
1、获取servletAPI的第一种方式
 
//动作方法
public String actionMethod(){
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpServletResponse response=ServletActionContext.getResponse();
    HttpSession session=request.getSession();
    ServletContext application=ServletActionContext.getServletContext();
}
 
2、获取servletAPI的第二种方式(依赖注入)
 
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext application;
public void setServletContext(ServletContext    context){
    application=context;
}
public void setServletRequest(HttpServletRequest request){
    this.request=request;
}
public void setServletResponse(HttpServletResponse response){
    this.response=response;
}
 
四、struts.xml文件详解
 
<?xml version="1.0" encoding="UTF-8"?>
<!--配置的约束-->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!--设置开发者模式-->
    <constant name="struts.devMode" value="true"/>
    <!--package:是指包,内可以写多个动作;name:包名称(唯一) extends:继承struts默认的配置-->
    <package name="p1" extends="struts-default">
        <!--action中 name:动作名称(相当于标识) class:动作类的全名 method:方法名称(执行相应方法的名称)-->
        <action name="action1" class="com.san.action.Action1" method="actionMethod">
            <!--result结果视图(相当于当该方法执行成功,返回success时,跳转到success.jsp页面)-->
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>
 
五、关于struts.xml没有提示的问题
 
    原因:没有找到对应的dtd文件(或者是电脑没有联网或者没有加配置的约束)。 
电脑没有联网时: 
    解决方法: 
找到struts-2.3.dtd解压出来(按图中步骤来) 
这里写图片描述
 
六、struts.xml中结果视图转发和重定向
 
    注意:namespace的默认值是:”“(空字符串),而不是”/”。
 
<!--转发到同包-->
<action name="动作名" class="动作类全名" method="动作方法名">
    <result name="返回名" type="chain"></result>
</action>
 
<!--重定向到同包-->
<action name="动作名" class="动作类全名" method="动作方法名">
    <result name="返回名" type="redirectAction"></result>
</action>
 
<!--转发到不同的包-->
<action name="" class="" method="">
    <result name="" type="chain">
        <!--使用注入思想-->
        <param name="namespace">另一个包的namespace的值</param>
        <param name="actionName">需要转发到的action或者页面</param>
    </result>
</action>
 
<!--重定向到不同的包-->
<action name="" class="" method="">
    <result name="" type="redirectAction">
        <!--使用注入思想-->
        <param name="namespace">另一个包的namespace的值</param>
        <param name="actionName">需要转发到的action或者页面</param>
    </result>
</action>