struts中访问Servlet api

13 篇文章 0 订阅

访问Servlet api

一.完全解耦,但只能操作作用域

1、不使用曾经学习过的servlet知识,可以去操作三个作用域
 
2、 ActionContext 工具类(Struts2的数据中心),action上下文对象

获得实例:ActionContext.getContext()

       api:

              ac.put(key,value), 相当于操作request作用域。request.setAttribute("key",value)

              ac.getSession().put(key,value),相当于操作session作用域。session.setAttribute("key",value)

              ac.getApplication().put(key,value),相当于操作application作用域。servletContext.setAtt...

提交的参数map, ac.getParameters();


在action中访问3大域和参数

Demo1Action:
package cn.hcx.f_servlet;

import java.util.Arrays;
import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class Demo1Action implements Action {

	public String execute() throws Exception {
		//如何在Action中访问3大域和 参数
		//获得request	
		Map<String,Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
		//获得session
		Map<String, Object> sessionScope = ActionContext.getContext().getSession();
		//获得application
		Map<String, Object> applicationScope =ActionContext.getContext().getApplication();
		//获得参数
		Map<String, Object>  params = ActionContext.getContext().getParameters();
		
		requestScope.put("name", "requestTom");
		sessionScope.put("name", "sessionTom");
		applicationScope.put("name", "applicationTom");
		//获得参数并打印
		String[] names = (String[]) params.get("name");
		System.out.println(Arrays.toString(names));
		return SUCCESS;
	}

}

struts.xml:
<struts>
	<package name="servlet" namespace="/servlet" extends="struts-default">
		<action name="Demo1Action" class="servlet.Demo1Action" method="execute">
			<result name="success" type="dispatcher">/servlet/demo1.jsp</result>
		</action>
	</package>
</struts>

servlet/demo1.jsp:
  <body>
   ${requestScope.name}<br>
   ${sessionScope.name}<br>
   ${applicationScope.name}<br>
  </body>

 

 
 

二.操作servlet对象(耦合)

ServletActionContext 工具类,获得需要servlet对象

api:
 
 
 
ServletActionContext对象 获得 原生的 Servlet对象(不推荐使用)
package cn.hcx.f_servlet;

import java.util.Arrays;
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.Action;
import com.opensymphony.xwork2.ActionContext;

public class Demo2Action implements Action {

	public String execute() throws Exception {
		//ServletActionContext对象 获得 原生的 Servlet对象
		
		HttpServletRequest request = ServletActionContext.getRequest();
		
		HttpServletResponse response =ServletActionContext.getResponse();
		
		HttpSession session = request.getSession();
		
		ServletContext context = ServletActionContext.getServletContext();

		
		
		return SUCCESS;
	}

}

 

三.通过实现接口,struts注入(不推荐)

需要实现指定的接口,此接口都提供setter,struts在执行action方法之前,将调用setter方法进行赋值。

       ServletRequestAware获得HttpServletRequest对象

       ServletResponseAware  获得HttpServletResponse对象

       ServletContextAware获得ServletContext对象

public class Demo5Action3 extends ActionSupport implements ServletRequestAware , ServletResponseAware ,ServletContextAware{
	
	
	private HttpServletRequest request;
	private HttpServletResponse response;
	private ServletContext servletContext;
	private HttpSession session;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.session = request.getSession();
		this.request = request;
	}
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}
	@Override
	public void setServletContext(ServletContext context) {
		this.servletContext = context;
	}

Demo1Action:
package servlet;


import java.util.Map;

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

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;


public class Demo1Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,SessionAware{
	
	private HttpServletRequest request;
	private HttpServletResponse response;
	private Map<String, Object> session;

	//注入request对象
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
		
	}
	
	//注入response对象
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
		
	}

	//注入session对象
	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
		
	}
	
	  public String execute(){
	    	System.out.println(request);
	    	System.out.println(response);
	    	System.out.println(session);
	    	return SUCCESS;
	    }
	

}

struts.xml:
<?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="servlet" namespace="/servlet" extends="struts-default"  >
		<action name="Demo1Action" class="cn.hcx.b_servlet.Demo1Action" method="execute" >
			<result name="success" type="dispatcher" >/index.jsp</result>
		</action>
	</package>
</struts>

 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值