实例:
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()%>" οnclick="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); }