三个jsp页面+Java片段实现的用户登录和用户列表查询[带分页]

和Servlet功能需求一样

数据库:

CREATE DATABASE user;

USE user;

CREATE TABLE `user` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(32) NOT NULL,
`password` varchar(64) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`grade` char(2) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=836 DEFAULT CHARSET=utf8;

login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录页面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body bgcolor="pink">
<center>
<h3>用户登录</h3>
<hr>
<form action="loginCl.jsp" method="post">
用户名: <input type="text" name="userName"/><br>
密&nbsp;&nbsp;&nbsp;码: <input type="password" name="password"/><br><br>
<input type="reset" value="重置"/>
<input type="submit" value="登录"/>
</form>
</center>
</body>
</html>

loginCl.jsp:

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body>
<%
// 接收参数
String userName = request.getParameter("userName");
String password = request.getParameter("password");

// 数据库连接参数
String DRIVERCLASS = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://localhost:3306/servlet?useUnicode=true&characterEncoding=UTF-8";
String USRENAME = "root";
String PASSWORD = "123456";

// 连接数据库
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName(DRIVERCLASS);
conn = DriverManager.getConnection(URL, USRENAME, PASSWORD);
String sql = "SELECT userName, password FROM user WHERE userName = '" + userName + "' LIMIT 1";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();

// 进行验证
boolean flag = false;
if (rs.next()) { // 用户存在
// 数据库中的用户名和密码
String userName_db = rs.getString("userName");
String password_db = rs.getString("password");

// 验证密码
if (password_db.equals(password)) {
HttpSession hs = request.getSession();
hs.setAttribute("userName", userName);
hs.setMaxInactiveInterval(14*24*60*60);

request.getRequestDispatcher("wel.jsp?userName_db="
+ userName_db).forward(request, response);
} else {
response.sendRedirect("login.jsp?loginErrorInfo=Error-Password");
}
} else { // 用户不存在
response.sendRedirect("login.jsp?loginErrorInfo=Error-UserName");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</body>
</html>

wel.jsp:

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录成功</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<script type="text/javascript">
// 获取文本框的值
var goObj = document.getElementById("go");
function checkGoTo() {
if (form1.dy_pageNow.value == "") {
alert("请输入要跳转的页数");
return false;
}
var pageCount = form1.pageCount.value;
if ((form1.dy_pageNow.value) > pageCount) {
alert("输入的页数过大, 最大页数: " + pageCount);
return false;
}
if (form1.dy_pageNow.value == 0) {
alert("输入页数应该大于0");
return false;
}
var regex = /^\d+$/;
if (!regex.test(form1.dy_pageNow.value)) {
alert("请输入数字");
form1.dy_pageNow.value.value= "";
return false;
}
}
</script>
</head>

<body bgcolor="pink">
<center>
<h3>
<%
String userName = (String) request.getSession().getAttribute("userName");
%>
登录成功, 欢迎: <%=userName %>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="login.jsp">返回登录</a>
</h3>
<hr>
<%
// 定义4个分页变量
int pageSize = 3 ; // 一页多少条
int pageNow = 1 ; // 希望第几页
int rowCount = 0 ; // 多少条
int pageCount = 0 ; // 多少页

// 接收pageNow
String dy_pageNow = request.getParameter("dy_pageNow");
if (dy_pageNow != null) {
pageNow = Integer.parseInt(dy_pageNow);
}

// 数据库连接参数
String DRIVERCLASS = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://localhost:3306/servlet?useUnicode=true&characterEncoding=UTF-8";
String USRENAME = "root";
String PASSWORD = "123456";

// 连接数据库
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = null;
try {
Class.forName(DRIVERCLASS);
conn = DriverManager.getConnection(URL, USRENAME, PASSWORD);

// ==============================用户列表============================
sql = "SELECT * FROM user LIMIT "
+ (pageNow-1)*pageSize + ", " + pageSize;
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
%>
<h3>用户列表</h3>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>userId</th>
<th>userName</th>
<th>password</th>
<th>email</th>
<th>grade</th>
</tr>
<%
while (rs.next()) {
%>
<tr align="center">
<td><%=rs.getInt("userId") %></td>
<td><%=rs.getString("userName") %></td>
<td><%=rs.getString("password") %></td>
<td><%=rs.getString("email") %></td>
<td><%=rs.getInt("grade") %></td>
</tr>
<%
}
%>
</table>
<br><br>
<%
// ==============================分页============================
// 得到rowCount
ps = conn.prepareStatement("SELECT count(*) FROM user");
rs = ps.executeQuery();
if (rs.next()) {
rowCount = rs.getInt(1);
}

// 计算pageCount
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}

// 分页超链接
%>
<a href="wel.jsp?dy_pageNow=1">首页</a>
<%
if (pageNow > 1) {
%>
<a href="wel.jsp?dy_pageNow=<%=pageNow-1 %>">上一页</a>
<%
}
// 声明一个参数pageMax, 用于只显示到pageCount
int pageMax = ((pageCount-pageNow) <= 5) ? pageCount : (pageNow+4);
for (int i=pageNow; i<=pageMax; i++) {
%>
<a href="wel.jsp?dy_pageNow=<%=i %>">[<%=i %>]</a>
<%
}
if (pageNow < pageCount) {
%>
<a href="wel.jsp?dy_pageNow=<%=pageNow+1 %>">下一页</a>
<%
}
%>
<a href="wel.jsp?dy_pageNow=<%=pageCount %>">尾页</a><br><br>
<form name="form1" action="wel.jsp" method="post">
跳转到
<input type="text" name="dy_pageNow" id="go" style="width: 40px;"/>
页&nbsp;&nbsp;
<input type="submit" onclick="checkGoTo();" value="Go"/>&nbsp;&nbsp;
当前页:&nbsp;<%=pageNow %>&nbsp;&nbsp;,&nbsp;
共&nbsp;<%=pageCount %>&nbsp;页
<input type="hidden" name="pageCount" value="<%=pageCount%>"/>
</form>
<%

} catch(Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</center>
</body>
</html>

测试:

 

posted @ 2017-03-13 19:37  半生戎马,共话桑麻、  阅读(651)  评论(0)    收藏  举报
levels of contents