如何从JAVA httpSession获取参数并在dao类上使用/设置它?

时间:2012-05-28 00:00:08

标签: java java-ee

我需要使用servlet来验证登录名/密码。那已经很好了。

我在DAO类中有一个方法,它通过prepareStatement返回一个resultSet值列表。

我正在使用一个查询,该过滤结果带有where子句(按用户名)。

问题是:如何获取servlet参数(登录用户的名称)并在prepareStatement上设置?

代码如下:

public class DaoPojoJoin extends Dao {

public List<PojoJoin> listUserDegrees() {
    List<PojoJoin> dg = new ArrayList<PojoJoin>();
    if (openConnection()) {
        try {
            st = cn.prepareStatement("SELECT USER, MATTER, DEGREE FROM DEGREES x "
                    + "right outer join USERS y on x.idUser=y.idUser "
                    + "right outer join MATTER z on idMatter=z.idMatter "
                    + "where x.iduser=?"); // filter result by user's name

            // How can I have something like this:
            // st.setString(1,usr.request.getParameter("user"));

            // or this:
            // st.setString(1,.getAttribute(user));

            rs = st.executeQuery();
            while (rs.next()) {
                PojoJoin pj = new PojoJoin();
                rs.getString("USER"); 
                rs.getString("MATTER");
                rs.getDouble("DEGREE");
                pj.setUsuario(rs.getString("USER"));
                pj.setDisciplina(rs.getString("MATTER"));
                pj.setNota(rs.getDouble("DEGREE"));
                nota.add(pj);
            }
        } catch (Exception ex) {
            err = ex.getMessage();
        } finally {
            closeConnection();
        }
    }
    return dg;
}

}

提前致谢。

1 个答案:

答案 0 :(得分:0)

要求它作为方法参数。 DAO不应该关心它所处的上下文,并且应该可以在其他地方重用(例如,不使用servlet的普通Java应用程序)。

如此

public List<PojoJoin> listUserDegrees(String username) {
    // ...
}

public List<PojoJoin> listUserDegrees(Long userId) {
    // ...
}

public List<PojoJoin> listUserDegrees(User user) {
    // ...
}

最后让调用者(servlet)将其传入。


对于具体问题

无关,您的数据库资源处理似乎不是线程安全的。我会努力避免每当您的webapp开始被多个用户使用时出现严重问题。