将数据存储在servlet的DTO中......?

时间:2012-07-20 05:50:25

标签: java servlets dto getter-setter

是否可以采用以下方式将数据存储在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();
        }
    }
}

2 个答案:

答案 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);
    }
}

}