struts2[2.2]获得ServletAPI

1.学习路线

今天咱们来学struts2获得ServletAPI,let`go!

                                                                                           图1.学习路线

                                                                                           图2.类和配置文件

api.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
		request:${requestScope.name }<br>
		session:${sessionScope.name }<br>
		application:${applicationScope.name }<br>
</body>
</html>

2.原理

                                                                                           图3.原理

3.获得获得ServletAPI方式

3.1通过ActionContext

新建一个Demo5Action类,继承ActionSupport,再创建一个execute()方法,return SUCCESS。(这个方法可以到源码中查看)

package cn.aisino.b_api;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
//如何在action中获得原生的Servlet
public class Demo5Action extends ActionSupport{

	public String execute() throws Exception {

		//request域-》map(struts2并不推荐使用原生request域,因为她的生命周期和ActionContext的生命周期是一样的!)
		//不推荐
		Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
		//推荐
		ActionContext.getContext().put("name", "requestTom");
		//原生的request被核心过滤器包装成新的request域对象,用于改变getAttribute()方法的取值位置
		//session域=》map
		Map<String, Object> sessionScope = ActionContext.getContext().getSession();
		sessionScope.put("name", "sessionTom");
		//applocation域-》map
		Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
		applicationScope.put("name", "applicationTom");
		return SUCCESS;
	}
}

    在包下的配置文件struts.xml中配置:

                                                                                           图3.类和配置文件

    在主配置文件struts.xml中配置(这是一种调用包下的配置文件的方式,相比于直接在主配置文件中配置action,这样可让代码更加的清晰整洁):

    启动服务器,在地址栏中访问Demo5Action:

    可获取到Demo5Action中的Tom!

3.2通过ServletActionContext

新建一个Demo6Action类,继承ActionSupport,再创建一个execute()方法,return SUCCESS。(这个方法可以到源码中查看)

package cn.aisino.b_api;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import jdk.nashorn.internal.ir.RuntimeNode.Request;
//如何在action中获得原生的Servlet
public class Demo6Action extends ActionSupport{

	public String execute() throws Exception {

		//原生request
		HttpServletRequest request = ServletActionContext.getRequest();
		//原生的session
		HttpSession session = request.getSession();
		//原生的response
		HttpServletResponse response = ServletActionContext.getResponse();
		//原生的servletContext
		ServletContext servletContext = ServletActionContext.getServletContext();
		return SUCCESS;
	}
}

    在包下的配置文件struts.xml中配置:

     启动服务器,在地址栏中访问Demo6Action:

    可获取到Demo6Action中的Tom!

3.3实现接口方式

新建一个Demo7Action类,实现ServletRequestAware接口,再创建一个execute()方法,return SUCCESS,需要重写setServletRequest()方法。

package cn.aisino.b_api;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
							//ctrl+shift+t,搜索*aware,选择Servlet下的接口,复制接口名称,在Demo8Action中实现
public class Demo7Action extends ActionSupport implements ServletRequestAware{

	private HttpServletRequest request;
	public String execute() throws Exception {

		System.out.println("原生request:"+request);		
		return SUCCESS;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {

		this.request = request;
	}
}

    在包下的配置文件struts.xml中配置:

     启动服务器,在地址栏中访问Demo7Action:

    可获取到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值