学习记录05 --- 自学servlet写一个简单的增删改查的后端

之前学会了java如何连接数据库,一直很想学学servlet

今天就来满足下自己,写个完整的增删改查

首先新建一个javaee的项目,但idea不同,需要在WEB-INF中新建2个文件夹

classes用来存放编译后的class文件,lib用来导入jar包

首先将mysql的架包给复制到lib,并且导入,这些简单操作就不写出来了

那么之前的jdbc写的类可以拿过来用了

 1 package org.lanqiao.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.Statement;
 7 
 8 
 9 public class Jdbc {
10     static String url = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
11     static String user = "root";
12     static String pwd = "123456";
13 
14     //定义成全局变量方便关闭
15     static Connection conn;
16     static Statement stt;
17 
18     //连接数据库
19     public static void connetcDatabase() throws Exception {
20         //导入驱动类
21         Class.forName("com.mysql.jdbc.Driver");
22         //创建连接对象
23         conn = DriverManager.getConnection(url,user,pwd);
24 
25     }
26 
27     //数据库查询操作
28     public static ResultSet executeQueryDatabase(String sql) throws Exception {
29         //调用连接数据库方法连接数据库
30         connetcDatabase();
31         //创建命令行
32         stt = conn.createStatement();
33         //执行sql语句
34         ResultSet result = stt.executeQuery(sql);
35         //返回操作结果
36         return result;
37     }
38 
39     //数据库增删改操作
40     public static int executeUpdateDatabase(String sql) throws Exception {
41         //调用连接数据库方法连接数据库
42         connetcDatabase();
43         //创建命令行
44         stt = conn.createStatement();
45         //执行sql语句
46         int line = stt.executeUpdate(sql);
47         //返回影响行数
48         return line;
49     }
50 
51     //关闭数据库连接
52     public static void closeDatabase() throws Exception {
53         //关闭数据库连接
54         conn.close();
55         stt.close();
56     }
57 
58 }

那么,数据库连接就完成了,先不急着弄servlet和dao,先把javabean给弄好

先理清下数据库中表的字段有多少个

id、name、pwd、age、address、sex、classid

总共7个,那么创建的javabead也要对应这7个

package org.lanqiao.bean;

