Struts框架--获取servletApi

获取servletApi有两种方法,(在这里web.xml的配置我们就不写了,就是添加了一个过滤器,可以参考http://blog.csdn.net/zlk961543260/article/details/77073730,这里有web.xml的配置),下面介绍两种方法:

方法1:(推荐使用,简单好理解)

Struts.xml:这里不指定页面,我们只需看到控制台的输出就ok了。

<?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>
	<package name="p1" extends="struts-default" >
		<action name="action1" class="com.heima.action.severletApiAction"></action>	
	</package>
</struts>
动作类severletApiAction:

package com.heima.action;

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.ActionSupport;

public class severletApiAction extends ActionSupport {


	public String execute(){
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		ServletContext application = ServletActionContext.getServletContext();
		HttpSession session = request.getSession();
		System.out.println(request);
		System.out.println(response);
		System.out.println(application);
		System.out.println(session);
		return null;
	}
}
控制台输出结果:
org.apache.struts2.dispatcher.StrutsRequestWrapper@8076fa
org.apache.catalina.connector.ResponseFacade@128de10
org.apache.catalina.core.ApplicationContextFacade@103db92
org.apache.catalina.session.StandardSessionFacade@1135fb8
注意:这个在运行的时候: http://localhost:8080/J2EE_severletApi/action1,要加上action1,否则会404错误

方法2:

Struts中的配置不变,动作类severletApiAction如下:

package com.heima.action;

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 org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class severletApiAction implements ServletRequestAware,ServletResponseAware,ServletContextAware{
	private HttpServletRequest request;
	private HttpServletResponse response;
	private ServletContext application;

	public String execute(){
/*		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		ServletContext application = ServletActionContext.getServletContext();
		HttpSession session = request.getSession();*/
		System.out.println(request);
		System.out.println(response);
		System.out.println(application);
		//System.out.println(session);
		return null;
	}

	@Override
	public void setServletContext(ServletContext application) {
		this.application = application;
	}

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

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
}
这种方法实现了ServletRequestAware,ServletResponseAware,ServletContextAware这三个接口,通过注入的方式将三个值传入。这种方法运行过程较为复杂,实质是由一个拦截器实现的。具体可以看源码:在Java中ctrl + shift + t,输入ServletConfigInterceptor,可进入这个类中,有以下代码,其余的if都是跟这个一样的

	final Object action = invocation.getAction();   //得到动作类的引用,也就是severletApiAction的对象 
        final ActionContext context = invocation.getInvocationContext();  //获取contex对象

        if (action instanceof ServletRequestAware) {    //看severletApiAction的对象是不是属于ServletRequestAware(实现了那三个接口,当然属于了)
            HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);  //获取request对象
            ((ServletRequestAware) action).setServletRequest(request);      //action属于ServletRequestAware,可以强制转换成ServletRequestAware,然后调用我们方法中的setServletRequest方法。

        }
这个解释已经用注释说明,其实就是我们的类实现了那三个接口,然后找方法的时候现在我们的类中找,我们类中有就用自己的,没有就去父类中找,我们自己的类中定义了setServletRequest方法,所以就用我们自己的了。

结果如下:

org.apache.struts2.dispatcher.StrutsRequestWrapper@790988
org.apache.catalina.connector.ResponseFacade@128de10
org.apache.catalina.core.ApplicationContextFacade@11c4d9e

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值