假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.
现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何区分不同的用户?
还有一个类似的问题,如果有n用户访问特定的servlet,那么这个servlet只在第一个用户第一次访问它时实例化,或者是否为所有用户单独实例化?换句话说,实例变量会发生什么?
java multithreading servlets session-variables instance-variables
我知道托管bean的工作方式类似于控制器,因为您唯一的任务是将视图层与模型"链接"起来.
要使用bean作为托管bean,我必须声明@ManagedBean注释,这样做我可以直接与bean通信JSF.
如果我想在这个managedBean中注入一些组件(来自Spring),我有两种可能的方法:
在ManagedBean中选择属性(如"BasicDAO dao")并@ManagedProperty(#{"basicDAO"})在属性上方声明.这样做,我"basicDAO"在ManagedBean中从Spring 注入bean .
在ManagedBean Class中声明了@Controller,然后我将拥有@ManagedBean和@Controller注释一起.在物业中"BasicDAO dao"我必须使用@AutowiredSpring.
我的理解是否正确?
FacesContext和之间有什么区别ExternalContext?我什么时候可以使用其中一个?什么有一个什么有另一个?
以下示例来自JavaServer Faces第3版:
<h:commandButton ... actionListener="#{rushmore.handleMouseClick}" />
Run Code Online (Sandbox Code Playgroud)
支持豆:
public void handleMouseClick(ActionEvent e) {
FacesContext context = FacesContext.getCurrentInstance();
String clientId = e.getComponent().getClientId(context);
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
// ...
}
Run Code Online (Sandbox Code Playgroud)
为什么请求参数在ExternalContext?什么是clientId?它是在应用程序启动时由JSF生成的吗?