public class Student {
    private int id;
    private String name;
    private String pwd;
    private int age;
    private String address;
    private String sex;
    private int classid;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", sex='" + sex + '\'' +
                ", classid=" + classid +
                '}';
    }

    public Student() {}

    public Student(int id, String name, String pwd, int age, String address, String sex, int classid) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
        this.age = age;
        this.address = address;
        this.sex = sex;
        this.classid = classid;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setClassid(int classid) {
        this.classid = classid;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPwd() {
        return pwd;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    public String getSex() {
        return sex;
    }

    public int getClassid() {
        return classid;
    }
}

那么javabean写好了,我们先来把dao里面对数据库的操作都写好,然后再创建servlet

写增删改查之前先不急,我们用静态导包的方式,把JDBC类给导过来,方便使用

同时,还得把javabean给导进来

import static org.lanqiao.jdbc.Jdbc.*;
import org.lanqiao.bean.Student;

这样,我们直接调用方法即可使用了

先来写查询,但写查询之前,先写一个获取所有学生信息并且封装成一个集合的方法

 1 //获取所有学生的信息,并返回一个集合
 2     public List<Student> getStudentAllInfo() throws Exception {
 3         //新建一个集合,用来存放所有学生的信息
 4         List<Student> list = new ArrayList<Student>();
 5         //SQL语句
 6         String sql = "select * from student";
 7         //调用数据库查询方法,并返回结果
 8         ResultSet result = executeQueryDatabase(sql);
 9         //开始遍历结果
10         while(result.next()) {
11             //临时建立一个Student的对象进行存放数据
12             Student info = new Student();
13             //把数据库的数据存取到本地
14             info.setId(result.getInt("id"));
15             info.setName(result.getString("name"));
16             info.setPwd(result.getString("pwd"));
17             info.setAge(result.getInt("age"));
18             info.setAddress(result.getString("address"));
19             info.setSex(result.getString("sex"));
20             info.setClassid(result.getInt("classid"));
21             //把临时数据添加到集合里
22             list.add(info);
23         }
24         //调用方法关闭数据库连接
25         closeDatabase();
26         //返回存取了所有学生信息的集合
27         return list;
28     }

 接下来我们再来写查询的方法,需要的是把数据封装成json格式

这里需要一个一个叫做Gson的架包,这里提供下下载地址

http://repo1.maven.org/maven2/com/google/code/gson/gson/

可能国内的网络访问这个会很慢,需要魔法上网

那么,借助Gson,我们很容易就能把一个集合对象转换成json了

 1 //查询出学生信息,封装成json格式并返回
 2     public String selectStudentInfo() throws Exception {
 3         //存放错误代码,0表示成功,1表示失败
 4         int error_code;
 5         //调用方法获取所有学生信息
 6         List<Student> list = getStudentAllInfo();
 7         //判断集合对象是否又数据
 8         if(list.size()>0)
 9             error_code = 0;
10         else
11             error_code = 1;
12         //创建Gson对象
13         Gson gson = new Gson();
14         //创建一个字符串变量存放json格式数据
15         String json = "{\"error_code\":\""+error_code+"\",\"data\":["+gson.toJson(list)+"]}";
16         //返回给servlet处理
17         return json;
18     }

到这里查询也基本上完成了,接下来写添加操作

添加操作要比查询操作简单的多了,只需要注意sql语句不要出问题

 1 //添加学生信息
 2     public String insertStudentInfo(Student info) throws Exception {
 3         //存放错误代码,0表示成功,1表示失败
 4         int error_code;
 5         //SQL语句
 6         String sql = "insert into student(name,pwd,age,address,sex,calssid) values('"+info.getName()+"','"+info.getPwd()+"',"+info.getAge()+",'"+info.getAddress()+"','"+info.getSex()+"',"+info.getClassid()+")";
 7         //调用数据库增删改方法,并返回受影响行数
 8         int line = executeUpdateDatabase(sql);
 9         //调用方法关闭数据库连接
10         closeDatabase();
11         //判断是否成功
12         if(line>0)
13             error_code = 0;
14         else
15             error_code = 1;
16         //存放json格式的错误代码
17         String json = "{\"error_code\":\""+error_code+"\"}";
18         //返回错误代码
19         return json;
20     }

剩下的修改和删除跟添加相比没太大的区别,只是删除传过来的参数只需要id就可以了,最大的区别就是sql语句不一样了

 1 //删除学生信息
 2     public String deleteStudentInfo(int id) throws Exception {
 3         //存放错误代码,0表示成功,1表示失败
 4         int error_code;
 5         //SQL语句
 6         String sql = "delete from student where id="+id;
 7         //调用数据库增删改方法,并返回受影响行数
 8         int line = executeUpdateDatabase(sql);
 9         //调用方法关闭数据库连接
10         closeDatabase();
11         //判断是否成功
12         if(line>0)
13             error_code = 0;
14         else
15             error_code = 1;
16         //存放json格式的错误代码
17         String json = "{\"error_code\":\""+error_code+"\"}";
18         //返回错误代码
19         return json;
20     }
21 
22     //修改学生信息
23     public String updateStudentInfo(Student info) throws Exception {
24         //存放错误代码,0表示成功,1表示失败
25         int error_code;
26         //SQL语句
27         String sql = "update student set name='"+info.getName()+"',pwd='"+info.getPwd()+"',age="+info.getAge()+",address='"+info.getAddress()+"',sex='"+info.getSex()+"',classid="+info.getClassid()+" where id="+info.getId();
28         //调用数据库增删改方法,并返回受影响行数
29         int line = executeUpdateDatabase(sql);
30         //调用方法关闭数据库连接
31         closeDatabase();
32         //判断是否成功
33         if(line>0)
34             error_code = 0;
35         else
36             error_code = 1;
37         //存放json格式的错误代码
38         String json = "{\"error_code\":\""+error_code+"\"}";
39         //返回错误代码
40         return json;
41     }

那么到这里,所有的dao里面的最基本的增删改查操作到这里写完了,附上dao里面的所有代码

  1 package org.lanqiao.dao;
  2 
  3 import static org.lanqiao.jdbc.Jdbc.*;
  4 
  5 import com.google.gson.Gson;
  6 import org.lanqiao.bean.Student;
  7 
  8 import java.sql.ResultSet;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 
 12 public class Dao {
 13 
 14     //获取所有学生的信息,并返回一个集合
 15     public List<Student> getStudentAllInfo() throws Exception {
 16         //新建一个集合,用来存放所有学生的信息
 17         List<Student> list = new ArrayList<Student>();
 18         //SQL语句
 19         String sql = "select * from student";
 20         //调用数据库查询方法,并返回结果
 21         ResultSet result = executeQueryDatabase(sql);
 22         //开始遍历结果
 23         while(result.next()) {
 24             //临时建立一个Student的对象进行存放数据
 25             Student info = new Student();
 26             //把数据库的数据存取到本地
 27             info.setId(result.getInt("id"));
 28             info.setName(result.getString("name"));
 29             info.setPwd(result.getString("pwd"));
 30             info.setAge(result.getInt("age"));
 31             info.setAddress(result.getString("address"));
 32             info.setSex(result.getString("sex"));
 33             info.setClassid(result.getInt("classid"));
 34             //把临时数据添加到集合里
 35             list.add(info);
 36         }
 37         //调用方法关闭数据库连接
 38         closeDatabase();
 39         //返回存取了所有学生信息的集合
 40         return list;
 41     }
 42 
 43     //查询出学生信息,封装成json格式并返回
 44     public String selectStudentInfo() throws Exception {
 45         //存放错误代码,0表示成功,1表示失败
 46         int error_code;
 47         //调用方法获取所有学生信息
 48         List<Student> list = getStudentAllInfo();
 49         //判断集合对象是否又数据
 50         if(list.size()>0)
 51             error_code = 0;
 52         else
 53             error_code = 1;
 54         //创建Gson对象
 55         Gson gson = new Gson();
 56         //创建一个字符串变量存放json格式数据
 57         String json = "{\"error_code\":\""+error_code+"\",\"data\":["+gson.toJson(list)+"]}";
 58         //返回给servlet处理
 59         return json;
 60     }
 61 
 62     //添加学生信息
 63     public String insertStudentInfo(Student info) throws Exception {
 64         //存放错误代码,0表示成功,1表示失败
 65         int error_code;
 66         //SQL语句
 67         String sql = "insert into student(name,pwd,age,address,sex,calssid) values('"+info.getName()+"','"+info.getPwd()+"',"+info.getAge()+",'"+info.getAddress()+"','"+info.getSex()+"',"+info.getClassid()+")";
 68         //调用数据库增删改方法,并返回受影响行数
 69         int line = executeUpdateDatabase(sql);
 70         //调用方法关闭数据库连接
 71         closeDatabase();
 72         //判断是否成功
 73         if(line>0)
 74             error_code = 0;
 75         else
 76             error_code = 1;
 77         //存放json格式的错误代码
 78         String json = "{\"error_code\":\""+error_code+"\"}";
 79         //返回错误代码
 80         return json;
 81     }
 82 
 83     //删除学生信息
 84     public String deleteStudentInfo(int id) throws Exception {
 85         //存放错误代码,0表示成功,1表示失败
 86         int error_code;
 87         //SQL语句
 88         String sql = "delete from student where id="+id;
 89         //调用数据库增删改方法,并返回受影响行数
 90         int line = executeUpdateDatabase(sql);
 91         //调用方法关闭数据库连接
 92         closeDatabase();
 93         //判断是否成功
 94         if(line>0)
 95             error_code = 0;
 96         else
 97             error_code = 1;
 98         //存放json格式的错误代码
 99         String json = "{\"error_code\":\""+error_code+"\"}";
100         //返回错误代码
101         return json;
102     }
103 
104     //修改学生信息
105     public String updateStudentInfo(Student info) throws Exception {
106         //存放错误代码,0表示成功,1表示失败
107         int error_code;
108         //SQL语句
109         String sql = "update student set name='"+info.getName()+"',pwd='"+info.getPwd()+"',age="+info.getAge()+",address='"+info.getAddress()+"',sex='"+info.getSex()+"',classid="+info.getClassid()+" where id="+info.getId();
110         //调用数据库增删改方法,并返回受影响行数
111         int line = executeUpdateDatabase(sql);
112         //调用方法关闭数据库连接
113         closeDatabase();
114         //判断是否成功
115         if(line>0)
116             error_code = 0;
117         else
118             error_code = 1;
119         //存放json格式的错误代码
120         String json = "{\"error_code\":\""+error_code+"\"}";
121         //返回错误代码
122         return json;
123     }
124 }

接下来写servlet,先写查询的servlet

为了方便,直接再get方法里面调用post方法,这样可以同时支持get和post两种方式

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //直接调用post方法,这样可以支持get和post两种
        doPost(request,response);
    }

