开发环境:IDEA2019、Tomcat7.0、Mysql5.5.5、Wampserver64
新建文件
打开IDEA新建一个Java Web Application项目,选择tomcat,输入一些必要信息直到finish。
此次开发需要用到两个jar包
JSP标准标签库(JSTL)
mysql-connector-java
选择自己适合的版本下载好之后在IDEA中导入 File -> Project Structure -> Project Settings -> Module -> Dependencies 点击+号添加jar包
2.文件目录介绍
初始目录下只有一个src文件夹(空)和web目录,在src文件夹下新建文件目录如图所示
dao 文件夹下类主要处理与数据库的交互,登录和注册主要用到查询和插入数据库功能;
model 文件夹主要存放实体类信息,我们只需要用到user实体类;
service 文件夹主要存放一些业务类,个人理解为在dao层对数据库进行操作时对数据进行一个预处理;
servlet 文件夹主要作为控制层来处理表单发送的数据,即处理用户的请求信息;
test 文件夹主要用于开发过程中测试功能;
util 文件夹主要存放一些工具类,例如数据库连接、数据处理方法等。
Web 文件下主要存放需要用到的jsp文件以及一些网页的静态资源;
3.连接数据库工具类
在Util 工具类中,本次仅需要用到连接数据库的功能,当然也可以在该工具类中声明一个用于判断数据是否有效的判断类,但时间关系没有用到。
新建一个class类DBUtil,主要用于连接数据库和关闭连接
import java.sql.*;
public class DBUtil {
//建立连接
public static Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = //此处的3306对应安装的mysql的端口号、asd对应选择的数据库名、最后两个参数分别表示mysql用户名和密码
DriverManager.getConnection("jdbc:mysql://localhost:3306/asd?useSSL=false","root","");
return connection;
}
//关闭连接
public static void closeAll(ResultSet rs, Statement stmt, Connection conn) throws SQLException {
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
连接好数据库之后,在Dao目录下新建一个用于访问数据库的UserDao类,实现对数据库的查询和插入操作
import com.shixi.model.User;
import com.shixi.util.DBUtil;
import java.sql.*;
public class UseDao {
//登陆查询数据库
public User selectByName(String name) throws SQLException {
ResultSet rs = null;
Connection conn = null;
PreparedStatement pstmt = null;
DBUtil util = new DBUtil();
User user = new User();
try{
conn = util.getConnection();
pstmt = conn.prepareStatement(“select * from user where name = ?”);
pstmt.setString(1,name);
rs = pstmt.executeQuery();
while(rs.next()){
user.setId(rs.getInt(1)); //第几个字段
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getString(4));
}
}catch(Exception e){
e.printStackTrace();
}finally {
util.closeAll(rs,pstmt,conn);
}
return user;
}
//注册插入数据库
public boolean insertUserInfo(String name, String password) throws SQLException, ClassNotFoundException {
ResultSet rs = null;
Connection conn = null;
PreparedStatement pstmt = null;
DBUtil util = new DBUtil();
boolean flag = true;
try {
conn = util.getConnection();
pstmt = conn.prepareStatement(“insert into user values(null,?,?,null)”);
pstmt.setString(1, name);
pstmt.setString(2, password);
pstmt.execute();
}catch(Exception e){
e.printStackTrace();
}finally {
util.closeAll(rs,pstmt,conn);
}
return flag;
}
}
4实体类和业务类
在model目录下新建一个实体类User,声明User中的各个属性
public class User {
private int id;
private String name;
private String password;
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", age='" + age + '\'' +
'}';
}
}
在Service目录下新建一个处理User的业务类UserService,联合dao一同使用对数据处理。
import com.shixi.dao.UseDao;
import com.shixi.model.User;
import java.sql.SQLException;
public class UserService {
static UseDao useDao = new UseDao();
public static User selectByName(String name) throws SQLException {
return useDao.selectByName(name);
}
public static boolean insertUserInfo(String name, String password) throws SQLException, ClassNotFoundException {
return useDao.insertUserInfo(name,password);
}
}
Servlet类
Servlet在web.xml文件中进行配置,作为控制层对从jsp发送的表单数据进行处理,包含了doPost方法和doGet方法,LoginServlet和RegisterServlet分别处理登陆和注册
LoginServlet
import com.shixi.model.User;
import com.shixi.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class LoginServlet extends HttpServlet {
UserService userService = new UserService();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("password");
User user = null;
try {
user = userService.selectByName(name);
} catch (SQLException e) {
e.printStackTrace();
}
if(password.equals(user.getPassword())){
resp.getWriter().write("success");
}else{
resp.getWriter().write("failed");
}
}
}
RegisterServlet:
import com.shixi.model.User;
import com.shixi.service.UserService;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
public class RegisterServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
String name = req.getParameter("name");
String password = req.getParameter("password");
System.out.println(name+" "+password);
boolean flag = false;
try {
flag = UserService.insertUserInfo(name,password);
System.out.println(flag);
if(flag){
req.setAttribute("success","注册成功,请登录");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}else{
req.setAttribute("error","注册失败,请重试");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
6jsp和web.xml配置
一共用到两个jsp页面,分别是login.jsp和register.jsp(这里当初直接使用了index.jsp作为登陆界面,没有重写一个login)里面就一些基础的html布局,做的很简单。
login.jsp
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
登陆界面
<div>
<%--@declare id="user"--%><label for="user">帐号: <input name="name" type="text"></label>
</div>
<div>
<%--@declare id="password"--%><label for="password">密码: <input name="password" type="password"></label>
</div>
<div>
<input type="submit" value="登陆">
<input type="button" value="注册"onclick="javascript:window.location.href='register.jsp'">
</div>
</form>
</div>
register.jsp
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>