请教大侠struts程序中的数据访问层应该怎么写啊?谢谢!我看了些struts方面的教程,现在想自己动手用struts写一个简单的有增、删、改等操作的jsp网页,我想把业务逻辑层(比如实现添加信息 修改信息 更新信息 插入信息 删除信息这些方法和各个验证的方法)放在struts的mvc中的m层(也就是模型层),然后把业务逻辑层的javabean放在jsp页面的html状态下调用。可数据访问层(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)到底是应该像传统的model1那样把select from.. insert into...等直接写在jsp页面的html状态下还是先把(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)先编译为java类文件(也就是javabean)然后把数据访问层的javabean放在jsp页面的html状态下调用???这二种方法在单纯的struts程序中(也就是数据访问层不用hibernation)哪个用得普遍些啊???谢谢!
view主要是jsp实现显示,一般都是通过标签控制值对象来实现这样
model就是我们平时说的业务逻辑以及值对象(javabean)值对象继承了ActionForm
control就是实现了action的java类一般来说数据库操作都是写在业务逻辑类里面的,我们把要处理的数据封装进值对象然后业务逻辑类对这些值对象进行处理
control类对上述过程进行控制,操作完成后返回相应的页面
数据访问层(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)到底是应该像传统的model1那样把select from.. insert into...等直接写在jsp页面的html状态下还是先把(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)先编译为java类文件(也就是javabean)然后把数据访问层的javabean放在jsp页面的html状态下调用???这二种方法在单纯的struts程序中(也就是数据访问层不用hibernation)哪个用得普遍些啊???谢谢!
import java.sql.*;
import java.util.ArrayList;import javax.naming.*;
import javax.sql.*;public class PmsDBConnection {
protected static PmsDBConnection instance_m = null;
protected static String PMS_JNDI_NAME = "PMS_JNDI";
protected DataSource pmsDataSource_m = null;
protected Connection dbCon_m = null;
/**
*
*/
protected PmsDBConnection() throws PmsException
{
// try
// {
//
// Context initContext = new InitialContext();
// Context envCtx = (Context)initContext.lookup("java:comp/env");
// DataSource ds = (DataSource)envCtx.lookup("jdbc/oracle");
// } catch (NamingException e)
// {
// System.out.println(e.getMessage());
// throw new PmsException(10);
// }
}
protected Statement getStatement() throws PmsException
{
Context initCtx;
try
{
dbCon_m = pmsDataSource_m.getConnection();
Statement stmt = dbCon_m.createStatement();
return stmt;
}catch (SQLException e)
{
//TODO SQLException
throw new PmsException(1);
}
}
protected static PmsDBConnection getInstance() throws PmsException
{
if(null == instance_m)
{
instance_m = new PmsDBConnection();
}
return instance_m;
}
/*******************************************************************************************/
public boolean executeUpdate(String sql) throws PmsException
{
try
{
Connection conn = pmsDataSource_m.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e)
{
//TODO SQLException
throw new PmsException(1);
}
return true;
}
public boolean executeUpdate(ArrayList sqls) throws PmsException
{
for(int i = 0; i < sqls.size(); i++)
{
this.executeUpdate(sqls.get(i).toString());
}
return true;
}
public ArrayList executeQuery(String sql, String beanName) throws PmsException
{
ArrayList result = new ArrayList();
try
{
Connection conn = pmsDataSource_m.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
Class cl = Class.forName(beanName);
Field fs [] = cl.getDeclaredFields();
while(rs.next())
{
Object obj = cl.newInstance();
for(int i = 0; i < fs.length; i++)
{
fs[i].set(obj, rs.getObject(fs[i].getName()));
}
result.add(obj);
}
rs.close();
conn.close();
} catch (SQLException e)
{
//TODO SQLException
throw new PmsException(1);
} catch (ClassNotFoundException e)
{
//TODO ClassNotFoundException
throw new PmsException(2);
} catch (InstantiationException e)
{
//TODO InstantiationException
throw new PmsException(3);
} catch (IllegalAccessException e)
{
//TODO IllegalAccessException
throw new PmsException(4);
}
return result;
}
}
import java.sql.DriverManager;
import java.sql.SQLException;
public class pmsDataSource
{
public static Connection getConnection()
{
// Step1
Connection theConnection = null;
try
{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
//Step2
String url = "jdbc:oracle:thin:@localhost:1521:DONGDONG";
String userName = "scott";
String password = "tiger";
theConnection = DriverManager.getConnection(url,userName,password);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception e)
{
e.printStackTrace();
}
return theConnection;
}
}
然后这些操作数据库的方法应该在action中调用,而不是在jsp中,
是个东软的.呵呵.
在单纯的struts程序中
数据访问层(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)到底是应该像传统的model1那样把select from.. insert into...等直接写在jsp页面的html状态下还是先把(比如 添加信息 修改信息 更新信息 插入信息 删除信息等具体的操作过程和连接数据库的字符串)先编译为java类文件(也就是javabean)然后把数据访问层的javabean放在jsp页面的html状态下调用???这二种方法在单纯的struts程序中(也就是数据访问层不用hibernation)哪个用得普遍些啊???谢谢!
所以选择写成javabean的是最普遍的
我说的意思是说jsp只负责接收业务逻辑层的数据并显示.而业务逻辑是放在action中调用,数据访问封装成一个bean,然后业务逻辑bean的方法中调用这个bean
但我确是看到一些教程把业务逻辑层的JavaBean那样放在jsp页面的html中啊!孙卫琴的"精通struts"书中第二章的例子里hello.jsp 文件的html中就有下面的代码啊!其中personbean.class这个JavaBean就是业务逻辑层啊!这怎么解释啊?请知道的回一下啊!
<logic:present name="personbean" scope="request">
<h2>
<bean:message key="hello.jsp.page.hello"/>
<bean:write name="personbean" property="userName" />!<p>
</h2>
</logic:present>
就算你不用hibenate,你写个接口利用DAO模式和普通的POJO,同样可以做到他们的分离。
然后再你的DAO中可以解耦合jsp与业务逻辑对象的关系。
可以直接jdbc连接,也可以用服务器连接池,还可以用hibernate之类的东西。不知道对不对,请大家指教。