然后不管怎么样,先设置好编码格式

//设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

这样就防止出现乱码的问题了,接着我们把查询的servlet给完成

 1 package org.lanqiao.servlet;
 2 
 3 import org.lanqiao.dao.Dao;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import java.io.IOException;
11 import java.io.PrintWriter;
12 
13 @WebServlet(name = "getStudentInfoAll")
14 public class getStudentInfoAll extends HttpServlet {
15     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         //设置编码格式
17         request.setCharacterEncoding("utf-8");
18         response.setCharacterEncoding("utf-8");
19         //创建一个dao的对象
20         Dao dao = new Dao();
21         //创建一个字符串变量进行接受json数据
22         String json = null;
23         try {
24             //接收处理过的json格式
25             json = dao.selectStudentInfo();
26         } catch (Exception e) {
27             e.printStackTrace();
28         }
29         //创建一个PrintWriter对象,向页面写内容
30         PrintWriter out=response.getWriter();
31         //把json写到页面上
32         out.println(json);
33     }
34 
35     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
36         //直接调用post方法,这样可以支持get和post两种
37         doPost(request,response);
38     }
39 }

接下来写添加的servlet,前面还是一样的操作,设置编码啥的,这些不管写啥都是要先写上去,确保没问题

 1 package org.lanqiao.servlet;
 2 
 3 import org.lanqiao.bean.Student;
 4 import org.lanqiao.dao.Dao;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.io.IOException;
