Struts2详解之页面跳转(五)

一 跳转之 转发(struts.xml默认的跳转方式)    

package cn.hd.jump;
import com.opensymphony.xwork2.ActionSupport;
public class ChainAction extends ActionSupport {
    public String jump(){
        System.out.println("转发到 TargetAction");
        return SUCCESS;
    }

}

struts.xml配置

<action name="chainAction_*" class="cn.hd.jump.ChainAction" method="{1}">
    <result name="success" type="chain">
        <!--跳转到下一个action的名字-->
        <param name="actionName">targetAction</param>
        <!--跳转到下一个action的命名空间-->
        <param name="nameSpace">/</param>
    </result>
    <allowed-methods>jump</allowed-methods>
</action>

二 跳转之重定向

    

package cn.hd.jump;

import com.opensymphony.xwork2.ActionSupport;

public class RedirectActon extends ActionSupport{
    public String jump(){
        System.out.println("执行了重定向到targetAction");
        return SUCCESS;
    }
}

struts.xml配置

<action name="redirectAction_*" class="cn.hd.jump.RedirectActon" method="{1}">
    <result name="success" type="redirectAction">
        <param name="actionName">targetAction</param>
        <param name="nameSpace">/</param>
    </result>
</action>

三 跳转之转发到自己的Action

package cn.hd.jump;
import com.opensymphony.xwork2.ActionSupport;
public class ChainAction extends ActionSupport {
    public String jump(){
        System.out.println("转发到 TargetAction");
        return SUCCESS;
    }
}
struts.xml配置

<result name="success" type="chain">
    <!--跳转到下一个action的名字-->
    <param name="actionName">targetAction</param>
    <!--跳转到下一个action的命名空间-->
    <param name="nameSpace">/</param>
</result>

四 跳转到重定向自己的Action

package cn.hd.jump;
import com.opensymphony.xwork2.ActionSupport;
public class RedirectActon extends ActionSupport{
    public String jump(){
        System.out.println("执行了重定向到targetAction");
        return SUCCESS;
    }

}

struts.xml配置

<action name="redirectAction" class="cn.hd.jump.RedirectActon">
    <result name="success" type="redirectAction">
        <param name="actionName">targetAction_login</param>
        <param name="nameSpace">/</param>
    </result>
</action>

五 不跳转 ,接收Ajax请求

        (1)使用原生的servletApi

            

package cn.hd.servletApi;
import com.alibaba.fastjson.JSONObject;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletResponseAware;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
public class demo2 extends ActionSupport implements ServletResponseAware {
    private HttpServletResponse response;
    @Override
    public String execute() throws Exception {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg","访问成功");
        jsonObject.put("code",1);
        String result = jsonObject.toJSONString();
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.write(result);
        out.flush();
        out.close();
        return NONE;
    }

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

Action 在struts2中,我们把它叫做数据中心,数据包括(Request原生对象、Response原生对象、Session原生对象、ServletContext原生对象)

Request(域)Map struts2不建议使用,如果要用就用ActionContext对象

Session(域)Map

ServletContext(域)Map

attr(域)Map

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
public class Demo extends ActionSupport {
    public String execute(){
        ActionContext context = ActionContext.getContext();
        //获得session
        Map<String, Object> session = context.getSession();
        session.put("name","莫邪");
        String name = (String) session.get("name");
        //获取application
        Map<String, Object> application = context.getApplication();
        application.put("age",10);
        //获取request
        Map<String,Object> request = (Map<String, Object>) context.get("request");
        request.put("name","君莫邪");
        context.put("name","君莫邪");
        return SUCCESS;
    }
}


//获得servletContext


import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
public class demo1 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        javax.servlet.http.HttpServletRequest request = ServletActionContext.getRequest();
        String name = request.getParameter("name");
        System.out.println(name);
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.write("name:莫邪");
        out.flush();
        out.flush();
        return NONE;
    }
}

ActionContext生命周期:

所有的servlet对象都存了,它的生命周期是随着其中最短的生命周期的创建和销毁。也就是request对象

每次请求到来。ActionConext都会重新创建

所以它解决了线程安全问题

使用servletApi响应ajax请求

首先获得response对象(2种方法)然后回到原生态servlet响应中

action中的方法的返回值必须是NONE(如果设置为NON那么在struts.xml中就不用写result标签了)

(2)Stream

Action类中,创建一个InputStream对象

给这个对象创建一个get方法

package cn.hd.ajax;
import com.alibaba.fastjson.JSONObject;
import com.opensymphony.xwork2.ActionSupport;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class StreamAction extends ActionSupport {
    private InputStream inputStream;
    public InputStream getInputStream() {
        return inputStream;
    }
    @Override
    public String execute() throws Exception {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg","访问stream成功");
        jsonObject.put("code",1);
        String result = jsonObject.toJSONString();
        inputStream=new ByteArrayInputStream(result.getBytes("UTF-8"));
        return SUCCESS;
    }
}

struts.xml中的result标签中设置type=stream

<package name="ajax" namespace="/" extends="struts-default">
    <action name="stream" class="cn.hd.ajax.StreamAction" method="execute" >
        <result name="success" type="stream"></result>
    </action>
</package>

Action最终可以将json字符串转化为inputStream流

(3)使用json插件

    ①导包


建立一个Action

定义你想要返回的json的键名

生成get和set方法

然后在Action访问的方法中为这个json键名的对象进行赋值

package cn.hd.ajax;
import com.opensymphony.xwork2.ActionSupport;
public class pluginAction extends ActionSupport {
    private String msg;
    private Integer code;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    @Override
    public String execute() throws Exception {
        msg="访问PluginAction成功";
        code=1;
        return SUCCESS;
    }
}

配置struts.xml文件

重新建package extends 继承不能写struts-default,要写json-default(在struts-json-plugin包的struts-plugin.xml中)

Action不变

result name 属性不变 ,type属性变为json(在struts-json-plugin包的struts-plugin.xml中)

<package name="plugin" namespace="/" extends="json-default">
    <action name="pluginAction" class="cn.hd.ajax.pluginAction" method="execute">
        <result name="success" type="json"></result>
    </action>
</package>




  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值