如何使用path在java中创建会话cookie,同时仍具有良好的函数式编程实践

如何使用path在java中创建会话cookie,同时仍具有良好的函数式编程实践,java,functional-programming,immutability,Java,Functional Programming,Immutability,我非常喜欢函数式编程,我喜欢它的不变性概念,也喜欢它对函数没有副作用的概念 我正试图将其中一些概念引入java 现在我有了一个servlet,它接收一个请求,如果浏览器没有向服务器发送cookie,那么我想创建一个cookie,并向用户发送特定路径 现在在servlet内部,我不想保留这种逻辑,因为它对于多个servlet是通用的。 因此,我将其提取到某种cookie管理器中,该管理器将执行以下操作: CookieManager.java.handleCookies(请求、响应) 检查浏览器是否

我非常喜欢函数式编程,我喜欢它的不变性概念,也喜欢它对函数没有副作用的概念

我正试图将其中一些概念引入java

现在我有了一个servlet,它接收一个请求,如果浏览器没有向服务器发送cookie,那么我想创建一个cookie,并向用户发送特定路径

现在在servlet内部,我不想保留这种逻辑,因为它对于多个servlet是通用的。 因此,我将其提取到某种cookie管理器中,该管理器将执行以下操作:

CookieManager.java.handleCookies(请求、响应)

  • 检查浏览器是否发送了cookie
  • 如果未设置cookie,则使用特定路径的新会话cookie值设置cookie
  • 但是我不喜欢它,因为现在servlet将调用CookieManager.java.handleCookie将有一个副作用,我希望它返回某种响应,并在我的servlet中进一步使用它,而不影响我传递给它的参数

    任何人都可以提出一个既美观、无副作用又性能优异的解决方案


    谢谢

    您可以使用servlet过滤器。这很适合你的情况。您可以将过滤器映射到URL模式,并在dofilter方法中编写代码。如果您希望请求/响应的预处理和后处理,建议使用过滤器。因为您正在为您的请求进行预处理,所以它将适合您的情况。If也是松散耦合的,因为您可以随时删除它、修改它或添加另一个规则,而无需修改核心servlet代码。

    一个好的解决方案是使用创建一个servlet,它将充当所有其他servlet的父类。 现在在这个servlet中,将cookie处理逻辑放在一个公共函数中,比如handlecookie。 在这个servlet的get和post API中,首先调用这个handleCookie,然后调用servlet的服务API(保持为空)

    在所有子servlet类中,您只能重写从父类继承的服务类,并且应该可以正常工作


    是您可以使用的其他解决方案。

    您是否希望
    CookieManager
    只检查请求中是否存在给定的cookie,并根据结果在servlet中采取行动?完全正确!我希望它是这样的,但是这会在调用者内部强加更多的代码!那么这是我唯一的选择吗?如果我使用的是functional immutable,那么我的客户端代码会更厚:(?请原谅我的无知,但所谓函数不可变,您是指
    CookieManager
    将具有的任何状态吗?这意味着CookieManager将更改参数,就像有人调用其方法handleCookie一样,如果不存在,它将实际更改响应参数,使其具有会话id。实际上不存在。
    Cooki内部不会发生任何更改eManager
    。您将传递一个要检测的cookie字符串并请求对象。
    CookieManager
    将根据请求中是否存在该cookie而简单地返回
    true/false
    。将cookie实际设置为响应将由Servlet处理。