Struts2的请求作用域与转发

Struts2的请求作用域分为:
application request response session四种,获得到这四种作用域的方式有两种。
1.解耦合的方式
解耦合:就是不依赖servlet,是Struts2自己的。拿到的是Map集合
获取方式:application

//定义map集合,键是string,值是object。然后在下面写set,get方法,一定要写,不然页面获取不到值
  private Map<String , Object> application;
  
  public String test() {
   //获取application对象
   application=(Map<String, Object>) ActionContext.getContext().get("application");
   //通过application对象的集合,设置值,集合的也是一样的
   application.put("name", "张三");
   return SUCCESS;
  }
<!-- 页面上直接通过键获取值-->

页面上:${name}

request的方式

 //和上面的一样的
  private Map<String , Object> request;
  public String test() {
    //通过解耦合的方式获取集合
   List<Student> list=new ArrayList<Student>();
   list.add(new Student(1,"张三",17));
   list.add(new Student(2,"李四",27));
   list.add(new Student(3,"王五",37));
   //获取request对象
   request=(Map<String, Object>) ActionContext.getContext().get("request");
   //保存集合
   request.put("list", list);
   return SUCCESS;
  }

页面上:

 <!-- 我是通过s标签获取的,c标签是一样的。s标签获取要注意#后面写的是你保存到哪一个请求作用域,你就写哪一个 -->
 <s:iterator value="#request.list" var="li">
  <s:property value="#li.id"/>
  <s:property value="#li.name"/>
  <s:property value="#li.age"/><br/>
 </s:iterator>

response
其实response在这里作用不大。基本上没用

 //和上面的一样的
  private Map<String , Object> response;
public String test(){
	//获取response对象
	 response=(Map<String, Object>) ActionContext.getContext().get("response");
	 return success;
 }

session

//和上面的一样的
  private Map<String, Object> session;
  public String test() {
  student=new Student(1,"李四",20);
  //获取session对象
 session=ActionContext.getContext().getSession();
 //保存一个学生对象到集合中
   session.put("stu", student);
   return SUCCESS;
  }

页面上:

<!-- 通过请求作用域获取到对象,在从对象中获取到属性-->
<s:property value="#session.stu.name"/>

还有一种解耦合的方式:通过实现接口的方式
request 实现接口:implements RequestAware
sessionn实现接口:implements SessionAware
application实现接口:implements ApplicationAware
在类中还是要定义map集合,方式还是和上面一样
实现接口后需要重新接口中的方法,不然会报错

public void setRequest(Map<String, Object> request) {
//你定义的map集合等于括号中的map集合
   this.request=request;
  }

其他对象也是一样的,和上面的差不多。

2.耦合的方式
耦合:必须需要Struts2的依赖。拿到的是HttpServletRequest, ServletContext, HttpServletResponse, Session对象
使用的时候需要引入servlet的依赖
在pom.xml中引入

 <!--  servlet的核心依赖-->
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <scope>provided</scope>
 </dependency>

通过ServletActionContext的静态方法获取
request

public String test() {
//通过静态方法获取request对象
   HttpServletRequest request=ServletActionContext.getRequest();
   //设置值
   request.setAttribute("name", "小明");
   return SUCCESS;
  }

response

public String test() {
//通过静态方法获取response对象
   HttpServletResponse response=ServletActionContext.getResponse();
     return SUCCESS;
  }

session

public String test() {  
   //先获取request对象
   HttpServletRequest request=ServletActionContext.getRequest();
   //再获取session对象
   HttpSession session = request.getSession();
   session.setAttribute("name", "小明");   
   return SUCCESS;
  }

application

public String test() { 
//获取application对象
   ServletContext application=ServletActionContext.getServletContext();
   application.setAttribute("name", "小花");
   return SUCCESS;
  }

页面上和耦合的方式是一样的

也有实现接口的方式
request 实现接口:implements HttpServletRequest
sessionn实现接口:implements HttpSession
application实现接口:implements ServletContext
和解耦合的方式也是差不多的

请求转发方式:
Struts2里面差不多都是通过配置文件完成请求转发和重定向
这里加不加action是要看web.xml中怎样配置,
我是只有*.action才能进Struts2框架

<package name="default" namespace="/" extends="struts-default">
    <action name="testAction2_*" class="com.ywy.action.TestAction2" method="{1}">
    	<!-- 默认是请求转发,dispatcher可以不加,这种请求转发只能转发到页面,不能到action中-->
       <result type="dispatcher">index.jsp</result>
       
       <!--一个action转发到另一个action,后面一定不能加 .action-->
        <result type="chain">testAction</result>
        
        <!-- 重定向到一个页面,也可以重定向到action,重定向到action中,后面一定要加action-->
        <result type="redirect">index.jsp</result>
        
        <!-- 重定向到一个action中,可加可不加action-->
        <result type="redirect">testAction.action</result>
        
      </action>
</package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值