5.struts2中Action类中获取ServletAPI的三种方式

**Servlet的API的访问(开发中偶尔会使用到)**

	1.在Action类中也可以获取到Servlet一些常用的API,有如下三种方式获取
		* 完全解耦合的方式
		* 使用接口注入的方式
		* 使用ServletActionContext中静态方法直接访问Servlet的API

		* 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上。
			* 提供JSP注册的页面,演示下面这三种方式:
				<h3>注册页面</h3>
				<form action="${ pageContext.request.contextPath }/xxx.action" method="post">
					姓名:<input type="text" name="username" /><br/>
					密码:<input type="password" name="password" /><br/>
					<input type="submit" value="注册" />
				</form>

	2.完全解耦合的方式
		* 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API
		* 一些常用的方法如下:
			* static ActionContext getContext()  										-- 获取ActionContext对象实例
			* java.util.Map<java.lang.String,java.lang.Object> getParameters()  		-- 获取请求参数,相当于request.getParameterMap();
			* java.util.Map<java.lang.String,java.lang.Object> getSession()  			-- 获取的代表session域的Map集合,就相当于操作session域。
			* java.util.Map<java.lang.String,java.lang.Object> getApplication() 		-- 获取代表application域的Map集合
			* void put(java.lang.String key, java.lang.Object value)  					-- 注意:向request域中存入值。

		* 完成代码的测试

    3.使用接口注入的方式
		* Struts2框架中提供了一些接口,编写的Action类可以是去实现这些接口,然后实现这些接口中的方法,这些方法都是把一些Servlet的常用对象通过参数的方式传递进来。
		* 常用的接口如下:
			* ServletRequestAware		-- 注入request
			* ServletContextAware		-- 注入ServletContext
			* ServletResponseAware		-- 注入response.

	4.使用ServletActionContext中静态方法直接访问Servlet的API
		* Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法
		* 具体的方法如下
			* getPageContext();
			* getRequest()
			* getResponse();
			* getServletContext();

demo4.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>

<h3>注册页面(完全解耦合的方式)</h3>
<form action="${ pageContext.request.contextPath }/regist.action" method="post">
	姓名:<input type="text" name="username" /><br/>
	密码:<input type="password" name="password" /><br/>
	<input type="submit" value="注册" />
</form>

<h3>注册页面(接口注入的方式)</h3>
<form action="${ pageContext.request.contextPath }/regist2.action" method="post">
	姓名:<input type="text" name="username" /><br/>
	密码:<input type="password" name="password" /><br/>
	<input type="submit" value="注册" />
</form>

<h3>通过ServletActionContext对象的方式</h3>
<form action="${ pageContext.request.contextPath }/regist3.action" method="post">
	姓名:<input type="text" name="username" /><br/>
	密码:<input type="password" name="password" /><br/>
	<input type="submit" value="注册" />
</form>

</body>
</html>

struts_demo4.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="demo4" extends="struts-default" namespace="/">
		<!-- 完全解耦合的方式 -->
		<action name="regist" class="demo4.UserAction" method="regist">
			<result>/demo4/success.jsp</result>
		</action>

		<!-- 接口注入的方式 -->
		<action name="regist2" class="demo4.UserAction2" method="regist">
			<result>/demo4/success.jsp</result>
		</action>

		<!-- 使用ServletActionContext对象的方式 -->
		<action name="regist3" class="demo4.UserAction3" method="regist">
			<result>/demo4/success.jsp</result>
		</action>
	</package>
</struts>

Action:

package demo4;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 完全解耦合的方式
 * @author mjl
 *
 */
public class UserAction extends ActionSupport{

	public String regist(){

		//接收表单的数据
		//先获取到ActionContext对象
		ActionContext context=ActionContext.getContext();
		//获取请求的参数
		Map<String, Object> map = context.getParameters();
		//通过Key获取值
		String[] username=(String[]) map.get("username");
		String[] password=(String[]) map.get("password");
		System.out.println("用户名:"+username[0]+",密码:"+password[0]);

		//获取session
		Map<String, Object> sessionMap = context.getSession();
		//像该map存入具体的值
		sessionMap.put("sessName", "美美");

		return SUCCESS;
	}
}

