講一下思路,主界面的設計就是用html表單元素,百度查找各個元素的用法,按照自己的想法擺放即可,表單提交后會把數據交給serverlet去處理,在那里定義幾個字符串變量來儲存獲取到的數據,然后按照項目要求對數據格式進行判斷(如學號長度是否為8位),對有錯誤的格式進行相應報錯,若數據無誤則提交數據庫並跳轉至success頁面。格式判斷應該是這里面對算法要求最多的,但也很簡單,長度判斷直接調用String類型的length()方法返回長度即可,而郵箱格式或“首字符必須為字母”這樣的判斷最好用正則表達式來寫,如果不會寫的話直接百度現成的方法就好。
下面是代碼:
主界面
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Object message = request.getAttribute("message"); if(message!=null && !"".equals(message)){ %> <script type="text/javascript"> alert("<%=request.getAttribute("message")%>"); </script> <%} %> <form action="AdminServlet" method="post" name="form1" id="form1"> <div id="container"> <div class="header"> <p>學生注冊</p> </div> <div class="form-body"> <label for="">登錄賬號:</label> <input type="text" class="form-input" name="user" value="" placeholder="6-12位"> <div class="form-group"> <label for="">登錄密碼: </label> <input type="password" class="form-input" value="" name="password" > </div> <div class="form-group"> <label for="">性 別:</label> <select name="sex"> <option value="男">男</option> <option value="女">女</option> </select> </div> <div class="form-group"> <label for="">姓 名: </label> <input type="text" class="form-input" name="name" size="20" maxlength="15" value="" placeholder="請在這里輸入用戶名"> </div> <div class="form-group"> <label for="">學 號: </label> <input type="text" class="form-input" name="num" value="" placeholder="8位"> </div> <div class="form-group"> <label for="">電子郵箱: </label> <input type="text" class="form-input" value="" name="email"> </div> <div class="form-group"> <label for="">所在學院: </label> <input type="text" class="form-input" value="" name="yuan"> </div> <div class="form-group"> <label for="">所在系: </label> <input type="text" class="form-input" value="" name="xi"> </div> <div class="form-group"> <label for="">所在班級: </label> <input type="text" class="form-input" value="" name="clas"> </div> <div class="form-group"> <label for="">入學年份(屆):</label> <select name="year"> <option value="1998">1998</option> <option value="1999">1999</option> <option value="2000">2000</option> <option value="2001">2001</option> <option value="2002">2002</option> <option value="2003">2003</option> <option value="2004">2004</option> <option value="2005">2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> <option value="2017">2017</option> <option value="2018">2018</option> <option value="2019">2019</option> </select>屆 </div> <div class="form-group"> <label for="">生源地: </label> <input type="text" class="form-input" value="" name="address"> </div> 備注:<div class="form-group"> <textarea rows="10" name="bei" cols="30">無</textarea> </div> <div class="btn"> <input type="submit" value="添加" class="form-btn form-btn-primary"> <input type="reset" value="重置" class="form-btn form-btn-primary"> </div> </div> <div class="footer"> </div> </div> </form> </body> <script> obj = document.getElementById('container'); cWidth = window.innerWidth; cHeight = window.innerHeight; obj.style.marginLeft = (cWidth - 380)/2+"px"; obj.style.marginTop = (cHeight - 300)/2+"px"; window.onresize=function(){ cWidth = window.innerWidth; cHeight = window.innerHeight; obj.style.marginLeft = (cWidth - 380)/2+"px"; obj.style.marginTop = (cHeight - 300)/2+"px"; } </script> </html>
錄入成功后界面
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Object message = request.getAttribute("message"); if(message!=null && !"".equals(message)){ %> <script type="text/javascript"> alert("<%=request.getAttribute("message")%>"); </script> <%} %> <h1>歡迎使用本系統</h1> </body> </html>
后台
serverlet
package a; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.UserDao; /** * Servlet implementation class AdminServlet */ @WebServlet("/AdminServlet") public class Adminservlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Adminservlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String user = request.getParameter("user"); String password=request.getParameter("password"); String name=request.getParameter("name"); String sex=request.getParameter("sex"); String address=request.getParameter("address"); String num=request.getParameter("num"); String email=request.getParameter("email"); String xi=request.getParameter("xi"); String yuan=request.getParameter("yuan"); String clas=request.getParameter("clas"); String bei=request.getParameter("bei"); String year=request.getParameter("year"); int x=0; int a=0; if(user.equals("")) { request.setAttribute("message", "賬號不能為空!"); request.getRequestDispatcher("index.jsp").forward(request,response); } if(!num.equals("")) { a=num.length(); String ye=num.substring(0, 4); if(!ye.equals("2018"))x=4;} int ps=password.length(); if(ps<8)x=2; int l=user.length(); if(l<6||l>12)x=3; String s=user; Pattern pa = Pattern.compile("[a-zA-Z].*"); Matcher isNum = pa.matcher(s.charAt(0)+""); if (!isNum.matches()) { x=1; } String reg = "\\w+@(\\w+\\.){1,3}\\w+"; Pattern pattern = Pattern.compile(reg); boolean flag = false; if (email != null) { Matcher matcher = pattern.matcher(email); flag = matcher.matches(); } boolean n = false; if(x==0) { if(a==8) { if(flag==true) { try { /*request.setAttribute("message", username+ userpassword+ name+sex+address+ phone+ email);*/ n=UserDao.addPerson(user, password, name, sex, address, num, email, clas, xi, bei, yuan, year); } catch (Exception e) {; // TODO 自動生成的 catch 塊 e.printStackTrace(); } if(n!=true) { request.setAttribute("message", "注冊成功!!"); request.getRequestDispatcher("success.jsp").forward(request,response); }else { request.setAttribute("message", "注冊失敗"); request.getRequestDispatcher("index.jsp").forward(request,response); } } else { request.setAttribute("message", "郵箱格式錯誤"); request.getRequestDispatcher("index.jsp").forward(request,response); } } else { request.setAttribute("message", "學號不為8位"); request.getRequestDispatcher("index.jsp").forward(request,response); }} else { if(x==1) { request.setAttribute("message", "賬號開頭必須為字母"); request.getRequestDispatcher("index.jsp").forward(request,response); } if(x==2) { request.setAttribute("message", "密碼長度應在8位以上"); request.getRequestDispatcher("index.jsp").forward(request,response); } if(x==3) { request.setAttribute("message", "賬號長度應為6到12"); request.getRequestDispatcher("index.jsp").forward(request,response); } if(x==4) { request.setAttribute("message", "學號開頭應為2018"); request.getRequestDispatcher("index.jsp").forward(request,response); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
數據庫的連接DBUL類
package DBU; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBUtil { //這里可以設置數據庫名稱 private final static String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=777"; private static final String USER="sa"; private static final String PASSWORD="1999"; private static Connection conn=null; //靜態代碼塊(將加載驅動、連接數據庫放入靜態塊中) static{ try { //1.加載驅動程序 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //2.獲得數據庫的連接 conn=(Connection)DriverManager.getConnection(URL,USER,PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } //對外提供一個方法來獲取數據庫連接 public static Connection getConnection(){ return conn; } }
Dao
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import DBU.DBUtil; public class UserDao { public static boolean addPerson(String user,String password,String name,String sex,String address,String num,String email,String clas ,String xi,String bei,String yuan,String year)throws SQLException{ //首先拿到數據庫的連接 Connection conn=DBUtil.getConnection(); String sql= "insert into Table_7 values(?,?,?,?,?,?,?,?,?,?,?,?)";//參數用?表示,相當於占位符; //預編譯sql語句 PreparedStatement pst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //先對應SQL語句,給SQL語句傳遞參數 pst.setString(1, user); pst.setString(2, password); pst.setString(3, sex); pst.setString(4, name); pst.setString(5, num); pst.setString(6, email); pst.setString(7,yuan); pst.setString(8, xi); pst.setString(9, clas); pst.setString(10, year); pst.setString(11,address); pst.setString(12, bei); //執行SQL語句 boolean a=pst.execute(); /** * prepareStatement這個方法會將SQL語句加載到驅動程序conn集成程序中,但是並不直接執行 * 而是當它調用execute()方法的時候才真正執行; * * 上面SQL中的參數用?表示,相當於占位符,然后在對參數進行賦值。 * 當真正執行時,這些參數會加載在SQL語句中,把SQL語句拼接完整才去執行。 * 這樣就會減少對數據庫的操作 */ return a;
運行效果:
提示信息:
提交成功界面: