JavaEE使用三層架構(顯示層、業務邏輯層、數據訪問層)實現數據的增刪改查


實例:

1、功能描述

實現一個簡易新聞發布系統,包括查看、添加、修改和刪除新聞等基本功能

2、具體要求

(1) 創建數據庫 newssystem,創建表 news,要求如下:

(2) 程序運行時,顯示‘發布新聞’頁面(如圖 1),輸入相關內容,單擊‘提交’按鈕,將新聞內容添加到數據庫

(3) 單擊圖 1 中的‘查看’按鈕,顯示‘查看新聞’頁面(如圖 2),增加‘修改’和‘刪除’鏈接

(4) 單擊圖 2 中的‘update’鏈接,顯示‘修改新聞’頁面(如圖 3),修改后單擊‘修改’按鈕確認,單擊‘查看’按鈕顯示‘查看新聞’頁面(如圖 2)查看修改結果

(5) 單擊圖 2 中的‘delete’鏈接,刪除該條新聞,並顯示‘查看新聞’頁面顯示刪除后的內容(如圖 4)

 

思路:三層架構剖析

顯示層:

都為jsp格式的文件,網頁中顯示多少個頁面就有多少個jsp文件

本實例有圖1、圖2、圖3共3個頁面,故要建立3個jsp文件

業務邏輯層:

servlet來放置,對數據庫表里的數據進行增刪改查

數據訪問層:

bean和dao兩個包來放置

 

解題:按題目具體要求逐步推進

(1)略

(2)用戶輸入內容到圖1所示頁面,並執行添加操作

運行順序為:AddNews--add.jsp--InsertNews

核心代碼(本例中出現的均為核心代碼):

AddNews

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.getRequestDispatcher("add.jsp").forward(request, response);
    }

add.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>發布新聞</h1>
<form action="insert" method="post">
標題:<input type="text" name="title"><br>
作者:<input type="text" name="author"><br>
來源:<input type="text" name="source"><br>
內容:<textarea name="content"></textarea><br>

<input type="submit" value="提交">
<a href="show">查看</a>
</form>
</body>
</html>

InsertNews

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取參數(add.jsp中用戶輸入的內容)
        request.setCharacterEncoding("utf-8");
        News data=new News();

        data.setTitle(request.getParameter("title"));
        data.setAuthor(request.getParameter("author"));
        data.setSource(request.getParameter("source"));
        data.setContent(request.getParameter("content"));
        Date d=new Date();
        data.setTime(d);
        
        //處理數據(將新內容添加到數據庫)
        try {
            new NewsDao().insert(data);
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        //跳轉(添加數據完畢后返回到add.jsp界面)
        response.sendRedirect("add");
    }

(3)運行順序為:

Show--show.jsp

Show

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取參數(沒有參數獲取)
    
        //處理數據(把數據庫表中所有內容查詢出來)
        ArrayList<News> list=new ArrayList<News>();
        try {
            list=new NewsDao().select();
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        request.setAttribute("data", list);//將查詢到的內容裝到一個數據包里,數據包的名字叫data
        
        //跳轉(轉到圖2所示頁面)
        request.getRequestDispatcher("show.jsp").forward(request, response);
    }

show.jsp

<body>
<h1>新聞顯示</h1>
<table border="1">
<%
ArrayList<News> list = (ArrayList<News>)request.getAttribute("data");//將Show中裝到數據包data里的數據取出來
for(News data : list){//用for循環遍歷
%>
<tr>
<td><%=data.getNewsid() %></td>
<td><%=data.getTitle() %></td>
<td><%=data.getAuthor() %></td>
<td><%=data.getSource() %></td>
<td><%=data.getTime() %></td>
<td><a href="edit?id=<%=data.getNewsid()%>">修改</a></td>//指向EditNews(名為edit),帶有id的值
<td><a href="delete?id=<%=data.getNewsid()%>" onclick="return confirm('確認要刪除<%=data.getTitle()%>嗎?')">刪除</a></td>//指向DeleteNews(名為delete),帶有id的值
</tr> 
<%
} 
%>
</table> 
</body>

(4)圖3由兩部分組成,一部分是表單,另一部分是文本框里的內容,因此要先查找到文本框里的內容,再把這些內容傳到表單里。手動修改文本框里內容以后再通過UpdateNews修改數據庫表中的內容

運行順序為:EditNews--edit.jsp--UpdateNews

EditNews

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取參數(獲取show.jsp中傳來的id值)
        String key=request.getParameter("id");
        //處理數據
        News data;
        try {
            data = new NewsDao().select(key);
            request.setAttribute("news", data);            
        //跳轉
          request.getRequestDispatcher("edit.jsp").forward(request, response);        
        } catch (Exception e) {            
            e.printStackTrace();
        }                         
    }    

 

edit.jsp

<body>
<form method="post" action="update">
<h1>修改新聞</h1>
<%
News data = (News)request.getAttribute("news");
if(data != null){
%>
<input type="hidden" name="newsid" value="<%=data.getNewsid() %>">
標題:<input type="text" name="title" value="<%=data.getTitle() %>"><br>
作者:<input type="text" name="author" value="<%=data.getAuthor() %>"><br>
來源:<input type="text" name="source" value="<%=data.getSource() %>"><br>
內容:<textarea name="content" ><%=data.getContent() %></textarea><br>
<input type="submit" value="提交">
<a href="show">查看</a>
<%
}
%>
</form>
</body>

UpdateNews

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //獲取參數
        News data=new News();
        data.setNewsid(Integer.parseInt(request.getParameter("newsid")));
        data.setTitle(request.getParameter("title"));
        data.setAuthor(request.getParameter("author"));
        data.setSource(request.getParameter("source"));
        data.setContent(request.getParameter("content"));
        data.setTime(new Date(request.getParameter("time")));
        //處理數據
        try {
            new NewsDao().update(data);
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        //跳轉
        response.sendRedirect("show");
    }

(5)獲得該行數據的id值,並從數據庫表里刪除帶有該id值的行

運行順序為:DeleteNews(只執行一個文件)

DeleteNews

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取參數(show.jsp傳來的id)
        int newsid=Integer.parseInt(request.getParameter("id"));
        //處理數據
        try {
            new NewsDao().delete(newsid);
        } catch (Exception e) {
            // TODO 自動生成的 catch 塊
            e.printStackTrace();
        }
        //跳轉(跳轉到圖2,通過Show間接跳轉到show.jsp)
        request.getRequestDispatcher("show").forward(request, response);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM