新手詳解JAVA+資料庫+JSP完成簡單頁面
本篇以資料庫新增為例(本例中資料庫名為“xinxi”表單名字為“stud”)
準備---實體層:
package entity;
public class Student {
private String name; private String adress; private String qq; public void setName(String name) { this.name=name; } public String getName() { return name; } public void setAdress(String adress) { this.adress=adress; } public String getAdress() { return adress; } public void setQq(String qq) { this.qq=qq; } public String getQq() { return qq; } public Student() { } public Student(String n,String a,String q) { name=n; adress=a; qq=q; } }
準備---連線資料庫:
package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Shujuku { public static Connection conn(){ String url="jdbc:sqlserver://localhost:1433;DatabaseName=xinxi";//填寫你的資料庫名 String userName="sa";//填寫你的使用者名稱,我的是sa String userPwd="********";//填寫你的密碼 Connection connection=null; try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("載入驅動成功!"); }catch(Exception e){ e.printStackTrace(); System.out.println("載入驅動失敗!"); } try{ connection=DriverManager.getConnection(url,userName,userPwd); System.out.println("連線資料庫成功!"); }catch(Exception e){ e.printStackTrace(); System.out.print("SQL Server連線失敗!"); } return connection; } public static void close (Statement state, Connection conn) {//關閉 if (state != null) { try { state.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close (ResultSet rs, Statement state, Connection conn) {//關閉 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (state != null) { try { state.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
1.servlet(首先StuService ts=new StuService();//新建service實體物件,以便後來呼叫service中add()方法)
package servlet; import service.*; import java.io.IOException; 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 entity.*; @WebServlet("/StuServlet") public class StuServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); String method = request.getParameter("method"); if(method.equals("add")) { add(request,response); } } StuService ts=new StuService(); private void add(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String name = req.getParameter("name");//從jsp中獲取引數name String adress=req.getParameter("adress"); String qq=req.getParameter("qq"); Student stu=new Student(name,adress,qq);//新建 int k=ts.add(stu); if(k==2) { req.setAttribute("message", "新增成功");//setAttribute方法用於將內容儲存在物件中,傳到add.jsp中 req.getRequestDispatcher("add.jsp").forward(req,resp);//getRequestDispatcher方法用於進入下一個頁面 } if(k==0) { req.setAttribute("message", "重複,請重新錄入"); req.getRequestDispatcher("add.jsp").forward(req,resp); } if(k==1) { req.setAttribute("message", "資料庫新增失敗"); req.getRequestDispatcher("add.jsp").forward(req,resp); } } }
①建立方法add(),Servlet從jsp中獲取引數,新建實體物件Student stu=new Student(name,adress,qq);
②呼叫service層,檢驗新增的準確性
StuService ts=new StuService();//新建service物件
if(ts.add(stu)){
//如果service物件ts的Boolean add(stu)方法返回真值true,頁面要顯示新增成功
//req.setAttribute("message", "新增成功");將"新增成功"內容儲存在req物件引數message中,傳遞給add.jsp
//req.getRequestDispatcher("add.jsp").forward(req,resp);進入下一個介面(這裡是add.jsp)
}
else{
//收到返回值為false,新增失敗
//將 "重複,請重新錄入"內容儲存在req物件引數message中,傳遞給add.jsp
//進入下一個介面(這裡是add.jsp)
}
2. Service(新建dao實體物件,後面要呼叫dao層方法)
package service; import dao.StuDao; import entity.Student; public class StuService { StuDao sdao=new StuDao(); public int add(Student stu) { int f=0; if(!sdao.rename(stu.getName())) { f=1; if(sdao.add(stu)) f=2; } return f; } }
①建立 add(Student stu){}方法,檢驗新增的準確性
②呼叫dao層後臺程式方法rename()檢驗是否重名
if(!sdao.rename(stu.getName())) {//如果沒有重複
sdao.add(stu);//新增
f=true;//返回真值
}
如圖,直接在提示錯誤中點選建立方法即可
3. Dao(後臺程式)
在這裡編寫所需的底層程式:
rename()//驗證名字是否唯一
Add()//新增
public class StuDao { public boolean rename(String name) { // 檢驗名字是否重複 boolean f=false; String sql="select name from stud where name='"+name+"'";//資料庫語句,查詢介面輸入和表stud中name是否重複 Connection conn = Shujuku.conn();//建立連線 Statement state = null;//建立Statement物件,執行靜態SQL語句 ResultSet rs = null;//ResultSet物件 是查詢資料庫時的返回物件,讀取返回結果集 try { state = conn.createStatement(); rs = state.executeQuery(sql); while (rs.next()) {//不重複,返回true f = true; } } catch (SQLException e) { e.printStackTrace(); } finally { Shujuku.close(rs, state, conn); } return f; } public boolean add(Student stu) { //新增 String sql = "insert into stud(name,adress,qq) values('" +stu.getName() + "','" + stu.getAdress() + "','" + stu.getQq() + "')"; Connection conn = Shujuku.conn(); Statement state = null; boolean f = false; int a=0; try { state = conn.createStatement(); a=state.executeUpdate(sql);//新增 } catch (Exception e) { e.printStackTrace(); } finally { Shujuku.close(state, conn); } if (a > 0) { f = true; } return f; } }
4. Add.jsp
編寫前端頁面;
應用javascript驗證客戶端表單合法性。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; 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> <%} %> <div align="center"> <h1 style="color: red;">資訊錄入</h1> <a href="index.jsp">返回主頁</a> <form action="StuServlet?method=add" method="post" onsubmit="return check()"> <div > 姓名<input type="text" id="name" name="name"/> </div> <div > 聯絡方式<input type="text" id="qq" name="qq" /> </div> <div > 地址<input type="text" id="adress" name="adress" /> </div> <div > <button type="submit" >保 存</button> </div> </form> </div> <script type="text/javascript"> function check() { var name = document.getElementById("name");; var qq = document.getElementById("qq"); var adress = document.getElementById("adress"); //非空 if(name.value == '') { alert('名字為空'); name.focus(); return false; } if(qq.value == '') { alert('聯絡方式為空'); qq.focus(); return false; } if(adress.value == '') { alert('地址為空'); adress.focus(); return false; } } </script> </body> </html>