请问登录界面的用户名、密码是多少?



public User getUserByName(String username) throws Exception {
logger.debug(" getUserByName " + username);
Connection c = null;
PreparedStatement ps = null;
ResultSet rs = null;
User ret = null;
try {
String GET_USER =
"select * from t_user where username = ?";
c = dataSource.getConnection();
ps = c.prepareStatement(GET_USER,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ps.setString(1, username);
rs = ps.executeQuery();
if (rs.first()) {
ret = new User();
ret.setUserName(username);
ret.setUserId(rs.getString(
"userid"));
ret.setPassword(rs.getString(
"password"));

}
}
catch (SQLException se) {
throw new Exception(
"SQLException: " + se.getMessage());
}
finally {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (c != null) {
c.close();
}
}
return ret;
}

这样写怎么看怎么感觉怪异。

>
>


> public User getUserByName(String username) throws
> Exception {
> logger.debug(" getUserByName " + username);
> Connection c = null;
> PreparedStatement ps = null;
> ResultSet rs = null;
> User ret = null;
> try {
> String GET_USER =
>
"select * from t_user where username =
> username = ?
";
> c = dataSource.getConnection();
> ps = c.prepareStatement(GET_USER,
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> ResultSet.TYPE_SCROLL_INSENSITIVE,
>
>
>
>
>
>
>
>
> ResultSet.CONCUR_READ_ONLY);
> ps.setString(1, username);
> rs = ps.executeQuery();
> if (rs.first()) {
> ret = new User();
> ret.setUserName(username);
> ret.setUserId(rs.getString(
"userid"));
> ret.setPassword(rs.getString(
"password"));
>
> }
> }
> catch (SQLException se) {
> throw new Exception(
"SQLException: " +
> on:
" + se.getMessage());
> }
> finally {
> if (rs != null) {
> rs.close();
> }
> if (ps != null) {
> ps.close();
> }
> if (c != null) {
> c.close();
> }
> }
> return ret;
> }

>
> 这样写怎么看怎么感觉怪异。

hehe 用一个模板模式就可以就这些数据库通用操作封装起来,怎么banq没想起来啊。

>界面的用户名、密码是你插入数据库的数据,缺省是admin 123

模板模式建议很好,会加入的,其他getDatas基本都已经使用模板。

域模型News等需要继承com.jdon.controller.model.Model接口,破坏了于模型。属于侵入式的应用。大家不会喜欢用的。

按照这种理论,EJB就没人用了,EJB都需要继承的,Spring更需要继承。这句话属于正确的废话。除非消灭语言的继承特性,就没有侵入了,这属于一种极端主义+理想主义言论,初学者切勿偏听偏信。

侵入特性对于实现软件蓝领化是有好处的,不需要给他们更多的自主余地,模块化编程,只需了解自己该做的,该继承实现的就可以,这种模式对于软件业是有好处的,虽然伤害现在程序员的感情,这话题谈开去了,sorry!


谢谢彭老师的回复。
我当然希望国人有自己成功的框架产品。更敬佩那些孜孜不倦研究开发技术,并为软件业指路照明的人。

关于这里所讨论的侵入式,我的想法是:软件产业迟早要进入域类复用的时代,因此域模型尽量不要让它依赖于具体的实现框架。特别对于java开说,技术的变化更是日新月异,也许有一天,人们就从EJB的接口限定中挣脱出来,投入JDO等持久层框架产品中来。到那个时候,被侵入的哪些域类就很难移植了。

不知,我的思考是否正确。也许我是一个极端主义者。

另外,彭老师的框架能否借鉴JDO规范的方式,实现非侵入式应用。也许,有利于框架产品的推广。也许,我还没有看到框架实现所涉及的核心技术,口出枉言,敬请原谅。

多谢探讨。

>域模型尽量不要让它依赖于具体的实现框架

这种想法是好的,但是实际上并不是这样:Struts中的ActionForm类似界面模型,每个用户必须继承ActionForm。
HttpSession是依赖Web容器的东东,Spring中很多新概念必须依赖它的容器,等等。
等哪一天他们有技术实现不依赖了,Jdon也会采取同样技术。

那么在技术没有达到情况下,如何解决呢?
依靠标准啊,JSR就是这样一个标准组织,这样依据标准API就不依赖具体产品啦。

请教彭老师,在这个发布系统里面,如果我想获得当前登陆的用户名,应该到哪里取那?因为这个系统采用的是jboss实现的jaas,我想知道在容器验证登陆成功之后,把用户的信息存在哪里了?

>容器验证登陆成功之后,把用户的信息存在哪
使用request.getPrinciple可以获得用户的ID或名称,根据它自己去数据库查询这个用户的其它信息。

哦,谢谢解答,我还有个问题,我在jdbcDAO类里面加了如下代码
public static void main(String []args){
// JdbcDao dao = new JdbcDao();
try{
ServiceLocator se = new ServiceLocator();
DataSource dataSource2 = (DataSource) se.getDataSource("java:/NewsDS");
PageIteratorString pagejdbc = null;
pagejdbc = new PageIteratorString(dataSource2);
PageIterator page = new PageIterator();
page = pagejdbc.fetchDatas("","select typeid from T_NEWS_TYPE",0,20);
int count = page.getAllCount();
logger.info(count+"");
}catch(Exception e){
e.printStackTrace();
}

}
然后在jbuilder里面直接运行这个类会提示
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

我已经把mysql-ds.xml拷到jboss/server/default/deploy下了,还需要再加一个jndi-definitions.xml嘛??

这是jbuilder环境设置问题,可能你的JBuilder环境需要一个jndi-definitions.xml,我从Jb7使用到Jb2005,没有发现过这个问题,可能是你jbuilder导入包缺少点什么。

彭老师你好!我下载了Struts+Jdon+POJO/EJB新闻论坛系统的完整运行包,内含的MySQL启动正常,但是JBoss却不能正常启动,点击run.bat后出现"Failed to boot JBoss"的问题,不知道是什么原因,请彭老师指点

环境变量JAVA_HOME需要设置