博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2中获得Servlet API对象
阅读量:4097 次
发布时间:2019-05-25

本文共 3140 字,大约阅读时间需要 10 分钟。

Struts2中传统Servlet API类型被处理成Map类型

   访问更方便
   不依赖传统Servlet API类型——解耦合

关于ActionContext

       所在包com.opensymphony.xwork2
       ActionContext被称为Action上下文或Action环境
       ActionContext提供每个Action运行时与之相关的所有信息
访问Servlet API

       ActionContext类提供getContext()方法获得实例

       通过ActionContext类的实例可获得Map类型的请求、会话 等
       通过put()get()方法在Map类型的对象中存取数据

示例:

package cn.web.action;import java.util.Map;import cn.web.entity.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class LoginJavabeanAction extends ActionSupport {		private  User user;		public User getUser() {		return user;	}	public void setUser(User user) {		this.user = user;	}	@Override	public String execute() throws Exception {		if(user==null){			return "login";		}		System.out.println(user.getLoginName());		if("admin".equals(user.getLoginName())){			//关于ActionContext			//获取session			Map
session = ActionContext.getContext().getSession(); session.put("userSession", user); //获取application,示例设置一个计数 Map
application = ActionContext.getContext().getApplication(); if(application.get("num") == null){ application.put("num", 1); }else{ Integer num = (Integer) application.get("num"); application.put("num", num+1); } //获取request,注意获取方式 Map
request = (Map
) ActionContext.getContext().get("request"); request.put("address", "中国"); //获取parameter,请求的参数只能获得,不能增加 Map
parameters = ActionContext.getContext().getParameters(); //注意parameters.get()与 request.getParameterValues()类似 //获得如checkbox类(名字相同,但值有多个)的数据。 //接收 对象 的数组 String[] name = (String[]) parameters.get("user.loginName"); System.out.println("user.loginName为:"+name[0]); //禁止这样操作,增加参数 parameters.put("access", "通过"); /* 在页面中获取保存数据提倡的方式 (#作用域)
*/ return "admin"; }else if("comm".equals(user.getLoginName())){ return "comm"; }else{ return "login"; } }}

 

------------------------------------------------------------------------------------

 

获得Servlet API对象的方式

一、通过ActionContext获得

             如上面的示例就是这样

       自己获得request: ac.get("request")

       自己获得session: ac.getContext.getSession()

二、实现接口

          让“别人(如struts容器)”为你提供Servlet API的对象

          通过实现相应接口获得Servlet API对象

            获得parameter需要实现ParameterAware接口

            获得request需要实现RequestAware接口

            获得session需要实现SessionAware接口

            获得application需要实现ApplicationAware接口

(   LoginAtion 是交给Struts容器管理的,

  当LoginAtion实现了上面的接口,Struts容器会往这些接口预定义的方法里注入它需要的相应的值,

 是由servletConfig拦截器,将源于Servlet API的各种对象注入到Action 的。

  从而也就能使用 servletApi 的对象了

 

public class LoginAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {		Map
request; Map
session; Map
application; //这样就获得了request,session以及application(servletApi的对象), //然后就可以在execute()方法里使用servletApi的对象了 /* 省略部分代码 */ @Override public void setApplication(Map
request) { this.request = request; } @Override public void setSession(Map
session) { this.session = session; } @Override public void setRequest(Map
application) { this.application = application; } /* 省略部分代码 */}
 

 

 

 

转载地址:http://lqlii.baihongyu.com/

你可能感兴趣的文章
springboot kafka
查看>>
springboot 返回前端utc时间格式和接收前端提交utc时间
查看>>
spring @Configuration proxyBeanMethods
查看>>
Linux iptable常见使用
查看>>
SpringBoot 添加切面,记录日志
查看>>
centos7单机版 mongodb安装
查看>>
工作中没有注册中心下,fegin间调用联调方式
查看>>
ApplicationEventPublisher实现发布订阅功能
查看>>
Kong in DB-less Mode
查看>>
Tdengine安装
查看>>
jvm问题定位中,jstack找出占用cpu最高的堆栈信息
查看>>
GO内存模型
查看>>
常用命令
查看>>
vscode go环境安装
查看>>
linux 和mac profile jdk maven配置
查看>>
安装alexa和google play
查看>>
模版方法
查看>>
mac笔记本删除idea软件
查看>>
MongoDB4.2.0安装包并配上安装教程
查看>>
解决maven项目Oracle驱动报红,不能使用的问题。
查看>>