如何在一个类中获取HttpServletRequest 对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一个类中获取HttpServletRequest 对象相关的知识,希望对你有一定的参考价值。

通过ServletActionContext直接获取:

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.ServletActionContext;

import java.util.Map;

public class UserAction extends ActionSupport

private HttpServletRequest request;

private HttpServletResponse response;

public String addUser() throws Exception

/*

采用ActionContext则为

<Map> request =(Map)ActionContext().getContext().get(“request”);

*/

request = ServletActionContext().getRequest();

String name = request.getParameter("name");

参考技术A

HttpServletRequest是web项目中jsp的九大内置对象之一,通常在你web请求响应交互中是可以直接在方法中获取并使用的如下图示:

如果是普通的类,一般可以通过以下方式获取:

ServletRequestAttributes reqAttr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest req = reqAttr.getRequest();

祝你好运

参考技术B

在类中?还是在方法中啊,方法中你直接写的参数中就行

类中的话你把它作为一个成员变量就行 private  HttpServletRequest request;

参考技术C 普通类中获取request对象方法:
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = sra.getRequest();

SpringMVC控制层框架中获取request对象只要在方法名后面的括号中写上参数类型和对象名称就可以自动获取了

参考技术D String requestUrl = request.getRequestURL().toString();//得到请求的URL地址
String requestUri = request.getRequestURI();//得到请求的资源
String queryString = request.getQueryString();//得到请求的URL地址中附带的参数
String remoteAddr = request.getRemoteAddr();//得到来访者的IP地址 String remoteHost = request.getRemoteHost();
int remotePort = request.getRemotePort();
String remoteUser = request.getRemoteUser();
String method = request.getMethod();//得到请求URL地址时使用的方法 String pathInfo = request.getPathInfo();
String localAddr = request.getLocalAddr();//获取WEB服务器的IP地址 String localName = request.getLocalName();//获取WEB服务器的主机名

如何获取我在一个类中拥有的所有公共变量的列表? (C#)

【中文标题】如何获取我在一个类中拥有的所有公共变量的列表? (C#)【英文标题】:How do I get a list of all the public variables I have in a Class? (C#) 【发布时间】:2011-05-16 18:48:12 【问题描述】:

我有一个包含很多公共变量的类,我需要能够获取它们的列表。

这是我的课的一个例子:

public class FeatList: MonoBehaviour 
public static Feat  Acrobatic = new Feat("Acrobatic", false, "");
public static Feat AgileManeuvers = new Feat("Agile Maneuvers", false, "" ); void Start()

除了还有大约 100 个变量。有没有办法将所有这些成员变量放在一个可管理的数组中?还是我把自己搞砸了?

【问题讨论】:

【参考方案1】:

如果您关注变量 NAMES - 那么这会将它们提供给您:

IEnumerable<string> variableNames =
    typeof(FeatList).GetFields(BindingFlags.Instance | 
            BindingFlags.Static | BindingFlags.Public)
        .Select(f => f.Name);

但如果您想要 VALUES,那么这将起作用:

Dictionary<string,object> variableValues =
    typeof (FeatList).GetFields(BindingFlags.Instance | 
            BindingFlags.Static | BindingFlags.Public)
        .ToDictionary(f => f.Name, f => f.GetValue(myFeatList));

【讨论】:

如果可以的话,我会投票 3 次,它为我节省了很多时间!【参考方案2】:

如果“变量”是指类字段(如类级别的变量),您可以使用 reflection 来获取访问权限,例如在此 MSDN Microsoft 示例中使用 FieldInfo class (see MSDN link for more info)

using System;
using System.Reflection;

public class FieldInfoClass

    public int myField1 = 0;
    protected string myField2 = null;
    public static void Main()
    
        FieldInfo[] myFieldInfo;
        Type myType = typeof(FieldInfoClass);
        // Get the type and fields of FieldInfoClass.
        myFieldInfo = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance
            | BindingFlags.Public);
        Console.WriteLine("\nThe fields of " + 
            "FieldInfoClass are \n");
        // Display the field information of FieldInfoClass.
        for(int i = 0; i < myFieldInfo.Length; i++)
        
            Console.WriteLine("\nName            : 0", myFieldInfo[i].Name);
            Console.WriteLine("Declaring Type  : 0", myFieldInfo[i].DeclaringType);
            Console.WriteLine("IsPublic        : 0", myFieldInfo[i].IsPublic);
            Console.WriteLine("MemberType      : 0", myFieldInfo[i].MemberType);
            Console.WriteLine("FieldType       : 0", myFieldInfo[i].FieldType);
            Console.WriteLine("IsFamily        : 0", myFieldInfo[i].IsFamily);
        
    

您可以选择您的 FeatList 类,而不是从 Main 方法查询此示例中的 FieldInfoClass。逻辑不需要在同一个类的主方法中。您可以将您的逻辑版本放在要查询的实体之外,实际上可以使用这种逻辑查询任何对象或类。

这些字段是私有的还是公共的或其他什么都没有关系 - 通过反射,您可以访问所有这些。

请参阅FieldInfo.GetValue(..) method (MSDN link) 的 MSDN 示例代码,了解如何使用反射提取字段的值。

【讨论】:

有什么方法可以使用这些变量吗?我需要调用它们的方法。比如,if(FeatExample.boolThing)//代码 我通过在底部添加一个链接来更新答案,该链接显示如何获取字段值 - 一旦你有了值,你就可以用它做任何事情,比如调用它的方法。【参考方案3】:

这将返回一个包含所有 Feat 类型公共字段的 FieldInfo 数组:

var fields = typeof(Feat).GetFields();

然后你可以像这样读/写字段:

var field1 = fields[0];
var field1value = field1.GetValue(Acrobatic);

当然,GetValue 返回无类型的对象,因此您需要根据需要将其转换为正确的类型。

【讨论】:

您需要指定一个BindingFlag 不,我不知道。默认情况下包含静态、公共和实例字段。

以上是关于如何在一个类中获取HttpServletRequest 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个类中获取HttpServletRequest 对象

如何获取存储在数组中的类中的值?

Android:如何在普通类中获取给定活动的视图?

如何获取我在一个类中拥有的所有公共变量的列表? (C#)

java如何在一个普通的类中获取request对象

如何在Java中使用通用接口获取实现类中的方法