struts2--获取request、session、application、HttpRequest、HttpSession、ServletContext

本文主要是介绍struts2--获取request、session、application、HttpRequest、HttpSession、ServletContext,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

request、session、application、HttpRequest、HttpSession、ServletContext

四种方法:只使用第二种方法,并且request和application不经常用到,另外,

(1)使用struts2容器提供的ActionContext:(前三者)依赖于容器

<span style="font-size:14px;">package com.struts2.user.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;/*** @author Demetria* 这种获取web元素的方式是依赖于struts2框架的,因为需要使用ActionContext,这是struts2提供的。*/
public class LoginActionDemo1 extends ActionSupport{private Map request;private Map session;private Map application;public LoginActionDemo1() {//非单例模式,是thread local模式,即以当前线程名作为key值的键值对,在一个线程中是单例的。request=(Map) ActionContext.getContext().get("request");session=ActionContext.getContext().getSession();application=ActionContext.getContext().getApplication();}public String execute(){request.put("r1", "r1");session.put("s1", "s1");application.put("a1", "a1");return SUCCESS;}
}
</span>
(2)使用IoC(控制反转)/DI(依赖注入)(前三者)IoC

实现RequestAware/SessionAware/ApplicationAware

package com.struts2.user.action;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;/*** @author Demetria* 第二种获取web元素的方式:控制反转(IoC)或依赖注入(DI)* 第一种方式是通过get方法来自己获取* 第二种方式思想:当action实现了RequestAware,SessionAware,ApplicationAware接口后,容器给这个action注入这三个web元素。* request属性依赖于struts2,容器把这个值注入给我,不像第一种方式,自己去get的方式。* 本来这些元素值时自己控制的,但是现在这些值是由容器来控制的,所以控制反转了。* * 以后只用IoC方式。* 将来一般不用request ,因为value stack中的东西都放在了request域中。* 也不用application。*/
public class LoginActionDemo2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;public String execute(){request.put("r1", "r1");session.put("s1", "s1");application.put("a1", "a1");return SUCCESS;}public void setApplication(Map<String, Object> application) {// TODO Auto-generated method stubthis.application=application;}public void setSession(Map<String, Object> session) {// TODO Auto-generated method stubthis.session=session;}public void setRequest(Map<String, Object> request) {// TODO Auto-generated method stubthis.request=request;}}
(3)使用ServletActionContext获得HttpServletRequest对象,进而获得HttpSession、ServletContext对象(后三者)依赖于容器
<span style="font-size:18px;">package com.struts2.user.action;import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/*** @author Demetria* 第三种方式:* 使用ServletActionContext获取HttpServletrequest对象,* 然后使用request.getSession()获得HttpSession对象,* 然后使用session.getServletContext()获得ServletContext对象。*/
public class LoginActionDemo3 extends ActionSupport{private HttpServletRequest request;private HttpSession session;private ServletContext application;public LoginActionDemo3(){request=ServletActionContext.getRequest();session=request.getSession();application=session.getServletContext();}public String execute(){request.setAttribute("r1", "r1");session.setAttribute("s1", "s1");application.setAttribute("a1", "a1");return SUCCESS;}
}</span>
(4)实现ServletRequestAware接口, 获得HttpServletRequest对象,进而获得HttpSession、ServletContext对象(后三者)依赖于IoC

package com.struts2.user.action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author Demetria
* 第四种方式:
* action实现ServletRequestAware接口,实现setServletRequest(HttpServletRequest request)得到HttpServletRequest对象。
* 然后使用request.getSession()获得HttpSession对象,
* 然后使用session.getServletContext()获得ServletContext对象。
*/
public class LoginActionDemo4 extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String execute(){
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request) {
this.request=request;
this.session=request.getSession();
this.application=session.getServletContext();
}
}
结果页面:

<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>user_login1</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h1>user_login1</h1><s:property value="#request.r1"/>|<%=request.getAttribute("r1") %><br /><!-- 使用#号来访问web元素 --><s:property value="#session.s1"/>|<%=session.getAttribute("s1") %><br /><s:property value="#application.a1"/>|<%=application.getAttribute("a1") %><br /><s:debug></s:debug></body>
</html>
</span>

在jsp页面中,需要使用#号来访问。



这篇关于struts2--获取request、session、application、HttpRequest、HttpSession、ServletContext的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053612

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文