1、 JSP开发模式
在传统的JSP应用的,大量表单数据的提交都是通过request.getParameter()方法获得的,如有下面这样一个表单:
<form action="login_validate.jsp" method="post">
<table border="0" cellspacing="0" cellpadding="3">
<tr>
<td colspan="2" align="center">用户登录</td>
</tr>
<tr>
<td>登陆名:</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登陆">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
在处理表单数据的login_validate.jsp页面中就要使用如下方式获取数据:
<%
//接受请求的内容
String id = request.getParameter("id");
String password = request.getParameter("password");
%>
而对与需要与数据进行交互的系统,如以上需要到数据库中验证用户名和密码的正确性,这就要求进行数据库驱动的加载、连接数据库、执行操作等一系列的操作,如:
<%
//数据库驱动
String dbDriver = "org.gjt.mm.mysql.Driver";
//数据库连接字符串
String dbUrl = "jdbc:mysql://localhost:3306/test001";
//数据库用户名
String dbUName = "root";
//数据库用户密码
String dbUPassword = "root";
//声明一个数据库连接对象
Connection conn = null;
//声明一个数据库操作对象
Statement stmt = null;
//声明一个结果集对象
ResultSet rs = null;
//声明一个SQL语句变量
String sqlStr = null;
try
{
//加载数据库驱动
Class.forName(dbDriver).newInstance();
//连接数据库
conn = DriverManager.getConnection(dbUrl,dbUName,dbUPassword);
//实例化数据库操作对象
stmt = conn.createStatement();
sqlStr = "select name from person where id = '" + id + "' and password = '" + password + "'";
System.out.println(sqlStr);
rs = stmt.executeQuery(sqlStr);
if(rs.next())
{
//有记录,标记为查询验证成功
flag = true;
}
//依次关闭
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>
然后再根据查询结果,判断下一步的操作,如下:
<%
//判断用户名和密码是否合法
if (flag)
{
//合法,跳转到成功页面
%>
<jsp:forward page="login_success.jsp" />
<%
}
else
{
//非法,跳转到失败页面
%>
<jsp:forward page="login_failure.jsp"/>
<%
}
%>
这样的一套过程下来,在JSP页面中大量的嵌入了Java语言,使系统的表现层页面、控制层管理、逻辑业务层的操作紧密耦合在一起,对复杂系统的开发与维护带来了很大的不变。而且对于一个大型的系统,有很多西方都需要连接数据库进行操作,这就需要在每个地方都嵌入相同的打开数据库的Java代码,如果数据库的信息发生了改变,就需要对每一个文件都进行一次修改,这样的工作量可想而知,有可能是上万个页面的代码需要修改。
所以我们可以根据实际的业务情况,将对数据库的操作剥离出来,形成一个独立的模块,供使用它的地方进行调用,这就是下面要提到的Dao+Factory的模式。