Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在代码中的任何位置使用变量?_Java_Jakarta Ee - Fatal编程技术网

Java 如何在代码中的任何位置使用变量?

Java 如何在代码中的任何位置使用变量?,java,jakarta-ee,Java,Jakarta Ee,在JavaEE中,如何在代码中的任意位置使用变量而不将其作为参数传递 类似于公共静态变量的东西。。。但是对于所有请求,静态变量总是相同的。。。除了单个请求外,“静态”变量怎么样 可能吗 下面是一个小例子: 我有: protected void doGet (...) { Model m = Model.GetById (...); } public class Model { private String descrition; private Market marke

在JavaEE中,如何在代码中的任意位置使用变量而不将其作为参数传递

类似于公共静态变量的东西。。。但是对于所有请求,静态变量总是相同的。。。除了单个请求外,“静态”变量怎么样

可能吗

下面是一个小例子:

我有:

protected void doGet (...)
{
    Model m = Model.GetById (...);
}

public class Model
{
    private String descrition;
    private Market market;
    private List<SparePart> spareParts;

    public Model GetById ()
    {
        Model m = new Model ();
        // get info from db using the language
        this.market = Market.GetById (...);
        this.spareParts = SparePart.GetByModel (m);
    }
}
public class SparePart
{
    private String description;

    public List<SparePart> GetByModel (Model mo)
    {
        // get info from db using the language
    }
}

public class Market
{
    private String descrition;

    public Market GetById (...)
    {
        // get info from db using the language
    }
}
protectedvoiddoget(…)
{
Model m=Model.GetById(…);
}
公共类模型
{
私有字符串描述;
私人市场;
私有列表备用部件;
公共模型GetById()
{
模型m=新模型();
//使用该语言从数据库获取信息
this.market=market.GetById(…);
this.SparePart=SparePart.GetByModel(m);
}
}
公共类备用零件
{
私有字符串描述;
公共列表GetByModel(型号mo)
{
//使用该语言从数据库获取信息
}
}
公务舱市场
{
私有字符串描述;
公开市场GetById(…)
{
//使用该语言从数据库获取信息
}
}
两者都使用客户端语言对数据库进行查询和检索信息。。。如何设置语言变量,使其不必传递给使用它的方法


Language变量只是一个示例,它可能与其他变量一起出现

您可以设置并获取
ServletRequest
对象的属性

request.setAttribute("someName", someObject);

Object someObject = request.getAttribute("someName");
请参阅javadoc


或者,您可以使用(或另一个DI框架)定义一个或多个
@RequestScoped
对象,然后将它们
@注入到所需的位置。

在JaveEE应用程序中,有十几种方法可以通过执行流传递数据。假设您需要在一个应用程序边界内传递数据

  • 当然,您可以使用公共静态最终常量
  • 您可以使用公共静态变量,但要考虑到这一点 环境是非常多线程的。所以使用原子包装器 (原子整数等)
  • 你可以用
  • 而单请求范围(http(rest)->中间接受器)->bean ->响应)您可以使用ThreadLocal
  • 当然,您可以使用有状态或单例bean,也可以使用CDI 事件
  • 如果您使用的是Payara服务器(目前只有JCache规范) 预览)您可以使用在任何 应用程序或集群中的应用程序
如果您需要在服务器之间共享数据,您可以在@Remote Interface上公开您的业务方法,或者使用JMX共享/发布/使用


具体的选择应该取决于您的应用程序业务逻辑。

虽然不传递参数首先不是一个好主意,但如果您“必须”找到一个解决方案,并且它与您的设计相匹配,那么使用内部类如何?这样,您就可以将类变量声明为非静态的,并且始终可以从内部类访问它

将其添加为请求属性。但在这种情况下,我必须传递请求,对吗?听起来是个非常糟糕的主意。人们不鼓励使用全局变量有一个很好的理由。重新检查你想象中的任何需求来激发这一点。好吧,不管怎样,你都在传递这个请求。在大多数情况下,通过许多过滤器,最终到达servlet或JSP页面。您是否可以尝试将所需变量放入单例对象或静态类中,并在整个流中使用它,然后在下一个请求时重置?你可以使用映射来跟踪变量,基于时间戳作为键,但我必须将请求作为参数传递,对吗?传递到什么?传递到我的类中的方法,或者从请求中提取你需要的东西并传递下去。是的,我知道,我的问题是,我是否可以使它们在类中可见,而不需要将它们作为参数传递。我将用一个例子来更新这个问题。