package demo4;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction2 extends ActionSupport implements ServletRequestAware{

	private HttpServletRequest request;

	public void setServletRequest(HttpServletRequest request) {
		this.request=request;
	}

	public String regist(){
		String username=request.getParameter("username");
		request.getSession().setAttribute("sessName", username);
		return SUCCESS;
	}
}

package demo4;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 采用servletActionContext对象的方法
 * @author mjl
 *
 */
public class UserAction3 extends ActionSupport{

	public String regist(){
		HttpServletRequest request = ServletActionContext.getRequest();
		String username=request.getParameter("username");
		request.getSession().setAttribute("sessName", username);
		return SUCCESS;
	}
}

  

  

原文地址:https://www.cnblogs.com/syj1993/p/8509368.html

时间: 2024-10-01 02:09:07

5.struts2中Action类中获取ServletAPI的三种方式的相关文章

struts2的action从request获取参数值的几种方式

使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对: $.post(url, "name=aty&age=25")和$.post(url, {"name":"aty","age":25}).显然,使用json的方式比使用字符串拼接要方 便.对于后台的action来说,这2种方式是等价的,而且jquery也提供了param.serialize.serialize能够实

【Struts2】Struts2获取session的三种方式

1.Map<String,Object> map =  ActionContext.getContext().getSession(); 2.HttpSession session = ServletActionContext.getRequest().getSession(); 3.让Action实现SessionAware接口,并实现public void setSession(Map<String, Object> session) {} 方法,Struts2会在实例化Act

jQuery中通过JSONP来跨域获取数据的三种方式

第一种方法是在ajax函数中设置dataType为'jsonp' $.ajax({ dataType: 'jsonp', url: 'http://www.a.com/user?id=123', success: function(data){ //处理data数据 } }); 第二种方法是利用getJSON来实现,只要在地址中加上callback=?参数即可 $.getJSON('http://www.a.com/user?id=123&callback=?', function(data){

android 自定义控件中获取属性的三种方式(转)

第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 <com.example.activity.IconTextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/smile1" iconSrc="

Struts2访问ServletAPI的三种方式

web应用中需要访问的ServletAPI,通常只有HttpServletRequest,HttpSession,ServletContext三个,这三个接口分别代表jsp内置对象中的request,session,application,Struts2没有与任何Servlet接口耦合,所以很方便的访问Servlet API. 第一种: Struts2提供了一个ActionContext类,顾名思义,Action的上下文,该类提供了很多方法,比如getApplication(),getSessi

Action访问ServletAPI的三种方式

一.前言 Struts是一种基于MVC设计模式的web应用框架,主要担任C的角色,用于分离页面显示和业务逻辑处理,那其实在我们学习jsp的时候学过一个具有类似功能的东西--servlet.其实Struts本质上相当于servlet,可以理解Struts是对servlet的进一步封装和抽象.那么在servlet里面使用的对象,在Struts里面同样也是可以使用的,这也是这一章的主要内容. 二.传统的Web程序和Web容器传递数据的方法 HttpServletRequest的getParameter

在ASP.NET MVC中使用Unity进行依赖注入的三种方式

在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller依赖于ModelRepository的抽象而不是它的实现. 我们可以在三个阶段使用IoC实现上面所说的解耦操作,首先需要简单介绍一下默认情况下Controller的激活过程: 1.用户发送请求黑ASP.NET,路由系统对请求进行解析,根据注册的路由规则对请求进行匹配,解析出Controller和Ac

面试中被问Spring循环依赖的三种方式!!!

什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的 Bean 互相持有对方,最终形成闭环.比如A依赖于B,B依赖于C,C又依赖于A.如下图: 如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 注意,这里不是函数的循环调用,是对象的相互依赖关系.循环调用其实就是一个死循环,除非有终结条件. 根据 spring 中 Bean 的注入方式:构造器注入方式,属性注入方式(单例和多例),

ASP.NET MVC2中Controller向View传递数据的三种方式

转自:http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html 在Asp.net mvc开发中,Controller需要向View提供Model,然后View将此Model渲染成HTML.这篇文章介绍三种由Controller向View传递数据的方式,实现一个DropDownList的显示. 第一种:ViewData ViewData是一个Dictionary.使用非常简