首先我们要有一个注册页面(由于省功夫,注册和登录写在了一个页面中,然而这样并没有影响。。。)
<form name="regist" action="/regist" method="post">
用户名:<input type="text" name="username"/>
密码:<input type="text" name="password"/>
<input type="submit" value="注册"/>
</form>
- 这里的action换成了/regist 所以我们要创建另一个servlet–Regist.java
- 接着设置一下请求的编码问题,防止写入到数据库时乱码
req.setCharacterEncoding("utf-8");
创建数据库和注册登录表单
- 创建数据库(编码为utf-8)
->CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 使用数据库
->use test
- 创建表单login
->CREATE TABLE login (
id int(10) NOT NULL AUTO_INCREMENT,
username varchar(10) NOT NULL,
password varchar(10) NOT NULL,
PRIMARY KEY (id)
)
这里数据库的操作告一段落,接下来时java链接数据库
* 看现在的目录结构SqlCon.java是专门用于链接数据库的,在tomcat的lib目录中也加入mysql-connector.jar这个jar包。
package Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* Created by online on 15-9-16.
*/
public class SqlCon {
public static Connection getConne(){
Connection con = null;
String driver = "com.mysql.jdbc.Driver";//连接数据库所需要的驱动
String url = "jdbc:mysql://localhost:3306/test?"+
"user=root&password=p5385676&useUnicode=true&characterEncoding=UTF8";
//连接的url修改成自己的user和password。其余不变
try {
Class.forName(driver);//开始驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url);//获取连接
return con;//返回这个连接供接下来的增删改查使用
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭对数据库的操作
public static void closeAll(ResultSet rs,Statement stmt,Connection con){
try{
if(rs!=null)
rs.close();
if (stmt!=null)
stmt.close();
if (con!=null)
con.close();
} catch (Exception ex) {
System.out.println("Error : " + ex.toString());
}
}
}
- Regist.java
package action;
import Dao.AddandSelect;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
/**
* Created by online on 15-9-16.
*/
@WebServlet(name = "re",urlPatterns = "/regist")
public class Regist extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username=req.getParameter("username");
String password=req.getParameter("password");
req.getSession().setAttribute("username",username);
try {
AddandSelect.regist(username,password);//AddandSelect中的regist方法,把用户名和密码写入数据库。
} catch (SQLException e) {
e.printStackTrace();
}
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
}
- 写入数据库和查询信息AddandSelect.java
package Dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created by online on 15-9-16.
*/
public class AddandSelect {
//注册信息写入数据库
public static void regist(String username,String password) throws SQLException {
Connection con = null;//创建连接数据库的Connection类
PreparedStatement sta = null;//创建一个PreparedStatement类,用于执行sql语句
ResultSet res = null;//如果是查询语句,查询后返回的时ResultSet
try{
con = SqlCon.getConne();
String sql= "insert into login(username,password) values(?,?);";
sta = con.prepareStatement(sql);
sta.setString(1,username);
sta.setString(2,password);
sta.executeUpdate();//执行sql语句,由于是插入语句,所以不需要返回ResultSet。
} catch (SQLException e) {
e.printStackTrace();
}
SqlCon.closeAll(res,sta,con);//关闭连接
}
}
- 运行并输入信息,点击注册,则可以看到数据库中已经添加了该条信息。
数据库的写入已经完成。注册简单完成,接下来时登录。意思就是说,你输入用户名和密码,当你的输入在数据库中有,且用户名和密码匹配,即算登录成功。
- Homework.java
package action;
import Dao.AddandSelect;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
/**
* Created by online on 15-9-11.
*/
@WebServlet(urlPatterns = "/login" ,name = "stuLogin")
public class Homework extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println(req.getParameter("username"));//req.getParameter();这个方法就是获取jsp页面form表单传送过来的数据。
//System.out.println(req.getParameter("password"));//这里运行并在页面输入后提交 则会在控制台看到输入内容。
HttpSession session = req.getSession();//创建session对象
String username= (String) req.getParameter("username");
String password= (String) req.getParameter("password");
session.setAttribute("cu",username);
try {
if (AddandSelect.valiuandp(username,password)){//验证是否匹配到信息匹配到就进入到success.jsp,不匹配就返回登录界面。
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}else {
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- AddandSelect.java 中的验证方法
//验证用户名和密码是否匹配
public static boolean valiuandp(String username,String password) throws SQLException {
Connection con = null;
PreparedStatement sta = null;
ResultSet rs = null;
int i = 0;
try{
con = SqlCon.getConne();
String sql = "select * from login where username=? and password=?;";
sta=con.prepareStatement(sql);
sta.setString(1,username);
sta.setString(2,password);
rs=sta.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}while (rs.next()){
i++;
}
SqlCon.closeAll(rs,sta,con);
if (i>0){
return true;
}
else {
return false;
}
}
注册(写入到数据库),登录(在数据库中提取)
注册的时候还需要有验证是否有人注册,填信息时是否有漏填的。