我有一个由HTML表单和Servlet组成的应用程序,它根据用户提交的参数创建一个新对象,然后将创建的bean添加到列表中。
有JavaBean类:
public class Client{
private String name, adress, tel, email;
public Client(String name, String adress, String tel, String email) {
this.name = name;
this.adress = adress;
this.tel = tel;
this.email = email;
}
//A bunch of Getters and Setters
}
以下是ClientsMan类:
public abstract class ClientsMan {
private static List<Client> clientsList;
static
{
clientsList= new ArrayList<Client>();
}
public static void addClient(Client c)
{
clientsList.add(c);
}
}
这是处理表单的servlet的doPost()方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Getting the parametres
String name = request.getParameter("name");
String adress = request.getParameter("adress");
String tel = request.getParameter("tel");
String email = request.getParameter("email");
//Creating a Client object from the user inputs
Client client = new Client(name, adress, tel, email);
//Adding the bean in an arrayList
ClientsMan.addClient(client);
}
我需要保留所有添加的客户列表供以后使用。
我的问题是: 我的应用程序中List的范围是什么,是请求范围还是应用程序范围? 用户退出应用程序后,我是否会丢失列表?
答案 0 :(得分:1)
我的应用程序中List的范围是什么,是请求范围 或申请范围?
它们都不是因为它的生命周期不是由您的应用程序管理的,List
clientsList
是类static
的{{1}}字段,这意味着它的范围相当广泛到初始化类ClientsMan
的{{1}},即使在用户退出应用程序之后,它也应存在。
答案 1 :(得分:1)
静态类不是bean,因为它不是容器管理的,因此没有任何与此类相关的范围。
当用户退出您的应用程序时,您的List
仍然存在。
如果需要,您还应该管理列表的线程安全性。
答案 2 :(得分:1)
对象的默认范围是请求范围。在服务方法中实例化的任何变量都有请求范围。每个请求和响应对都是以服务开头的线程的一部分,并在该服务类结束时结束。
如上所述,列表是静态类型,因此它将持续到JVM。但是在运行它时会遇到问题,因为它不是线程安全的对象。你需要使静态块snychronized。