是否可以采用以下方式将数据存储在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();
}
}
}
答案 0 :(得分:2)
不,它不能。静态字段对整个ClassLoader是全局的(对整体而言)。因此,如果您有几个并发请求到您的servlet,第二个将覆盖静态字段中的第一个存储的数据(并且以一种线程不安全的方式,另外)。
如果数据是请求的本地数据,则应将其存储在请求属性中。这就是他们的目的。
旁注:您的字段不是静态的,但代码编译的唯一方法是使它们保持静态。
答案 1 :(得分: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);
}
}
}