- 在web.xml文件中设置相应的上下文参数值。
- 在要访问mysql数据库的页面中设置dataSource.
其实,这两种方法是条条大路通罗马,其目的都是设置并创建jsp中的DataSource实例,然后在页面中调用DataSource实例来连接数据库。下面详细介绍两种方法。
第一种方法:
用编辑器打开WEB-INF文件夹中的web.xml文件,找到
<web-app>
...
<context-param>
<param-name>
javax.servlet.jsp.jstl.sql.dataSource
</param-name>
<param-value>
jdbc:mysql://localhost:3306/work,com.mysql.jdbc.Driver,root,admin
</param-value>
<context-param>
...
</web-app>
这一段(没有web.xml文件的话,创建一个也可以。),其中<context-param>和</context-param>之间的就是一个上下文参数,参数名为“javax.servlet.jsp.jstl.sql.dataSource”,参数值为“jdbc:mysql://localhost:3306/work,com.mysql.jdbc.Driver,root,admin”。这个参数可以告知JSTL动作自行创建DataSource所需的所有信息。参数名是固定的,不能改。参数值有四个部分。第一部分为JDBC URL,即你要连接的数据库的地址或路径。我是在自己的机器上安装的mysql,采用的是默认的3306端口,而我要连接的数据库名为work,所以这里的JDBC URL是“jdbc:mysql://localhost:3306/work”,具体的格式可以参考你所用驱动程序的不同的改变。第二部分为JDBC驱动程序类名,而且必须是完全限定类名。我用的是mysql提供的connector/J驱动程序,所以这里的完全限定类名是“com.mysql.jdbc.Driver”,这里也需要根据不同驱动程序而改动得,具体参考驱动程序稳当。另外要提一下的是,驱动程序的类文件或JAR包需要放在WEB-INF/lib目录中,这样web容器才能找到驱动程序。第三、第四部分比较简单,是访问该数据库所需的用户名和密码,有则写上,无则免之。
第二种方法:
在要访问数据库的页面中使用JSTL <sql:setDataSource>动作。这里假设还要访问前一方法所连接的数据库,在要访问数据库的页面中添加如下代码:
<sql:setDataSource var="ds" scope="application"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/work"
user="root"
password="admin"
/>
上边的"var"、“scope”、“driver”、“url”、“user”、“password”都是JSTL <sql:setDataSource>动作的属性。var是保存数据源的变量名,scope是数据源的作用域,driver是用于访问数据库的JDBC驱动程序类的名字,url是数据库的JDBC URL,user是数据库帐户名,password是数据库账户口令。
上边代码的大致意思就是使用com.mysql.jdbc.Driver这个驱动程序,以root用户名和admin为密码,建立一个连接到JDBC地址为jdbc:mysql://localhost:3306/work的数据库的连接,将此连接保存在名为ds的变量中,该数据源连接的作用域为application。
当然在要想使用次数据源,需要在访问动作中指定该数据源,方法如下:
<sql:query
var="emp"
dataSource="${ds}"
sql="select name,phone from employee"
/>
因为不给出动作的dataSource属性而web.xml文件中又没有默认的数据源的话,动作是不知道使用哪个数据源的。不给出动作的dataSource属性,而web.xml中又设置过其他数据源的话,动作就会使用你不希望使用的数据源的。
以上方法是基于JSP的方法,其业务逻辑和页面表示在同一文件中,这样在业务逻辑表较简单的情况下不会产生太大问题。如果业务逻辑比较复杂,会使页面维护起来非常困难。这种方法比较适合对Java编程了解不深的人。如果熟悉Java编程,建议采用Java beans的方案。我会在近期给出采用beans的方案。