Struts2访问数据

一、使用ContextAction
1.简单index.jsp页面

<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <a href="TestActionContext.action?name=username">TestActionContextAction</a>
    <br>
    <br>
    <a href="TestAware.action?name=username">TestAware</a>

    <%
    if(application.getAttribute("date")==null)
        application.setAttribute("date", new Date());
    %>
</body>
</html>

2.TextActionContextAction.java

分别访问application、session、request、parameters

package Demo2;

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;

import com.opensymphony.xwork2.ActionContext;

public class TestActionContextAction {


    public String execute()
    {
        //获取ActionContext对象,ActionContext是Action的上下文对象,
        //可以从中获取一切Action对象
        ActionContext actionContext=ActionContext.getContext();
        //获取application对应的Map,并向他添加一个属性
        //通过调用ActionContext对象的getApplication()方法获取application对象的Map集合
        Map <String,Object> applicationMap=actionContext.getApplication();
        applicationMap.put("applicationKey", "applicationValue");
        //获取属性
        Object date=applicationMap.get("date");
        System.out.println("date  "+date);
        //  获取session对应的Map,并向他添加一个属性
        Map<String, Object> sessionMap = actionContext.getSession();
        sessionMap.put("sessionkey", "sessionvalue");
        System.out.println(sessionMap.getClass());
        //调用这个方法使得session失效
        if(sessionMap instanceof SessionMap)
        {
            SessionMap sm=(SessionMap) sessionMap;
            sm.invalidate();
            System.out.println("session失效了");
        }

        //  获取request对应的Map,并向他添加一个属性
        //Action并没有提供getContext方法来获取request对应的MAp,手工调用get();
        Map <String,Object> requestMap=(Map<String, Object>) actionContext.get("request"); 
        requestMap.put("requestkey", "requestvalue");
        //parameters只允许读数据,不能写数据,写了也没错但不能访问
        Map <String,Object> parameters=actionContext.getParameters();
        System.out.println(((String[])parameters.get("name"))[0]);
        parameters.put("age",100);
        return "success";
    }

}

3、要跳转的test-actionContext.jsp文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>Test ActionContext page</h4>
    application:${applicationScope.applicationKey}
    <%=application.getAttribute("applicationKey") %>
    <br>
    <br>
    session:${sessionScope.sessionkey}
    <%=session.getAttribute("sessionkey") %>
    <br>
    <br>
    request:${requestScope.requestkey}
    <%=request.getAttribute("requestkey") %>
    <br>
    <br>
    age:${parameters.age}
</body>
</html>

4.struts.xml配置文件

result 是 action 节点的子节点代表 action 方法执行后, 可能去的一个目的地

一个 action 节点可以配置多个 result 子节点.

result 的 name 属性值对应着 action 方法可能有的一个返回值.

/index.jsp
重点:name的名字要与execute()函数返回值相同

<?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-default struts-default 
      这个包在 struts-default.xml 文件中定义.
      默认值为"/". 若 namespace 有一个非默认值, 则要想调用这个包里的Action, 
      就必须把这个属性所定义的命名空间添加到有关的 URI 
      字符串里 http://localhost:8080/contextPath/namespace/actionName.action
 -->
 <!-- 
    配置一个 action: 一个 struts2 的请求就是一个 action name: 对应一个 struts2 的请求的名字    
    result: 结果. 表示 action 方法执行后可能返回的一个结果. 所以一个 action 节点可能会有多个 result 子节点. 
 -->
<struts>
<package extends="struts-default" name="Hello" namespace="/">   
    <action name="TestActionContext" class="Demo2.TestActionContextAction">
        <result name="success">/test-actionContext.jsp</result> 
    </action>
    <action name="TestAware" class="Demo2.TestAwareAction">
        <result name="success">/test-aware.jsp</result> 
    </action>
</package>
</struts>

二、实现XxxAware接口
1、实现接口的TestAwareAction.java文件

1)实现接口Xxx
2)定义私有成员private Map<String,Object> Xxx;
3)实现 public void setXxx(Map<String, Object> Xxx)
package Demo2;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

public class TestAwareAction implements ApplicationAware ,SessionAware,
RequestAware,ParameterAware{

    public String execute()
    {
        //向application中加入一个属性:applicationkey2
        application.put("applicationkey2", "applicationvalue2");
        //从application中读取一个属性,打印
        //其他的类似对相应siyou成员赋值session parameters request
        System.out.println(application.get("date"));
        return "success";
    }
    private Map<String,Object> application;          
    @Override
    public void setApplication(Map<String, Object> application) {
        this.application=application;
    }
    @Override
    public void setSession(Map<String, Object> session) {
        // TODO Auto-generated method stub

    }
    @Override
    public void setParameters(Map<String, String[]> parameters) {
        // TODO Auto-generated method stub

    }
    @Override
    public void setRequest(Map<String, Object> request) {
        // TODO Auto-generated method stub

    }
}

2.jsp显示页面如上面ContextAction的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值