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:

    可获取到。

猜你喜欢

转载自blog.csdn.net/a_cherry_blossoms/article/details/84530089
今日推荐