1. 程式人生 > >新手詳解JAVA+資料庫+JSP完成簡單頁面

新手詳解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物件tsBoolean 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" >&nbsp;&nbsp;&nbsp;</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>