美文网首页
自定义响应

自定义响应

作者: _FireFly_ | 来源:发表于2020-12-11 11:33 被阅读0次

直接响应

response.getWriter().write("main.jsp");

间接响应

转发 request.getRequestDispatcher("main.jsp").forward(request,response);
重定向 response.sendRedirect("main.jsp") ;

自定义响应类型

  1. 自定义响应类 implements Result 接口,重写方法
    void execute(ActionInvocation var1){
    //编写具体的响应代码
    }
public class MyResult implements Result {

    private int b ;
    public void setB(int b) {
        this.b = b;
    }

    @Override
    public void execute(ActionInvocation actionInvocation) throws Exception {
        //直接响应
        System.out.println("-------->"+b);
        HttpServletResponse resp = ServletActionContext.getResponse() ;
        /*
        人为的要求,将希望响应的内容,写在一个action.message属性中,并提供getMessage()方法
         */
        Object action = actionInvocation.getAction() ;
        Class c = action.getClass() ;
        String result = "" ;//装载直接响应的文本
        try{
            Method m =  c.getMethod("getMessage") ;
            result = (String) m.invoke(action);// action.getMessage() ;
        }catch(NoSuchMethodException e){
            //业务程序员虽然想直接响应,但没有提供直接响应的内容,响应空串(默认)
        }
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write(result);
    }
}
  1. 在struts.xml的<package>中声明响应类型
    <result-types>
    <result-type name="result1" class="com.util.MyResult"></result-type>
    </result-types>
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

    <constant name="struts.action.extension" value="action,,do" />
    <constant name="struts.configuration.xml.reload" value="true" />
   <package name="dmc" extends="json-default" namespace="/">

       <result-types>
           <result-type name="result1" class="com.util.MyResult"> </result-type>
       </result-types>
       <action name="test4" class="com.action.TestAction1" method="t4" >
            <result name="success" type="result1" >
                <param name="b" >200</param>
            </result>
       </action>
   </package>
</struts>
  1. 在<action>响应时,<result type="result1"> 使用指定的响应类型
    <action name="test4" class="com.action.TestAction1" method="t4" >
    <result name="success" type="result1" ></result>
    </action>
    扩展:
    响应类型也可以传递初始化参数,在声明或使用时,通过<param>子标签指定参数,在MyResult类对象中定义与参数同名的属性并实现set方法。
    <result name="success" type="result1" >
    <param name="b" >200</param>
    </result>
package com.action;
public class TestAction1 {
    private int b;
    public void setB(int b) {
        this.b= b;
    }

    public String t4(){
        System.out.println("-------------t4------------");
        message = "main.jsp" ;
        return "success" ;
    }
        return "success" ;
    }
}

返回类型为json

struts提供了一个插件工具,可以将响应数据转换成json格式,并响应struts2-json-plugin.jar

  1. 引入插件依赖
  2. 在struts.xml中设置<package extends="json-default" >
  3. <result type="json" >
    <action name="test5" class="com.action.TestAction1" method="t5">
    <result name="success" type="json"></result>
    </action>
    转换机制:
    jsonResult对象在处理响应时,会(通过ActionInvocation)获得action对象,通过action对象的所有get方法,获得相应返回值,将这些返回值及其属性名成对存入map集合。
    private List<Car> cars ;
    public List<Car> getCars(){ return cars ;}
    map.put( "cars" , action.getCars() );
    将装载好数据的map集合转换成json,并直接响应
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
   <package name="dmc" extends="json-default" namespace="/">

       <result-types>
           <result-type name="result1" class="com.util.MyResult"> </result-type>
       </result-types>
      <action name="test5" class="com.action.TestAction1" method="t5">
           <result name="success" type="json"></result>
       </action>
   </package>
</struts>

相关文章

网友评论

      本文标题:自定义响应

      本文链接:https://www.haomeiwen.com/subject/igsrgktx.html