一、题目:WEB界面链接数据库
1.考试要求:
1登录账号:要求由6到12位字母、数字、下划线组成,只有字母可以开头;(1分)
2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母、数字组成。(1分)
3性别:要求用单选框或下拉框实现,选项只有“男”或“女”;(1分)
4学号:要求八位数字组成,前四位为“2018”开头,输入自己学号;(1分)
5姓名:输入自己的姓名;
6点击“添加”按钮,将学生个人信息存储到数据库中。(3分)
7可以演示连接上数据库。(2分)
二、设计思路:
1、首先在users.jsp代码中,用HTML写一个添加表单即可
2、在DBUtil.java文件编写中对数据库进行连接和关闭的操作
3、在Dao.java文件中编写向数据库中插入数据的SQL语句,以及判断Servelet.java中传递的数据是否为空。
4、在 users.jsp 文件中对表单用javascript进行form表单校验,将满足所有添加要求的数据传入Servelet.java中,用post方式传递。
5、在Selvlet.java 文件调用DBUtil.java文件和Dao.java文件,得到Dao.java中判断Servelet.java中传递的数据是否为空的函数,并进行二次表单校验。
6、Servelet.java中若数据合理,调用DBUtil.java的方法,连接数据库将数据通过参数的形式传递给在Dao.java文件中向数据库中插入数据的SQL语句,将数据添加到数据库。若添加成功,给出提示信息并返回users.jsp代码中action跳转的Servlet?method=add页面。若添加失败,给出提示信息并返回users.jsp代码中action跳转的Servlet?method=add页面。
三、源代码
1、Dao.java文件
1 packageDao;2
3 importjava.sql.Connection;4 importjava.sql.Statement;5
6 importDBUtil.DBUtil;7
8 importEntity.User;9
10 public classDao {11
12 public booleanadd(User user) {13 //将数据插入数据库的SQL语句
14 String sql = "insert into uses1 (username,password,sex,name,stuname,email,xueyuan,xi,banji,year,address,addtext) values('"+ user.getUsername() + "','"+ user.getPassword() +"','"+ user.getSex() +"','"+user.getName() +"','"+ user.getStuname() +"','"+user.getEmail()+"','"+ user.getXueyuan() +"','"+user.getXi()+"','"+user.getBanji()+"','"+user.getYear()+"','"+user.getAddress()+"','"+user.getAddtext()+"')";15 //创建数据库链接
16 Connection conn =DBUtil.getConn();17 Statement state = null;18 boolean f = false;19 int a = 0;20
21 try{22 state =conn.createStatement();23 a=state.executeUpdate(sql);24 } catch(Exception e) {25 e.printStackTrace();26 } finally{27 //关闭z 连接
28 DBUtil.close(state, conn);29 }30
31 if (a > 0) {32 f = true;33 }34 returnf;35
36 }37
38
39 }
2、DBUtil.java文件
1 packageDBUtil;2
3
4
5 importjava.sql.Connection;6 importjava.sql.DriverManager;7 importjava.sql.PreparedStatement;8 importjava.sql.ResultSet;9 importjava.sql.SQLException;10 importjava.sql.Statement;11
12 /**
13 *@authorHu14 *15 */
16 public classDBUtil {17
18 public static String db_url = "jdbc:mysql://localhost:3306/user?serverTimezone=UTC";//登录数据库
19 public static String db_user = "root";20 public static String db_pass = "123";21
22 public staticConnection getConn () {23 Connection conn = null;24
25 try{26 Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
27 conn =DriverManager.getConnection(db_url, db_user, db_pass);28 } catch(Exception e) {29 e.printStackTrace();30 }31
32 returnconn;33 }34 /**
35 * 关闭与数据库的连接36 *@paramstate37 *@paramconn38 */
39 public static voidclose (Statement state, Connection conn) {40 if (state != null) {41 try{42 state.close();43 } catch(SQLException e) {44 e.printStackTrace();45 }46 }47
48 if (conn != null) {49 try{50 conn.close();51 } catch(SQLException e) {52 e.printStackTrace();53 }54 }55 }56
57 public static voidclose (ResultSet rs, Statement state, Connection conn) {58 if (rs != null) {59 try{60 rs.close();61 } catch(SQLException e) {62 e.printStackTrace();63 }64 }65
66 if (state != null) {67 try{68 state.close();69 } catch(SQLException e) {70 e.printStackTrace();71 }72 }73
74 if (conn != null) {75 try{76 conn.close();77 } catch(SQLException e) {78 e.printStackTrace();79 }80 }81 }82 public static void main(String[] args) throwsSQLException {83 Connection conn =getConn();84 PreparedStatement pstmt = null;85 ResultSet rs = null;86 String sql ="select * from users";87 pstmt =conn.prepareStatement(sql);88 rs =pstmt.executeQuery();89 if(rs.next()){90 System.out.println("空");91 }else{92 System.out.println("不空");93 }94 }95 }
3、User.java(用户属性类)文件
1 packageEntity;2
3 public classUser {4
5 privateString username;6 privateString password;7 privateString sex;8 privateString name;9 privateString stuname;10 privateString email;11 privateString xueyuan;12 privateString xi;13 privateString banji;14 privateString year;15 privateString address;16 privateString addtext;17
18 publicString getUsername() {19 returnusername;20 }21
22 public voidsetUsername(String username) {23 this.username =username;24 }25
26 publicString getPassword() {27 returnpassword;28 }29
30 public voidsetPassword(String password) {31 this.password =password;32 }33
34 publicString getSex() {35 returnsex;36 }37
38 public voidsetSex(String sex) {39 this.sex =sex;40 }41
42 publicString getName() {43 returnname;44 }45
46 public voidsetName(String name) {47 this.name =name;48 }49
50 publicString getStuname() {51 returnstuname;52 }53
54 public voidsetStuname(String stuname) {55 this.stuname =stuname;56 }57
58 publicString getEmail() {59 returnemail;60 }61
62 public voidsetEmail(String email) {63 this.email =email;64 }65
66 publicString getXueyuan() {67 returnxueyuan;68 }69
70 public voidsetXueyuan(String xueyuan) {71 this.xueyuan =xueyuan;72 }73
74 publicString getXi() {75 returnxi;76 }77
78 public voidsetXi(String xi) {79 this.xi =xi;80 }81
82 publicString getBanji() {83 returnbanji;84 }85
86 public voidsetBanji(String banji) {87 this.banji =banji;88 }89
90 publicString getYear() {91 returnyear;92 }93
94 public voidsetYear(String year) {95 this.year =year;96 }97
98 publicString getAddress() {99 returnaddress;100 }101
102 public voidsetAddress(String address) {103 this.address =address;104 }105
106 publicString getAddtext() {107 returnaddtext;108 }109
110 public voidsetAddtext(String addtext) {111 this.addtext =addtext;112 }113
114 publicUser() {}115
116 publicUser(String username,String password,String sex,String name,String stuname,String email,String xueyuan, String xi,String banji,String year,String address,String addtext) {117
118
119 this.username=username;120 this.password=password;121 this.sex=sex;122 this.name=name;123 this.stuname=stuname;124 this.email=email;125 this.xueyuan=xueyuan;126 this.xi=xi;127 this.banji=banji;128 this.year=year;129 this.address=address;130 this.addtext=addtext;131
132 }133
134
135 }
4、Servlet.java文件
1 packageServlet;2
3 importjava.io.IOException;4
5 importjavax.servlet.ServletException;6 importjavax.servlet.annotation.WebServlet;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10
11 importDao.Dao;12
13 importEntity.User;14
15
16
17
18 @WebServlet("/Servlet")19 public class Servlet extendsHttpServlet {20 private static final long serialVersionUID = 1L;21
22
23 publicServlet() {24 super();25
26 }27 protected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {28 req.setCharacterEncoding("utf-8");29 String method = req.getParameter("method");30 if ("add".equals(method)) {31 add(req, resp);32 }33 }34
35
36 public void add(HttpServletRequest req, HttpServletResponse resp) throwsIOException, ServletException{37 req.setCharacterEncoding("utf-8");38 String username = req.getParameter("username");39 String password = req.getParameter("password");40 String sex = req.getParameter("sex");41 String name = req.getParameter("name");42 String stuname = req.getParameter("stuname");43 String email = req.getParameter("email");44 String xueyuan = req.getParameter("xueyuan");45 String xi= req.getParameter("xi");46 String banji= req.getParameter("banji");47 String year= req.getParameter("year");48 String address= req.getParameter("address");49 String addtext= req.getParameter("addtext");50 //调用用户属性类
51 User user = newUser(username,password,sex,name,stuname,email,xueyuan,xi,banji,year,address,addtext);52 //接受判断函数返回值
53 Dao dao =newDao();54 boolean f=dao.add(user);55 //提示信息
56 if(f) {57 req.setAttribute("message", "注册成功!");58 req.getRequestDispatcher("users.jsp").forward(req,resp);59 }60 else{61 req.setAttribute("message", "已有账号,重复登录!");62 req.getRequestDispatcher("users.jsp").forward(req,resp);63 }64 }65 }
5、users.jsp文件
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
Insert title here8
9 //表单校验
10 function check() {11 flag=0;12 var rep = /^[\w\u4e00-\u9fa5]{6,8}$/; //判断字符串是否为数字和字母组合
13 var myPattern = new RegExp("^[a-zA-Z]"); //以英文字母开头
14 var username = document.getElementById("username").value;15 //alert(username.length);
16 if(!(username.length>5&&username.length<13)){17 alert("用户名长度错误!");return false;18 }19 else if(!(rep.test(username))){20 alert("用户名组成内容错误!");return false;21 }else if(!(myPattern.exec(username))){22 alert("用户名开头必须是字母!");return false;23 }24 var password = document.getElementById("password").value;25 if(password.length<8){26 alert("密码长度错误");27 return false;28 }29
30 var stuname = document.getElementById("stuname").value;31 if(stuname.length!=8){32 alert("学号长度错误!");33 return false;34 }35 if(stuname [0]=='2'&&stuname[1]=='0'&&stuname[2]=='1'&&stuname[3]=='8'){36 flag++;37 }38 else{39 alert("学号格式错误!");40 return false;41 }42
43 var email = document.getElementById("email").value;44 if(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(email)){45 flag++;46 }47 else{48 alert("邮箱格式错误!");49 return false;50 }51 //标志法判断是否添加成功
52 if(flag>1){53 alert("添加成功");54 return true;55 }56 else{57 alert("添加失败");58 return false;59 }60 }61
62
63
64
65
66
67
68
69 style="width: 50%;margin:auto;background:rgb(195,195,195)" bordercolor="red" >
70
71 οnsubmit="return check()">
72
当前位置:添加学生信息73
74
75
76
登录账号:77
78
79
80
登录密码:81
82
83
84
性别:85
86
87 男
88 女
89
90
91
92
93
姓名:94
95
96
97
学号:98
99
100
101
电子邮箱:102
103
104
105
所在学院:106
107
108
109
所在系:110
111
112
113
所在班级:114
115
116
117
入学年份(届):118
119
120 1998
121 1999
122 2000
123 2001
124 2002
125 2003
126 2004
127 2005
128 2006
129 2007
130 2008
131 2009
132 2010
133 2011
134 2012
135 2013
136 2014
137 2015
138 2016
139 2017
140 2018
141 2019
142
143
144
145
146
生源地:147
148
149
150
151 备注:152
153
154
155
156
157
158
159
160
161
162
163
164
165
四、程序测试