gpt4 book ai didi

java - DispatcherServlet 是否为每个用户创建新的 Controller 实例和方法?

转载 作者:行者123 更新时间:2023-12-01 17:21:55 25 4
gpt4 key购买 nike

大家好。我的应用程序中有 Controller :

        @Controller
public class LoginSearchController {

//List to store data from resultHTML method
List<Cars> listCars = null;


@Autowired
private EducationWebServiceInterface educationWebService;

//This method render jsp page for user and create model for resultHTML
@RequestMapping(value="/search", method=RequestMethod.GET)
public String search(FormBackingObjectSearch fbos, Model model) {
model.addAttribute("fbosAttributes", fbos);

return "search";
}

// This method get name form form back object and use it for fetchCarsByNameService method
// After if something found it stores it in listofSerchObjects and after listofSerchObjects stores it in listForm List
@RequestMapping(value="/result", method=RequestMethod.GET)
public String resultHTML(@RequestParam String name,
@ModelAttribute("fbosAttributes") FormBackingObjectSearch fbos,
BindingResult bindingResut, Model model) throws Exception {


listCars = new ArrayList<Cars>();
List<Cars> listofSerchObjects = null;

listofSerchObjects = educationWebService.fetchCarsByNameService(dateConvertation(fbos.getName()));
model.addAttribute("findAttributes", listofSerchObjects);
listCars.addAll(listofSerchObjects);

return "search";
}


//This method fetch data from listForm to make Excel document form the list
@RequestMapping(value="/result.xls", method=RequestMethod.GET)
public String resultXLS(Model model) throws Exception {

if(listCars == null || listCars.size() == 0) {
throw new NullPointerException("ArrayList<FormDate> formDateList is empty list");
} else {
model.addAttribute("findAttributesXls", listForm);
}
return "xlspage";
}
}

Controller 中发生了什么:

用户进入搜索页面填写他想要查找的汽车名称(在我的例子中),然后单击按钮FIND

--> 请求转到 /result。这个resultHTML方法从服务层调用fetchCarsByNameService来获取与特定名称相对应的数据到listofSerchObjects并将其呈现在jsp页面上。当 listofSerchObjects 获得来自 fetchCarsByNameService 的数据后,它会将所有数据添加到其他列表 listCars 中。

--> 下一步,当所有数据都呈现在 jsp 页面上时,会出现按钮 SAVE AS EXCEL,会发生什么:当用户单击此按钮(如果用户也想要)时,它会转到 /result.xls 并从中获取所有数据 listCars 将其保存在 Excel 文件中。

我很好奇,如果多个用户将在我的网络应用程序中的不同计算机上使用同一个 jsp 页面,我的 listCars 将如何表现。我很害怕它将存储从数据库中提取的最后一个数据,如果用户 1 想要将其呈现在 Excel 文件中,如果用户 2 最后进行搜索,他将从用户 2 获得数据。你认为呢???请给我建议。谢谢

最佳答案

listCars 已损坏,甚至可能偶尔抛出 ConcurrentModificationException

以下是该问题的解决方法。

  1. listCars 设为局部变量。

  2. 使用 @Scope("session") 注释您的 Controller

这是一个很棒的 blog其中描述了 Controller范围及其优缺点。

关于java - DispatcherServlet 是否为每个用户创建新的 Controller 实例和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com