servlet实现登录,前端和数据库交互小项目

代码目录

com.DAO包

com.pojo包

com.service包

com.Servlet包

com.utils包

web.xml

login.html

本次小项目感想及错误提示

首先,项目目录结构和描述如下:

1.准备:

在使用Servlet之前,请确保导入了mysql的jar包和servlet的jar包,并放在wepcontent的lib下面

已经在tomcat里面布置好服务器配置了。如果没有配置请参考nanfengnan的上一篇博客:https://www.cnblogs.com/nanfengnan/p/13825922.html

如果没有servlet选项请看:https://www.cnblogs.com/nanfengnan/p/13825924.html

 2.项目概述,为什莫写这末多包主要是为了实现隔离和好管理  当然还有设计模式的事情(当然小编此时才大三 哈哈,刚回一点一点设计模式就不献丑了)

com.DAO包:是实现数据库操作的包,(里面写入从数据库里面读数据的方法)直接和数据库交互的包

com.pojo包:因为要和数据库交互,要有数据库实例,里面是数据库的属性

com.service包:是实现接受前端传来的字段,并构造要查询sql语句和调用com.DAO包里面的方法,实现和数据库交互的中间层。

com.Servlet包:是servlet,里面是用来接受html传来的表单的操作,并返回在页面上提示信息,准则让每个servlet实现一个相应的操作(实际开发中),如登录用一个servlet线程,注册用一个servlet线程。

com.utils包:用来存工具的包,如取得数据库链接对象的类

 login.html:登陆主页

注意servlet1,servlet没有用,那是我的练习

相应包里面的类和代码

 

 

3.废话不多说,直接上代码

3.1com.DAO包

//这是com.DAO包里面的类

package com.DAO;

//数据库的操作  要把数据库的操作和具体前端操作都分隔开
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import com.pojo.User;
import com.utils.*;

public class UserDAO {
    public ArrayList findUserBySql(String sql) {
        //存用户的列表
        ArrayList<User> userList=new ArrayList<User>();
        
        //数据库操作
        GetConnection getConnection = new GetConnection();
        Connection conn=getConnection.getConn();
        try {
            Statement state=conn.createStatement();
            ResultSet result=state.executeQuery(sql);
            System.out.println("数据查询中......");
            System.out.println("sql语句为:"+sql);
            while(result.next()) {
                User u =new User();
                u.setId(result.getInt("id"));
                u.setUsername(result.getString("username"));
                u.setPassword(result.getString("password"));
                userList.add(u);
            }
            state.close();
            conn.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return userList;
    }
}

3.2com.pojo包

package com.pojo;
//实体类 数据库的实体对象类
public class User {
    private int id;
    private String username;
    private String password;
    public int getId()
    {
        return id;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public void setId(int id) {
        this.id=id;
    }
    public void setUsername(String username) {
        this.username=username;
    }
    public void setPassword(String password) {
        this.password=password;
    }
    
}

 3.3

package com.service;

import java.io.PrintWriter;
import java.util.ArrayList;
import com.DAO.UserDAO;
import com.pojo.User;
//具体业务方法  登录从后台取出用户名和密码 组成一个用户送到前端

public class userService {
    // 因为要调用userDAO里面的方法,所以先建立一个对象
    UserDAO ud = new UserDAO();

    public User login(String name, String pwd) {
        // 前端表单输入用户名和密码,让后调用方法判断数据库里面有没有这一个记录,有的话传回前端
        // 没有的话,登陆失败

        User u = null;
        // 构造要查询的sql语句
        String sql = "select * from user where username='"+name+"' and password='"+pwd+"' ";
        ArrayList<User> userList = ud.findUserBySql(sql);
        if (userList.size() > 0) {
            // 用户数量大于零,说明里面有用户,登陆成功,返回给前台用户对象
            u = userList.get(0);
            System.out.println("找到了");
        }
        // 否则没找到用户对象返回空null
        
        System.out.println("查询服务结束");
        return u;
    }
}

3.4com.service包

package com.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.pojo.User;
import com.service.userService;

public class servlet2 extends HttpServlet {
    //实际开发中每个servlet对应一个功能,登录用登录的servlet,注册用注册的servlet
    userService us=new userService();
    //获取表单数据 模拟登录 login.html
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数
        request.setCharacterEncoding("GBK");//设置请求编码格式
        response.setCharacterEncoding("GBK");//设置响应的编码格式
        String name=request.getParameter("uname");//得到请求参数name(地址栏输入的)
        String passwd=request.getParameter("upwd");
        PrintWriter pw = response.getWriter();
        if(name!=null && passwd!=null) //防止空指针异常
        {
            User u=us.login(name, passwd);
            if (u!=null) {
                pw.print("恭喜你!"+u.getUsername()+"登陆成功");
            }
            else {
                pw.println("用户名或密码错误,请重新输入");
            }
        }
        else {
            pw.println("输入的用户名或密码为空!");
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }

}

3.5com.utils包

package com.utils;

import java.sql.*;
//工具包
//返回数据库连接对象
public class GetConnection {
    private Connection conn=null;
    private static String url="jdbc:mysql://localhost:3306/java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
    private static String name="root";
    private static String passwd="20003234fenglei";
    
    public Connection getConn()
    {
        if(conn==null) {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn = DriverManager.getConnection(url,name,passwd);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("连接失败!");
            }
        }
        return conn;
    }
}

3.6 webcontent下面的web-xml配置成如下,如果没有的话,百度一下很简单的

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>web3</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 
  <servlet>
       <servlet-name>servlet2</servlet-name>
       <servlet-class>com.Servlet.servlet2</servlet-class>
  </servlet>
 
  <servlet-mapping>
       <servlet-name>servlet2</servlet-name>
       <url-pattern>/servlet2</url-pattern>
  </servlet-mapping>
    
 
</web-app>

3.7login.html 登录主页  这个html代码大家可以自己添加操作,在后台补上相应操作即可

<!DOCTYPE html>
<html>
<head>
<meta charset="GBK">
<title>用户登录</title>
</head>
<body>
    <form action="http://127.0.0.1:8080/web3/servlet2" method="post">
        用户名:<input type="text" name="uname"><br>
        密码:<input type="password" name="upwd">
        <input type="submit">
    </form>
</body>
</html>

 

总结:可去我的博客里面找到在java-web下面有解决办法

常用报错:

1.com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 错误

2.此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。 这个问题是因为最开始我把连接的方法和变量定义成静态static的了,只能访问一次,下一次访问就找不到线程了。

 

posted @ 2020-10-16 21:41  nanfengnan  阅读(704)  评论(0编辑  收藏  举报