准备阶段
1、创建web项目
2、在数据库(student)中创建表users
省略,我只设置了三个字段(uid、uname、upwd)
3、创建对应的JavaBean实体类Users
package com.login.bean;
public class Users {
private int uid;
private String uname;
private String upwd;
public Users() {
}
public Users(int uid, String uname, String upwd) {
this.uid = uid;
this.uname = uname;
this.upwd = upwd;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
4、创建前端文件
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生管理系统—登录</title>
<style type="text/css">
form{
width: 300px;
height: 230px;
border: 1px solid gray;
margin: 50px auto ;
text-align: center;
}
</style>
</head>
<body>
<form action="" method="post">
<h2>学生管理系统—登录</h2>
账户:<input type="text" name="uname"/><br/><br/>
密码:<input type="password" name="upwd"/><br/><br/>
<input type="submit" value="login"/><br/>
<a href="register.html">register</a>
</form>
</body>
</html>
register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生管理系统-注册</title>
<style type="text/css">
form{
width: 300px;
height: 230px;
border: 1px solid gray;
margin: 50px auto ;
text-align: center;
}
</style>
</head>
<body>
<form action="" method="post">
<h2>学生管理系统—注册</h2>
账户:<input type="text" name="uname"/><br/><br/>
密码:<input type="password" name="upwd"/><br/><br/>
<input type="submit" value="register"/>
</form>
</body>
</html>
5、使用c3p0和UBTils与mysql交互,导入相应的jar包和配置文件
注意:
1)web项目自动build path…不需要手动构建环境。
2)配置文件和jar存放位置
3)修改配置文件(比如,需修改数据库名)
6、创建servlet
因为form表单提交方式为post,所以只需要在servlet的getPost()中填写以下代码即可👇
代码实现
1、其中涉及的dao层(与mysql数据库交互)
package com.login.dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.login.bean.Users;
import com.mchange.v2.c3p0.ComboPooledDataSource;
//与数据库交互
public class UsersDao {
static ComboPooledDataSource ds = new ComboPooledDataSource();
static QueryRunner qr = new QueryRunner(ds);
//登录时,查询
public static Users getUsers(String uname,String upwd) {
Users users = null;
String sql = "select * from users where uname=? and upwd=?";
try {
users = qr.query(sql, new BeanHandler<Users>(Users.class),uname,upwd);
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
//注册时,添加
public static int insertUsers(String uname,String upwd) {
int rows = 0;
String sql = "INSERT INTO users(uname,upwd) VALUES(?,?)";
try {
rows = qr.update(sql,uname,upwd);
} catch (SQLException e) {
e.printStackTrace();
}
return rows;
}
}
2、完善servlet中的代码。登录注册可以合一,见下文PS
登录
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码问题
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取form表单中对应name属性的value
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
//测试,是否获取到,后面取消即可
System.out.println(uname);
//调用dao层的方法,查询用户
//UsersDao见下面第2点中的的代码
Users users = UsersDao.getUsers(uname,upwd);
if(users !=null) {
//登录成功。重定向,新知识点,记住
response.sendRedirect("index.html");
}else {
//登录失败。重定向
response.sendRedirect("login.html");
}
}
注册
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码问题
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
//UsersDao见下面第2点中的的代码
int rows = UsersDao.insertUsers(uname, upwd);
if(rows != 0) {
//添加成功
response.sendRedirect("login.html");
}else {
//添加失败
response.sendRedirect("register.html");
}
}
3、修改web.xml配置文件。登录注册合一时,下部分的配置文件就可以删除了
注意:添加的内容写在<web-app></web-app>
标签里面
<servlet>
<!-- 名字随便取 -->
<servlet-name>LoginServlet</servlet-name>
<!-- 使用全类名 -->
<servlet-class>com.login.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 与上面取的名字相同,不然找不到 -->
<servlet-name>LoginServlet</servlet-name>
<!-- 斜线必须加,代表根路径,其他随便写,就是访问的路径(与form表单中的action对应) -->
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.login.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
4、补全前端文件中form表单的action属性
action = “login”、action = “register”(与上面url-pattern标签中设置的值一样)
PS:可以在form表单中加<input type="hidden" value="login或者register" name="flage"/>
,servlet中获取这个flage,用于判断当前是登录还是注册。
测试
访问路径
http://localhost:8080/***/login.html
解释
http:// http协议,注意不要写成https,会报错ERR_SSL_PROTOCOL_ERROR
localhost:8080 访问本地服务器,端口号为默认端口号8080.可以写本地ip
*** web项目名
测试原则,想象得到的正确与所有错误的情况都要测试,省略
遇见的bug
👉点击👈https://blog.csdn.net/Today_He/article/details/108985256
👉点击👈https://blog.csdn.net/Today_He/article/details/108973535