12 import java.io.PrintWriter;
13 
14 @WebServlet(name = "insertStudentInfo")
15 public class insertStudentInfo extends HttpServlet {
16     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
17         //设置编码格式
18         request.setCharacterEncoding("utf-8");
19         response.setCharacterEncoding("utf-8");
20         //获取前端传过来的参数
21         String name = request.getParameter("name");
22         String pwd = request.getParameter("pwd");
23         int age = Integer.parseInt(request.getParameter("age"));
24         String address = request.getParameter("address");
25         String sex = request.getParameter("sex");
26         int classid = Integer.parseInt(request.getParameter("classid"));
27         //创建一个Student对象存放数据
28         Student info = new Student(0,name,pwd,age,address,sex,classid);
29         //创建一个dao对象
30         Dao dao = new Dao();
31         //新建一个字符串变量准备接受json
32         String json = null;
33         try {
34             //调用方法插入学生信息,并接受错误代码
35             json = dao.insertStudentInfo(info);
36         } catch (Exception e) {
37             e.printStackTrace();
38         }
39         //创建一个PrintWriter对象,向页面写内容
40         PrintWriter out=response.getWriter();
41         //把json写到页面上
42         out.println(json);
43     }
44 
45     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
46         //直接调用post方法,这样可以支持get和post两种
47         doPost(request,response);
48     }
49 }

删除的servlet

 1 package org.lanqiao.servlet;
 2 
 3 import org.lanqiao.dao.Dao;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import java.io.IOException;
11 import java.io.PrintWriter;
12 
13 @WebServlet(name = "deleteStudentInfoById")
14 public class deleteStudentInfoById extends HttpServlet {
15     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         //设置编码格式
17         request.setCharacterEncoding("utf-8");
18         response.setCharacterEncoding("utf-8");
19         //获取到要删除的学生信息的id
20         int id = Integer.parseInt(request.getParameter("id"));
21         //创建一个dao的对象
22         Dao dao = new Dao();
23         //创建一个字符串变量进行接受json数据
24         String json = null;
25         try {
26             //调用方法删除学生信息,并返回错误代码
27             json = dao.deleteStudentInfo(id);
28         } catch (Exception e) {
29             e.printStackTrace();
30         }
31         //创建一个PrintWriter对象,向页面写内容
32         PrintWriter out=response.getWriter();
33         //把json写到页面上
34         out.println(json);
35     }
36 
37     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
38         //直接调用post方法,这样可以支持get和post两种
39         doPost(request,response);
40     }
41 }

修改的servlet

 1 package org.lanqiao.servlet;
 2 
 3 import org.lanqiao.bean.Student;
 4 import org.lanqiao.dao.Dao;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.io.IOException;
12 import java.io.PrintWriter;
13 
14 @WebServlet(name = "updateStudentInfoById")
15 public class updateStudentInfoById extends HttpServlet {
16     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
17         //设置编码格式
18         request.setCharacterEncoding("utf-8");
19         response.setCharacterEncoding("utf-8");
20         //获取前端传过来的参数
21         int id = Integer.parseInt(request.getParameter("id"));
22         String name = request.getParameter("name");
23         String pwd = request.getParameter("pwd");
24         int age = Integer.parseInt(request.getParameter("age"));
25         String address = request.getParameter("address");
26         String sex = request.getParameter("sex");
27         int classid = Integer.parseInt(request.getParameter("classid"));
28         //创建一个Student对象存放数据
29         Student info = new Student(id,name,pwd,age,address,sex,classid);
30         //创建一个dao对象
31         Dao dao = new Dao();
32         //新建一个字符串变量准备接受json
33         String json = null;
34         try {
35             //调用方法修改学生信息,并接受错误代码
36             json = dao.updateStudentInfo(info);
37         } catch (Exception e) {
38             e.printStackTrace();
39         }
40         //创建一个PrintWriter对象,向页面写内容
41         PrintWriter out=response.getWriter();
42         //把json写到页面上
43         out.println(json);
44     }
45 
46     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
47         //直接调用post方法,这样可以支持get和post两种
48         doPost(request,response);
49     }
50 }

那么这个简单的增删改查的后端也就写好了,我们部署到Tomcat上面试试有没有问题

结果让我意想不到的是,idea上面部署没那么容易,折腾到现在也有点累了,尝试了很多方法一直部署不上,以后再做测试吧

猜你喜欢

转载自www.cnblogs.com/huajidafahao/p/11278416.html