目标:在jsp页面上通过自定义标签,查询数据库。
package org.vv.taglib;
import java.io.IOException;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
public class QueryTag extends TagSupport {
private static final long serialVersionUID = 1L;
// 标签的属性
private String driver;
private String url;
private String user;
private String password;
private String sql;
// 执行数据库访问的对象
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
// 标签属性 driver url user password sql 的getter/setter方法
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
// 标签处理
public int doEndTag() throws JspTagException {
// 注册驱动
try {
Class.forName(driver);
// 获取数据库连接
conn = DriverManager.getConnection(url, user, password);
// 创建Statement对象
stmt = conn.createStatement();
// 执行查询
rs = stmt.executeQuery(sql);
rsmd = rs.getMetaData();
// 获取列数目
int columnCount = rsmd.getColumnCount();
// 获取页面输出流
Writer out = pageContext.getOut();
// 在页面输出表格
out.write("<table border='1' bgColor='9999cc'>");
// 遍历结果集
out.write("<tr>");
for (int i=0;i<rs.getMetaData().getColumnCount();i++){
out.write("<td>");
out.write(rs.getMetaData().getColumnName(i+1));
out.write("</td>");
}
out.write("</tr>");
while (rs.next()) {
out.write("<tr>");
// 逐列输出查询到的数据
for (int i = 1; i <= columnCount; i++) {
out.write("<td>");
out.write(rs.getString(i));
out.write("</td>");
}
out.write("</tr>");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
destroy();
}
return EVAL_PAGE;
}
// 销毁标签前调用的方法
public void destroy() {
// 关闭结果集
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭Statement
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭数据库连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在 WebRoot\WEB-INF 目录下添加文件 query.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>query</short-name>
<tag>
<!-- 配置标签名 -->
<name>query</name>
<!-- 配置标签处理类 -->
<tag-class>org.vv.taglib.QueryTag</tag-class>
<!-- 配置标签体为空 -->
<body-content>empty</body-content>
<!-- 配置标签属性 driver -->
<attribute>
<name>driver</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<!-- 配置标签属性 url -->
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<!-- 配置标签属性 user -->
<attribute>
<name>user</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<!-- 配置标签属性 password -->
<attribute>
<name>password</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<!-- 配置标签属性 sql -->
<attribute>
<name>sql</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<jsp-config>
<taglib>
<taglib-uri>query</taglib-uri>
<taglib-location>/WEB-INF/query.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
jsp 页面中的调用方法
<myquery:query driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://192.168.0.88:1433;DatabaseName=directorMail"
user="user" password="password" sql="select * from mailInfo" />
分享到:
相关推荐
另一个文件“JSP漂亮的界面控件”可能是包含了一些预设的JSP组件库,如自定义的CSS样式、JavaScript插件等,用于增强备忘录系统界面的视觉效果和交互性。 在实际的开发过程中,SSH框架的使用方式如下: 1. **...
在JSP中,可以通过自定义Java类或者使用现有的开源库来实现这些算法。 接下来,涉及数据库存储,比如使用MySQL。在带有备忘录功能的万年历中,用户可能会添加、编辑或删除他们的备忘事项,这些数据需要存储在后台...
Struts提供了标签库(Struts Tags),这些是JSP自定义标签,简化了视图层的开发。例如,logic标签用于控制流程,bean标签用于显示ActionForm中的属性,html标签用于创建HTML表单元素。 **6. 国际化与本地化** ...
- 自定义标签:用于在JSP页面中自定义功能,增强模板的可复用性和灵活性。 - 日志类:如Log4j或java.util.logging,用于记录程序运行状态和错误信息。 - 资源注册:注册和管理应用中的各种资源,如数据库连接池、...
- **扩展技术**:EL 表达式、JSTL 标签库、自定义标签等。 - **Tomcat**:学习如何部署和运行 Java 应用到 Tomcat 服务器上。 #### Java EE 初级工程师 - **数据库技术**:MySQL、Oracle、SQL Server 等数据库系统...
- JSP:脚本元素、指令元素、EL表达式、JSTL标签库。 - MVC模式:在Java Web开发中的应用。 - JDBC:数据库连接,事务管理,预编译语句。 10. **设计模式** - 创建型模式:单例、工厂、抽象工厂、建造者、原型...
- **标签库**:提供了丰富的自定义标签,方便创建动态网页。 - **配置文件**:使用 XML 文件来管理应用配置,如 URL 映射、错误信息等。 - **反射机制**:利用 Java Reflection API 自动填充 JavaBeans 属性。 #...
- 提供了一套自定义的JSP标签库,这些标签库简化了表单处理和其他常用操作。 - 使用配置文件(通常是XML格式)来管理应用程序的行为,这使得应用程序更加灵活且易于维护。 - 支持国际化和资源文件的管理,使得应用...
动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...