Java servlet API中是否有通用的RequestContext?

问题描述 投票:13回答:2

(我不确定在此标题的确切表达方式,因此,我也不确定如何寻找答案。)>

我有一个处理请求的Java servlet引擎。假设我们有一个doGet()请求:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //set up user data

    //do whatever the user requested
    SomeClass c = new SomeClass();
    c.doSomething();
}

现在doSomething()中,我希望能够访问哪个用户发出了请求。现在,我正在通过在方法中创建一个Java对象并将其传递到我需要的地方来做到这一点:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //set up user data
    MyUserObj userObj = new MyUserObj();
    userObj.setId('123');

    //do whatever the user requested
    SomeClass c = new SomeClass(userObj);
    c.doSomething();
}

通过这样做,我可以访问MyUserObj的实例,并且可以根据需要在应用程序中进一步传递它。

我知道在ASP.NET MVC3中,我可以通过存储当前线程的项目/属性来实现这一点,如下所示:HttpContext.Current.Items.Add("myId", "123")。然后,HttpContext在其他函数中可用,而无需显式传递对象。

Java中是否有一种方法可以为每个请求设置一些变量(甚至设置MyUserObject以供以后访问)而无需将对象作为参数传递?

((我不确定在此标题的确切表达方式,因此,我也不确定如何搜索答案。)我有一个处理请求的Java servlet引擎。说...

java servlets
2个回答
20
投票

[servlet API中没有,但是您可以轻松地制作自己的。 (诸如spring-mvc之类的一些框架,struts提供了这样的功能)


5
投票

您可以使用setAttribute将对象附加到当前请求。该API主要用于内部路由,但是只要您为属性名称使用正确的名称空间,它也可以安全地用于您自己的目的。

© www.soinside.com 2019 - 2024. All rights reserved.