idea使用JDBC创建一个简单的WEB登录页面

学习目标:

在学习了servlet和http之间的交互,也迎来了第一个小项目,在此之前也学习了MySQL-JDBC,于是尝试做一个简单的登录页面

例如:

  • 主要温习了SQL语句以及HTTP交互协议

代码撰写流程:

登录小项目流程
1、使用原生的方式生成页面

2、客户端先发送请求,得到要登录的页面

3、用户填写相应的用户数据,发送请求给服务端

4、服务端接受到请求后进行逻辑处理

5、服务端将处理之后的结果返回给客户端

1.首先要常见一个loginservlet的一个Java类:客户端先发送请求

package com.mashibing.control;

import com.mashibing.entity.User;
import com.mashibing.service.UserService;
import com.mashibing.service.impl.UserServiceImpl;

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 UserServiceImpl();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
          this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
          String name=request.getParameter("name");
          String pwd=request.getParameter("pwd");
          User user=new User(name,pwd);
          User u= null;
        try {
            u = userService.checkUser(user);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(u);
        if(u!=null){
            response.getWriter().write("success");
        }else {
            response.getWriter().write("failure");
        }

    }
}

2.得到登录页面

package com.mashibing.control;

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.io.PrintWriter;

public class PageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doGet(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("接受到客户端的请求,返回响应登陆页面");
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        out.write("<html>");
        out.write("<head>");
        out.write("</head>");
        out.write("<body>");
        out.write("<form action='login' method='get'>");
        out.write("name:<input type='text' name='name' value=''/><br/>");
        out.write("pwd:<input type='text' name='pwd' value=''/><br/>");
        out.write(" <input type='submit' value='loading'>");
        out.write("</from>");
        out.write("</body>");
        out.write("</html>");
    }
}

3.用户填写相应的用户数据,发送请求给服务端

package com.mashibing.entity;

public class User {
    private int id;
    private String name;
    private String pwd;

    public User( String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }public User(int id, String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    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 getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}
package com.mashibing.dao.impl;

import com.mashibing.dao.UserDao;
import com.mashibing.entity.User;

import java.sql.*;

public class UserDaoImpl implements UserDao {
    @Override
    public User checkUser(User user)  {
        Connection connection=null;
        Statement statement=null;
        PreparedStatement pst=null;
        ResultSet resultSet=null;
        User u=null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            //因为JDBC中是MYSQL专门提供的jar包,所以url都是一致的,后面的user和password是根据数据库那边自己设置的
            connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/login","root","20010612Syf@");
            statement=connection.createStatement();
            //这是一条查询的SQL语句
            pst = connection.prepareStatement("select * from user where name = ?and pwd =?");
            pst. setString(1,user.getName());
            pst.setString(2, user.getPwd());
            resultSet = pst.executeQuery();
           /* String sql="select * from user where username=?";
            pst=con.prepareStatement(sql);*/

          //  resultSet=statement.executeQuery("select name,pwd from user");

          // pst = con.prepareStatement;
            //调用next()方法可以将游标移动到下一行,如果下一代没有数据,则返回false
            while(resultSet.next()){
                //注意这里打印输出的数据类型需要和数据库表中的数据一致,不然也会报错
                u=new User(resultSet.getInt("id"),resultSet.getString("name"),resultSet.getString("pwd"));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{//调用finally方法,强制执行下面三个方法,关闭数据流,节约内存
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
      /*  Connection con=null;
        PreparedStatement pst=null;
        ResultSet rs=null;
        User u=null;

        try{
        Class.forName("com.mysql.cj.jdbc.Driver");

        con= DriverManager.getConnection("jdbc:mysql://localhost:3306/login","root", "20010612@Syf");

        pst = con.prepareStatement("select * from user where name = ?and pwd =?");
        pst. setString(1,user.getName());
        pst.setString(2, user.getPwd());
        rs = pst.executeQuery();
        while (rs.next()){
            u=new User(rs.getInt("id"),rs.getString("name"),rs.getString("pwd"));
        }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
     return u;
    }
}
package com.mashibing.dao;

import com.mashibing.entity.User;

import java.sql.SQLException;

public interface UserDao {
    User checkUser(User user) throws ClassNotFoundException, SQLException;
}
package com.mashibing.service.impl;


import com.mashibing.dao.UserDao;
import com.mashibing.dao.impl.UserDaoImpl;
import com.mashibing.entity.User;
import com.mashibing.service.UserService;

import java.sql.SQLException;

public class UserServiceImpl implements UserService {
     UserDao userDao=new UserDaoImpl();

     /* @Override
      public User checkUser(User user)  {
          return userDao.checkUser(user);
      }*/

    @Override
    public User checkUser(User user) throws SQLException, ClassNotFoundException {
        return userDao.checkUser(user);
    }
}

package com.mashibing.service;

import com.mashibing.entity.User;

import java.sql.SQLException;

public interface UserService {
    User checkUser(User user) throws SQLException, ClassNotFoundException;
}

中间出现的坎坷可谓是一波三折

肠子都哭青了的事情

servlet.jar不小心加错了,应该在Libraries里面添加的,但是由于惯性居然在Modules加了,导致servlet.jar一直加载失败

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--用来获取登陆页面的请求-->
    <servlet>
        <servlet-name>PageServlet</servlet-name>
        <servlet-class>com.mashibing.control.PageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>PageServlet</servlet-name>
    <url-pattern>/page</url-pattern>
</servlet-mapping>

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.mashibing.control.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

</web-app>

 最最让人难受的事情还得是SQL语句写错,做了各种各样的尝试,更换版本、修改了MYSQL配置,一度以为是密码的错误,甚至修改了my.ini配置文件。

感想:纪念一下第一个小项目,用别人做过的项目就连环境配置都要一模一样啊

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值