用一下技术servlet、html和jdbc封装为jstl标签框架 实现Servlet程序完成以下功能: 根据tn表名参数,使用request.getParameter('tn') 方法得到表名,根据表名使用connection.getMetaData()动态获取数据表字段结构,依字段名命名表单项,使用response.getWriter()方法输出网页表单,实现数据列表、添加和编辑功能。 表单提交后通过之前以字段名命名的网页表单项,使用Servlet提供的request.getParameter() 方法 接收客户端提交的数据,再使用jdbc技术实现增、删、改、查等功能。
时间: 2024-03-20 07:42:55 浏览: 70
好的,我来给您提供一下这个功能的大体思路和代码示例。
首先,我们需要编写一个Servlet程序,用于处理HTTP请求和响应。在Servlet中,我们可以使用request.getParameter()方法获取请求参数,根据表名使用connection.getMetaData()获取数据表字段结构,再根据字段名命名表单项。接下来,我们可以使用response.getWriter()方法输出网页表单。
代码示例:
```java
@WebServlet("/table")
public class TableServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String tableName = request.getParameter("tn");
if(tableName == null) {
response.getWriter().println("Please input table name!");
return;
}
Connection conn = null;
try {
conn = DBUtil.getConnection();
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs = metaData.getColumns(null, null, tableName, null);
List<Column> columns = new ArrayList<Column>();
while(rs.next()) {
Column column = new Column();
column.setName(rs.getString("COLUMN_NAME"));
column.setType(rs.getString("TYPE_NAME"));
columns.add(column);
}
request.setAttribute("columns", columns);
request.getRequestDispatcher("/WEB-INF/views/table.jsp").forward(request, response);
} catch (Exception e) {
response.getWriter().println(e.getMessage());
} finally {
DBUtil.closeConnection(conn);
}
}
}
```
在JSP页面中,我们可以使用JSTL标签库来生成表单。我们可以根据数据表字段结构动态生成表单,包括数据列表、添加和编辑功能。在表单提交后,我们可以使用Servlet提供的request.getParameter()方法接收客户端提交的数据,并使用JDBC技术实现增、删、改、查等功能。
代码示例:
```html
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Table Form</title>
</head>
<body>
<h1>Table Form</h1>
<form action="table" method="post">
<table>
<c:forEach var="column" items="${columns}">
<tr>
<td>${column.name}:</td>
<td>
<c:choose>
<c:when test="${column.type == 'VARCHAR'}">
<input type="text" name="${column.name}" value="">
</c:when>
<c:when test="${column.type == 'INTEGER'}">
<input type="number" name="${column.name}" value="">
</c:when>
<c:when test="${column.type == 'DATE'}">
<input type="date" name="${column.name}" value="">
</c:when>
<c:otherwise>
<input type="text" name="${column.name}" value="">
</c:otherwise>
</c:choose>
</td>
</tr>
</c:forEach>
</table>
<input type="submit" value="Submit">
</form>
</body>
</html>
```
在Servlet中,我们可以根据提交的请求类型来执行不同的操作。例如,如果请求类型是GET,则显示表单页面;如果请求类型是POST,则处理表单提交操作。
代码示例:
```java
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String tableName = request.getParameter("tn");
if(tableName == null) {
response.getWriter().println("Please input table name!");
return;
}
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtil.getConnection();
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs = metaData.getColumns(null, null, tableName, null);
List<Column> columns = new ArrayList<Column>();
while(rs.next()) {
Column column = new Column();
column.setName(rs.getString("COLUMN_NAME"));
column.setType(rs.getString("TYPE_NAME"));
columns.add(column);
}
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(tableName).append("(");
for(Column column : columns) {
sb.append(column.getName()).append(",");
}
sb.deleteCharAt(sb.length() - 1).append(") VALUES(");
for(Column column : columns) {
sb.append("?,");
}
sb.deleteCharAt(sb.length() - 1).append(")");
String sql = sb.toString();
pstmt = conn.prepareStatement(sql);
for(int i = 1; i <= columns.size(); i++) {
String columnName = columns.get(i - 1).getName();
String columnType = columns.get(i - 1).getType();
String value = request.getParameter(columnName);
if(columnType.equals("INTEGER")) {
pstmt.setInt(i, Integer.parseInt(value));
} else if(columnType.equals("DATE")) {
pstmt.setDate(i, Date.valueOf(value));
} else {
pstmt.setString(i, value);
}
}
pstmt.executeUpdate();
response.sendRedirect("table?tn=" + tableName);
} catch (Exception e) {
response.getWriter().println(e.getMessage());
} finally {
DBUtil.closeConnection(conn);
DBUtil.closeStatement(pstmt);
}
}
```
这就是一个简单的使用Servlet、HTML和JDBC封装为JSTL标签框架的示例。希望能够帮助您完成您的任务。
阅读全文