JSP实例
需求
实现用户登录与退出登录功能,要求一个用户只能在一处登录。 完成对用户表的 CRUD 操作。
使用技术: JSP、Servlet、Filter、Listener、JDBC、MySQL
实现项目
创建数据库
CREATE TABLE `user3` ( `userid` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) DEFAULT NULL, `userpwd` varchar(30) DEFAULT NULL, `usersex` varchar(2) DEFAULT NULL, `phonenumber` varchar(30) DEFAULT NULL, `qqnumber` varchar(20) DEFAULT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
搭建项目
创建项目
添加jar包
添加的jar包:
添加 jstl 标签库的约束文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
创建包
创建 POJO用户类
package com.bjsxt.pojo;
public class Users{
private int userid;
private String username;
private String userpwd;
private String usersex;
private String phonenumber;
private String qqnumber;
public Users(int userid, String username, String userpwd, String usersex, String phonenumber, String qqnumber) {
this.userid = userid;
this.username = username;
this.userpwd = userpwd;
this.usersex = usersex;
this.phonenumber = phonenumber;
this.qqnumber = qqnumber;
}
public Users(){
super();
}
@Override
public String toString() {
return "Users{" +
"userid=" + userid +
", username='" + username + '\'' +
", userpwd='" + userpwd + '\'' +
", usersex='" + usersex + '\'' +
", phonenumber='" + phonenumber + '\'' +
", qqnumber='" + qqnumber + '\'' +
'}';
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
public String getUsersex() {
return usersex;
}
public void setUsersex(String usersex) {
this.usersex = usersex;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getQqnumber() {
return qqnumber;
}
public void setQqnumber(String qqnumber) {
this.qqnumber = qqnumber;
}
}
创建 JDBC 工具类
db.properties:
这个db文件,要放到src的目录下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3307/test?useUnicode=true&charac terEncoding=utf8
jdbc.username=root
jdbc.password=1234567
创建JdbcUtils工具类
放到commons文件夹内:
package com.bjsxt.commons;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
public class JdbcUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
static {
try{
ResourceBundle bundle = ResourceBundle.getBundle("db");
driver = bundle.getString("jdbc.driver");
url = bundle.getString("jdbc.url");
username = bundle.getString("jdbc.username");
password = bundle.getString("jdbc.password");
Class.forName(driver);
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接方法
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭连接
public static void closeConnection(Connection conn){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意:
在实践的过程内,出现了报错:at java.lang.Class.forName()
本次问题是因为mysql的jar包出现了问题
解决方法:
点击跳转链接
实现业务
用户登录
导入登录页面的js,css以及图片文件夹
创建登录页面
创建名为login.jsp的登录页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>欢迎登录后台管理系统</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" src="js/jquery.js"></script>
<script src="js/cloud.js" type="text/javascript"></script>
<script language="javascript">
$(function(){
$('.loginbox').css({
'position':'absolute','left':($(window).width()-692)/2});
$(window).resize(function(){
$('.loginbox').css({
'position':'absolute','left':($(window).width()-692)/2});
})
});
</script>
</head>
<body style="background-color:#1c77ac; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">
<div id="mainBody">
<div id="cloud1" class="cloud"></div>
<div id="cloud2" class="cloud"></div>
</div>
<div class="logintop">
<ul>
<li><a href="#">回首页</a></li>
<li><a href="#">帮助</a></li>
<li><a href="#">关于</a></li>
</ul>
</div>
<div class="loginbody">
<div class="loginbox loginbox2">
<form action="login.do" method="post">
<ul>
<li><input name="username" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></li>
<li><input name="userpwd" type="text" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
<li class="yzm">
<span><input name="" type="text" value="验证码" onclick="JavaScript:this.value=''"/></span><cite>X3D5S</cite>
</li>
<li><input name="" type="submit" class="loginbtn" value="登录" onclick="javascript:window.location='main.html'" /></li>
</ul>
</form>
</div>
</div>
</body>
</html>
创建登录业的务持久层
在dao包内创建一个接口UserLoginDao
package com.bjsxt.dao;
import com.bjsxt.pojo.Users;
public interface UserLoginDao {
public Users selectUsersByUserNameAndUserPwd(String username, String userpwd);
}
在dao包下的impl文件夹下,创建一个实现接口UserLoginDao的实现类 – UserLoginDaoImpl类
package com.bjsxt.dao.impl;
import com.bjsxt.commons.JdbcUtils;
import com.bjsxt.dao.UserLoginDao;
import com.bjsxt.pojo.Users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 对于用户登录的数据库查询
*/
public class UserLoginDaoImpl implements UserLoginDao {
@Override
public Users selectUsersByUserNameAndUserPwd(String username, String userpwd) {
Users user = null;
Connection conn = null;
try {
conn = JdbcUtils.getConnection();
PreparedStatement ps = conn.prepareStatement("select * from user3 where username = ? and userpwd = ?");
ps.setString(1,username);
ps.setString(2,userpwd);
ResultSet resultSet = ps.executeQuery();
while (resultSet.next()){
user = new Users();
user.setUsersex(resultSet.getString("usersex"));
user.setUserpwd(resultSet.getString("userpwd"));
user.setUsername(resultSet.getString("username"));
user.setUserid(resultSet.getInt("userid"));
user.setPhonenumber(resultSet.getString("phonenumber"));
user.setQqnumber(resultSet.getString("qqnumber"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
}
return user;
}
}
创建登录页的业务层
创建自定义异常的类,用于对于出现的异常进行自定义处理
package com.bjsxt.service;
/**
* 异常包,用于自定义异常
*/
public class UserNotFoundException extends RuntimeException{
public UserNotFoundException() {
}
public UserNotFoundException(String message) {
super(message);
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
创建一个接口:
package com.bjsxt.service;
import com