在我的退出操作中,我想要使会话无效/清除,我想知道这三种方法之间有什么区别,哪一方面更好:
-> ActionContext.getContext().getSession().clear();
-> getHttpServletRequest().getSession().invalidate()//servlet api
-> ((org.apache.struts2.dispatcher.SessionMap) session).invalidate(); //Struts 2 SessionAware interface
此外,struts 2"动作会话&#34>之间是否有任何区别?对象和servlet http会话对象?
答案 0 :(得分:3)
最后一个问题:是的,正如文档所示。
SessionMap
是一个实现Map
接口的瘦外观,允许直接访问某些底层实现(例如invalidate
)。
第一个问题:在最后两个之间,第一个问题略有不同。
clear
只删除条目,IIRC它不实际上使会话无效。我倾向于SessionMap.invalidate()
,因为我试图避免直接与servlet规范绑定,但在这种情况下我不认为它是一个大问题,特别是因为它只是可能的在少数地方召集,例如退出。
答案 1 :(得分:2)
SessionMap#invalidate()
如果与HttpSession#invalidate()
相关联,则会调用HttpSession
并清除内部地图并删除会话关联,因此我会使用它。
api独立性唯一的另一个区别似乎是SessionMap
为所有会话条目提供了entrySet()
方法。条目本身是从关联的HttpSession
。
SessionMap#clear()
只会从关联的HttpSession
中移除所有属性,但不会使该会话无效。
有关详细信息,请查看SessionMap source。
答案 2 :(得分:0)
使用此代码可获得更好的结果
# Import Library
import random
import pandas as pd
from bokeh.core.properties import value
from bokeh.io import show, export_png, output_notebook
from bokeh.plotting import figure, output_file
from bokeh.models import ColumnDataSource, Legend, HoverTool, layouts, CustomJS, Select, Circle, RangeTool
from bokeh.layouts import column
from datetime import date
output_notebook() # Render inline in a Jupyter Notebook
# Create Line Chart
def create_line_chart_bokeh():
# Set data
dates = ['24-11-2017', '28-11-2017', '29-11-2017',
'23-03-2018', '27-03-2018', '12-08-2018']
dates = list(map(lambda i: pd.Timestamp(i), dates))
values = [random.randrange(101) for _ in range(len(dates))]
source = ColumnDataSource(data=dict(date=dates, close=values))
# Set plot
p = figure(plot_height=300, plot_width=800, tools="xpan", toolbar_location="right",
x_axis_type="datetime", x_axis_location="above",
background_fill_color="white", x_range=(dates[0], dates[int(len(dates)-1)]), title='Test Line Chart')
# Set Line and Circle colours
line_colour = '#59819a'
circle_colour = '#ef5b45'
lineSource = {'date': [], 'close': []}
date, close = [], []
for i in range(len(dates)):
try:
diff = dates[i+1] - dates[i]
if diff.days < 30:
date.extend([dates[i], dates[i+1]])
close.extend([values[i], values[i+1]])
else:
lineSource['date'].append(date)
lineSource['close'].append(close)
date, close = [], []
except IndexError:
pass
lines = p.multi_line(xs='date', ys='close', source=ColumnDataSource(lineSource), color=line_colour)
circles = p.circle('date', 'close', source=source, color=circle_colour, size=4)
p.yaxis.axis_label = 'Scores' # set y axis label
hoverCircles = HoverTool(renderers=[circles], tooltips=[("Average Score", "@close")])
p.add_tools(hoverCircles)
hoverLines = HoverTool(renderers=[lines], tooltips=[("Average Score", "$y")])
p.add_tools(hoverLines)
# Set Time Selection Box
select = figure(title="Drag the middle and edges of the selection box to change the range above",
plot_height=130, plot_width=800, y_range=p.y_range,
x_axis_type="datetime", y_axis_type=None,
tools="", toolbar_location=None, background_fill_color="#efefef")
range_tool = RangeTool(x_range=p.x_range)
range_tool.overlay.fill_color = 'navy'
range_tool.overlay.fill_alpha = 0.2
select.line('date', 'close', source=source, color=line_colour)
select.ygrid.grid_line_color = None
select.add_tools(range_tool)
select.toolbar.active_multi = range_tool
# Show the result
show(column(p, select))
return None
# Call Function
create_line_chart_bokeh()