0

是否可以实现以下方式以将数据存储在 DTO 中并从应用程序中的任何位置访问它而不是使用上下文?

请提供建议!!!

public class DummyDTO {
    private String name = null;
    private String age = null;

    // getters and setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

public class MyServletClass extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        DummyDTO dummyDTO = new DummyDTO();
        dummyDTO.setName(request.getParameter("name"));
        dummyDTO.setAge(request.getParameter("age"));
        AnotherClass.setValues(dummyDTO);
    }

    public class AnotherClass {
        String name = "";
        String age = "";

        public static void setValues(DummyDTO dummyDTO) {
            name = dummyDTO.getName();
            age = dummyDTO.getAge();
        }
    }
}
4

2 回答 2

2

不,它不能。静态字段对整个 ClassLoader 是全局的(对整个)。因此,如果您对 servlet 有多个并发请求,第二个请求将覆盖第一个请求在静态字段中存储的数据(并且以线程不安全的方式,另外)。

如果数据是请求的本地数据,则应将其存储在请求属性中。这就是他们的目的。

旁注:您的字段不是静态的,但您的代码编译的唯一方法是使它们成为静态的。

于 2012-07-20T05:54:47.983 回答
0

你可以这样使用......

将值放入具有用户 sessionId 键的映射中。

public class MyServletClass extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    DummyDTO dummyDTO = new DummyDTO();
    dummyDTO.setName(request.getParameter("name"));
    dummyDTO.setAge(request.getParameter("age"));
    AnotherClass.setValues(dummyDTO, request.getSession().getSessionId());
}

public class AnotherClass {
    String name = "";
    String age = "";

    private static HashMap<String, DummyDTO> map; 
    public static HashMap<String, DummyDTO> setValues(DummyDTO dummyDTO, String key) {
      return map.put(key, dummyDTO);
    }
}

}

于 2012-07-20T12:08:27.947 回答