實例:
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); }