目录
jsp小练习01
jdbc小练习01
设计数据库
以下是一个基本的登录页面(login.jsp):
以下是checklogin.jsp页面的示例代码:
以下是main.jsp页面的示例代码:
以下是add.jsp页面的示例代码:
以下是doadd.jsp页面的示例代码:
以下是edit.jsp页面的示例代码:
以下是doedit.jsp页面的示例代码,用于实现更新名片信息的功能。
以下是search.jsp的示例代码:
以下是delete.jsp的示例代码:
以下是recycle.jsp的示例代码:
以下是recover.jsp的示例代码:
jsp小练习01
用jsp设计:.应用Date函数读取系统当前时间,根据不同的时间段,在浏览器输出不同的问候语,例如上午0~12点之间输出“早上好”,同时把系统的年、月、日、小时、分、秒和星期输出到用户的浏览器。
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<title>问候语</title>
</head>
<body>
<%
// 获取当前的时间
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
String currentTime = dateFormat.format(now);
// 获取当前的小时数
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
// 根据不同时间段输出不同的问候语
String greeting;
if (hour >=0 && hour < 12) {
greeting = "早上好";
} else if (hour >= 12 && hour < 18) {
greeting = "下午好";
} else {
greeting = "晚上好";
}
// 输出问候语和时间
out.println("<p>" + greeting + "</p>");
out.println("<p>现在是:" + currentTime + "</p>");
%>
</body>
</html>
jdbc小练习01
利用JDBC设计:
1.设计一个简单的网上名片管理系统,实现名片的增、删、改、查等操作。该名片管理系统包括如下功能:
(1)用户登录与注册
用户登录:在登录时,如果用户名和密码正确,进入系统页面。
用户注册:新用户应该先注册,然后再登录该系统。
(2)名片管理
增加名片:以仿真形式(按常用的名片格式)增加名片信息。
修改名片:以仿真形式(按常用的名片格式)修改名片信息。
查询名片:以模糊查询方式查询名片。
删除名片:名片的删除由2种方式,即把名片移到回收站,把名片彻底删除。
(3)回收站管理
还原:把回收站中的名片还原回收。
彻底删除:把名片彻底从回收站删除。
浏览/查询:可以模糊查询、浏览回收站中的名片。
设计数据库
首先,需要设计数据库表来存储名片信息和用户信息。以下是名片信息表和用户信息表的设计:
名片信息表cards:
用户信息表users:
接着,需要编写JSP页面来实现登录、注册、名片管理和回收站管理功能。
以下是一个基本的登录页面(login.jsp):
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>登录 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 登录</h1>
<form method="post" action="checklogin.jsp">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
在该页面中,用户输入用户名和密码后提交表单,将会跳转到checklogin.jsp页面进行校验。
以下是checklogin.jsp页面的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>登录结果 - 网上名片管理系统</title>
</head>
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
// 连接数据库进行验证
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
// 登录成功
session.setAttribute("userid", rs.getInt("id"));
response.sendRedirect("main.jsp"); // 跳转到主页面
} else {
// 登录失败
out.println("<h2>用户名或密码错误,请重新登录!</h2>");
out.println("<a href='login.jsp'>返回登录页面</a>");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,首先获取从login.jsp传递过来的用户名和密码。然后,连接数据库进行验证。如果用户名和密码正确,则将用户ID存储在session中,并跳转到main.jsp页面。否则,返回登录页面。
以下是main.jsp页面的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>网上名片管理系统</title>
</head>
<body>
<%
int userid = (int) session.getAttribute("userid");
// 连接数据库,获取用户信息和名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
// 获取用户信息
String sql = "SELECT * FROM users WHERE id='" + userid + "'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
String username = rs.getString("username");
out.println("<h1>网上名片管理系统 - " + username + "</h1>");
}
rs.close();
// 显示已有名片信息
sql = "SELECT * FROM cards WHERE userid='" + userid + "'";
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String company = rs.getString("company");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
String fax = rs.getString("fax");
String email = rs.getString("email");
String address = rs.getString("address");
out.println("<h2>名片" + id + "</h2>");
out.println("<table>");
out.println("<tr><td>姓名:</td><td>" + name + "</td></tr>");
out.println("<tr><td>公司:</td><td>" + company + "</td></tr>");
out.println("<tr><td>电话:</td><td>" + phone + "</td></tr>");
out.println("<tr><td>手机:</td><td>" + mobile + "</td></tr>");
out.println("<tr><td>传真:</td><td>" + fax + "</td></tr>");
out.println("<tr><td>邮箱:</td><td>" + email + "</td></tr>");
out.println("<tr><td>地址:</td><td>" + address + "</td></tr>");
out.println("</table>");
out.println("<a href='edit.jsp?id=" + id + "'>编辑</a> ");
out.println("<a href='delete.jsp?id=" + id + "'>删除</a><hr>");
}
rs.close();
// 关闭数据库连接
stmt.close();
conn.close();
%>
<a href='add.jsp'>新增名片</a>
<a href='recycle.jsp'>回收站</a>
<a href='logout.jsp'>退出登录</a>
</body>
</html>
在该页面中,首先根据session中保存的用户ID查询用户信息,然后显示已有的名片信息。
同时,在该页面中提供了三个链接,用于新增名片、回收站和退出登录。
以下是add.jsp页面的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>新增名片 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 新增名片</h1>
<form method="post" action="doadd.jsp">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>公司:</td>
<td><input type="text" name="company"></td>
</tr>
<tr>
<td>电话:</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td>手机:</td>
<td><input type="text" name="mobile"></td>
</tr>
<tr>
<td>传真:</td>
<td><input type="text" name="fax"></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>地址:</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="保存"></td>
</tr>
</table>
</form>
</body>
</html>
该页面用于输入新增名片的信息。表单提交后将会跳转到doadd.jsp页面进行数据库操作。
以下是doadd.jsp页面的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>新增名片结果 - 网上名片管理系统</title>
</head>
<body>
<%
int userid = (int) session.getAttribute("userid");
String name = request.getParameter("name");
String company = request.getParameter("company");
String phone = request.getParameter("phone");
String mobile = request.getParameter("mobile");
String fax = request.getParameter("fax");
String email = request.getParameter("email");
String address = request.getParameter("address");
// 连接数据库,执行插入操作
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "INSERT INTO cards (name, company, phone, mobile, fax, email, address, userid) VALUES ('" + name + "', '" + company + "', '" + phone + "', '" + mobile + "', '" + fax + "', '" + email + "', '" + address + "', '" + userid + "')";
stmt.executeUpdate(sql);
stmt.close();
conn.close();
// 返回主页面
response.sendRedirect("main.jsp");
%>
</body>
</html>
在该页面中,首先获取表单提交过来的新增名片信息,然后连接数据库执行插入操作。插入成功后,将会跳转到主页面。
以下是edit.jsp页面的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>编辑名片 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 编辑名片</h1>
<%
int id = Integer.parseInt(request.getParameter("id"));
int userid = (int) session.getAttribute("userid");
// 连接数据库,获取名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM cards WHERE id='" + id + "' AND userid='" + userid + "'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
String name = rs.getString("name");
String company = rs.getString("company");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
String fax = rs.getString("fax");
String email = rs.getString("email");
String address = rs.getString("address");
out.println("<form method='post' action='doedit.jsp'>");
out.println("<input type='hidden' name='id' value='" + id + "'>");
out.println("<table>");
out.println("<tr><td>姓名:</td><td><input type='text' name='name' value='" + name + "'></td></tr>");
out.println("<tr><td>公司:</td><td><input type='text' name='company' value='" + company + "'></td></tr>");
out.println("<tr><td>电话:</td><td><input type='text' name='phone' value='" + phone + "'></td></tr>");
out.println("<tr><td>手机:</td><td><input type='text' name='mobile' value='" + mobile + "'></td></tr>");
out.println("<tr><td>传真:</td><td><input type='text' name='fax' value='" + fax + "'></td></tr>");
out.println("<tr><td>电子邮件:</td><td><input type='text' name='email' value='" + email + "'></td></tr>");
out.println("<tr><td>地址:</td><td><input type='text' name='address' value='" + address + "'></td></tr>");
out.println("<tr><td colspan='2'><input type='submit' value='保存'></td></tr>");
out.println("</table>");
out.println("</form>");
} else {
out.println("<h2>无权访问此名片!</h2>");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,首先获取从main.jsp传递过来的名片ID和用户ID,并连接数据库查询名片信息。如果查询到符合条件的名片,则将名片信息显示到表单中,并在form标签中添加隐藏的id字段。表单提交后将会跳转到doedit.jsp页面进行数据库操作。如果无权访问此名片,则输出无权访问的提示信息。
以下是doedit.jsp页面的示例代码,用于实现更新名片信息的功能。
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>编辑名片 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 编辑名片</h1>
<%
int id = Integer.parseInt(request.getParameter("id"));
int userid = (int) session.getAttribute("userid");
String name = request.getParameter("name");
String company = request.getParameter("company");
String phone = request.getParameter("phone");
String mobile = request.getParameter("mobile");
String fax = request.getParameter("fax");
String email = request.getParameter("email");
String address = request.getParameter("address");
// 连接数据库,更新名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "UPDATE cards SET name='" + name + "', company='" + company + "', phone='" + phone +
"', mobile='" + mobile + "', fax='" + fax + "', email='" + email + "', address='" + address +
"' WHERE id='" + id + "' AND userid='" + userid + "'";
int rows = stmt.executeUpdate(sql);
if (rows == 1) {
out.println("<h2>名片更新成功!</h2>");
} else {
out.println("<h2>名片更新失败!</h2>");
}
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,首先获取从编辑名片页面传递过来的名片ID和用户ID,以及提交的新的名片信息。然后连接数据库,执行UPDATE语句更新名片信息。如果更新成功,则输出更新成功的提示信息,否则输出更新失败的提示信息。最后关闭数据库连接。
以下是doedit.jsp页面的完整示例代码,包括表单校验和重定向到main.jsp页面的功能。
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>编辑名片 - 网上名片管理系统</title>
<script type="text/javascript">
function checkForm() {
var name = document.forms[0].name.value;
if (name == "") {
alert("姓名不能为空!");
return false;
}
var company = document.forms[0].company.value;
if (company == "") {
alert("公司不能为空!");
return false;
}
var phone = document.forms[0].phone.value;
var mobile = document.forms[0].mobile.value;
if (phone == "" && mobile == "") {
alert("电话和手机至少填写一项!");
return false;
}
}
</script>
</head>
<body>
<h1>网上名片管理系统 - 编辑名片</h1>
<%
int id = Integer.parseInt(request.getParameter("id"));
int userid = (int) session.getAttribute("userid");
String name = request.getParameter("name");
String company = request.getParameter("company");
String phone = request.getParameter("phone");
String mobile = request.getParameter("mobile");
String fax = request.getParameter("fax");
String email = request.getParameter("email");
String address = request.getParameter("address");
// 表单校验
if (name == null || company == null || phone == null || mobile == null ||
name.equals("") || company.equals("") || (phone.equals("") && mobile.equals(""))) {
response.sendRedirect("edit.jsp?id=" + id);
return;
}
// 连接数据库,更新名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "UPDATE cards SET name='" + name + "', company='" + company + "', phone='" + phone +
"', mobile='" + mobile + "', fax='" + fax + "', email='" + email + "', address='" + address +
"' WHERE id='" + id + "' AND userid='" + userid + "'";
int rows = stmt.executeUpdate(sql);
if (rows == 1) {
response.sendRedirect("main.jsp");
} else {
out.println("<h2>名片更新失败!</h2>");
}
stmt.close();
conn.close();
%>
</body>
</html>
以下是查询名片、删除名片和回收站管理的示例代码。其中,模糊查询使用LIKE子句实现,删除名片分为将名片移动到回收站和彻底删除两种,回收站管理包括还原和彻底删除。
查询名片的功能可以在main.jsp页面上添加一个查询表单,用户输入关键字后提交,调用search.jsp页面进行查询。
以下是search.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>查询名片 - 网上名片管理系统</title>
<style type="text/css">
table, td {
border: 1px solid black;
padding: 5px;
}
</style>
</head>
<body>
<h1>网上名片管理系统 - 查询名片</h1>
<%
String keyword = request.getParameter("keyword");
if (keyword == null) {
keyword = "";
}
// 连接数据库,查询名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM cards WHERE name LIKE '%" + keyword + "%' OR company LIKE '%" + keyword + "%' ORDER BY id DESC";
ResultSet rs = stmt.executeQuery(sql);
// 输出查询结果
if (!rs.next()) {
out.println("<p>没有符合条件的名片!</p>");
} else {
out.println("<table>");
out.println("<tr><th>ID</th><th>姓名</th><th>公司</th><th>电话</th><th>手机</th><th>操作</th></tr>");
do {
int id = rs.getInt("id");
String name = rs.getString("name");
String company = rs.getString("company");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
out.println("<tr><td>" + id + "</td><td>" + name + "</td><td>" + company + "</td><td>" + phone +
"</td><td>" + mobile + "</td><td><a href='edit.jsp?id=" + id + "'>编辑</a> <a href='delete.jsp?id=" +
id + "'>删除</a></td></tr>");
} while (rs.next());
out.println("</table>");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,根据用户输入的关键字(模糊查询),构造SELECT语句查询名片信息,并输出查询结果。如果没有符合条件的名片,则输出相应提示信息。
删除名片的功能可以通过在主页面中添加“删除”链接实现。点击该链接后,调用delete.jsp进行名片删除,根据用户选择的方式将名片移动到回收站或彻底删除。
以下是delete.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>删除名片 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 删除名片</h1>
<%
int id = Integer.parseInt(request.getParameter("id"));
String action = request.getParameter("action");
if (action == null) {
action = "";
}
// 连接数据库,删除名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
int rows = 0;
if (action.equals("discard")) {
// 将名片移动到回收站
rows = stmt.executeUpdate("UPDATE cards SET discard=1 WHERE id='" + id + "'");
} else {
// 彻底删除名片
rows = stmt.executeUpdate("DELETE FROM cards WHERE id='" + id + "'");
}
if (rows == 1) {
response.sendRedirect("main.jsp");
} else {
out.println("<h2>名片删除失败!</h2>");
}
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,根据用户选择的操作(移动到回收站或彻底删除),构造UPDATE或DELETE语句删除名片信息,并在成功删除后重定向到主页面main.jsp。
回收站管理的功能可以添加一个链接或按钮在主页面中,点击后进入recycle.jsp页面进行回收站管理。
以下是recycle.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>回收站管理 - 网上名片管理系统</title>
<style type="text/css">
table, td {
border: 1px solid black;
padding: 5px;
}
</style>
</head>
<body>
<h1>网上名片管理系统 - 回收站管理</h1>
<%
String keyword = request.getParameter("keyword");
if (keyword == null) {
keyword = "";
}
// 连接数据库,查询回收站中的名片信息
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM cards WHERE discard=1 AND name LIKE '%" + keyword +
"%' OR company LIKE '%" + keyword + "%' ORDER BY id DESC";
ResultSet rs = stmt.executeQuery(sql);
// 输出查询结果
if (!rs.next()) {
out.println("<p>回收站中没有名片!</p>");
} else {
out.println("<table>");
out.println("<tr><th>ID</th><th>姓名</th><th>公司</th><th>电话</th><th>手机</th><th>操作</th></tr>");
do {
int id = rs.getInt("id");
String name = rs.getString("name");
String company = rs.getString("company");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
out.println("<tr><td>" + id + "</td><td>" + name + "</td><td>" + company + "</td><td>" + phone +
"</td><td>" + mobile + "</td><td><a href='recover.jsp?id=" + id + "'>还原</a> <a href='delete.jsp?id=" +
id + "&action=delete'>彻底删除</a></td></tr>");
} while (rs.next());
out.println("</table>");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,根据用户输入的关键字(模糊查询),构造SELECT语句查询回收站中的名片信息,并输出查询结果。其中,每条查询结果均包含一个“还原”链接和一个“彻底删除”链接,分别调用recover.jsp和delete.jsp进行还原和彻底删除操作。
还原名片的功能可以在recover.jsp页面中实现,调用UPDATE语句将名片从回收站中还原。
以下是recover.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>还原名片 - 网上名片管理系统</title>
</head>
<body>
<h1>网上名片管理系统 - 还原名片</h1>
<%
int id = Integer.parseInt(request.getParameter("id"));
// 连接数据库,还原名片
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("UPDATE cards SET discard=0 WHERE id='" + id + "'");
if (rows == 1) {
response.sendRedirect("recycle.jsp");
} else {
out.println("<h2>名片还原失败!</h2>");
}
stmt.close();
conn.close();
%>
</body>
</html>
在该页面中,根据用户选择的操作,构造UPDATE语句将名片从回收站中还原,并在成功还原后重定向到回收站管理页面recycle.jsp。
彻底删除名片的功能在delete.jsp页面中已经实现,当用户选择彻底删除时,将直接调用DELETE语句删除名片信息。