javaWeb项目之新闻管理系统详细开发过程

一、写在前面
最近突然发现我写的一篇文章被很多人关注了,自己去看了一眼,是我很早以前自己学习Servlet时做的一个小系统,主要是为了好玩,没想到这个系统能帮助到一些学生学习java,所以我打算再出一个详细的教程。
前来咨询我的人基本都是大学未毕业的学生,想必应该是学习上遇到了一些问题,所以我打算从头到尾,详细的讲解这套系统的开发过程,目的是通过书面方式给一些存在疑问的同学提供一些教学帮助,欢迎留言咨询。
二、工程简介
以下是我个人对一个工程的理解:
javaWeb项目之新闻管理系统详细开发过程
文章图片

三、搭建工程
1、new一个project。
javaWeb项目之新闻管理系统详细开发过程
文章图片

这里选择javaEE下的web Application,然后下一步。
javaWeb项目之新闻管理系统详细开发过程
文章图片

取一个项目名,然后完成。
javaWeb项目之新闻管理系统详细开发过程
文章图片

2、搭建工程目录
创建好工程以后,先搭建工程目录,如下:
javaWeb项目之新闻管理系统详细开发过程
文章图片

此处如果不能按照图片上的目录分级显示,可以点击小齿轮,然后点击图上标注的即可
javaWeb项目之新闻管理系统详细开发过程
文章图片

3、导入jar包和c3p0文件
创建好工程目录后,我们现在就需要导入jar包和c3p0配置文件。
导jar包有两种方式,如图:
javaWeb项目之新闻管理系统详细开发过程
文章图片

图片上的这个图标是导包的快捷方式,还有一种是在file下的project Structure也可导入,如图:
javaWeb项目之新闻管理系统详细开发过程
文章图片

在Libraries下,点击加号,找到所有的jar包文件,引入。
javaWeb项目之新闻管理系统详细开发过程
文章图片

将lib包fix进项目
javaWeb项目之新闻管理系统详细开发过程
文章图片

然后应用,ok即可
c3p0代码如下(c3p0-config.xml)文件名必须叫这个,且必须放在src目录下

com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/news?characterEncoding=utf-8 root 123456

做好这些前期工作后,工程就算搭建完成了,接下来开始书写代码。
四、代码开发
1、设计数据表,因为自己做的是教学类代码,所以不做太多复杂的表,一共就两张表,如图:
javaWeb项目之新闻管理系统详细开发过程
文章图片

javaWeb项目之新闻管理系统详细开发过程
文章图片

javaWeb项目之新闻管理系统详细开发过程
文章图片

数据表设计好以后就可以写对应的javaBean文件了,就是实体类,代码如下:
package com.bean; import java.sql.Date; public class NewsComment { private int id; private int newsid; private String content; private String author; private Date createdate; @Override public String toString() { returnnewsid + "," + content+ "," + author+ "," + createdate; }public int getId() { return id; }public void setId(int id) { this.id = id; }public int getNewsid() { return newsid; }public void setNewsid(int newsid) { this.newsid = newsid; }public String getContent() { return content; }public void setContent(String content) { this.content = content; }public String getAuthor() { return author; }public void setAuthor(String author) { this.author = author; }public Date getCreatedate() { return createdate; }public void setCreatedate(Date createdate) { this.createdate = createdate; } }

package com.bean; import java.sql.Date; public class NewsDetail { private int id; private String title; private String summary; private String author; private Date createdate; public String toString1() { return title+ "," + summary+ "," + author + "," + createdate; } @Override public String toString() { return "NewsDetail{" + "id=" + id + ", title='" + title + '\'' + ", summary='" + summary + '\'' + ", author='" + author + '\'' + ", createdate=" + createdate + '}'; }public int getId() { return id; }public void setId(int id) { this.id = id; }public String getTitle() { return title; }public void setTitle(String title) { this.title = title; }public String getSummary() { return summary; }public void setSummary(String summary) { this.summary = summary; }public String getAuthor() { return author; }public void setAuthor(String author) { this.author = author; }public Date getCreatedate() { return createdate; }public void setCreatedate(Date createdate) { this.createdate = createdate; } }

package com.bean; import java.sql.Date; public class PinLun { private int id; private Date createdate; public Date getCreatedate() { return createdate; }public void setCreatedate(Date createdate) { this.createdate = createdate; }public int getId() { return id; }public void setId(int id) { this.id = id; }private int newsid; @Override public String toString() { return content+ "," + author; }public int getNewsid() { return newsid; }public void setNewsid(int newsid) { this.newsid = newsid; }private String content; private String author; public String getContent() { return content; }public void setContent(String content) { this.content = content; }public String getAuthor() { return author; }public void setAuthor(String author) { this.author = author; }}```最后一个pageBean文件是做分页时需要的条件,不需要在数据库中创建实体类。```java package com.bean; public class PageBean { private int currPage=1; private int totalPage; private int size=4; private int count; private String title; public String getTitle() { return title; }public void setTitle(String title) { this.title = title; }public int getCurrPage() { return currPage; }public void setCurrPage(int currPage) { this.currPage = currPage; }public int getTotalPage() { return totalPage; }public void setTotalPage(int totalPage) { this.totalPage = totalPage; }public int getSize() { return size; }public void setSize(int size) { this.size = size; }public int getCount() { return count; }public void setCount(int count) { this.count = count; }}

这里呢,我们可以先配置一下tomcat
javaWeb项目之新闻管理系统详细开发过程
文章图片

先将项目添加进来
javaWeb项目之新闻管理系统详细开发过程
文章图片

在配置相关参数,应用就可以了
javaWeb项目之新闻管理系统详细开发过程
文章图片

系统启动后会先访问首页,所以我们可以先做个漂亮的首页,也可以去网上找现成的,拿过来直接套用就可以了。
javaWeb项目之新闻管理系统详细开发过程
文章图片

现在以管理为例,讲解整套servlet的开发流程。
前端页面路径代码
  • 管理

  • 通过一个a标签,路径选取servlet的路径名,通过点击a标签,前端请求便会被web.xml拦截,通过名称找到相关的servlet,servlet通过取调存转四步,将请求响应给前端页面,完成整个步骤。了解思路,理论存在,实践开始。
    首先配置web.xml:
    > -name>ShowServlet -class>com.news.web.ShowServlet -mapping> -name>ShowServlet /show

    这里一共分为两块,前面的里面的内容,是servlet的路径,后面里面的,则是配置的servlet的路径名
    这里写好以后,咱们就可以去些servlet层的代码了:
    public class ShowServlet extends HttpServlet { private PageBean page=new PageBean(); //分页查询条件的对象 private INewsService service=new NewsServiceImpl(); //服务层对象 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); Map, String[]> map = request.getParameterMap(); page = JdbcUtil.mapToBean(map, PageBean.class); //调 List list=service.selectLikePage (page); //调 request.getSession().setAttribute("list",list); //存 request.getSession().setAttribute("page",page); //存 request.getRequestDispatcher("/jsp/show.jsp").forward(request,response); //转 }

    代码中相关功能已写了注释,这里再详细解释一下,servlet分get请求和post请求,通俗点讲,像平常某个超链接的跳转之类的就算是get请求,而登录注册之类的form表单提交的,就是post请求,举的例子不太恰当,仅作为理解的参考。
    不管是哪种请求,都分为取、调、存、转四步,因为get请求中未添加参数,所以这里不需要“取”,通过调用JdbcUtil类的mapToBean方法获得数据,以及调用INewsService的selectLikePage 方法获取数据,这是“调”。request.getSession().setAttribute("list",list); //存 request.getSession().setAttribute("page",page); //存这两步则是“存”,即是将获取的数据存在request域中,通过request.getRequestDispatcher("/jsp/show.jsp").forward(request,response); //转转发,将数据响应给前端界面。
    【javaWeb项目之新闻管理系统详细开发过程】现在补充这里调用方法的代码:
    JdbcUtil.java文件
    public static T mapToBean(Map map, Class c) { try { T t = c.newInstance(); BeanUtils.populate(t, map); return t; } catch (Exception e) { throw new RuntimeException(e); } }

    INewsServiceImpl.java文件
    public class NewsServiceImpl implements INewsService { private INewsDao dao=new NewsDaoImpl(); @Override public List selectLikePage(PageBean page) { int count=dao.selectCount(); int totalPage=(count%4==0)?(count/4):(count/4+1); page.setCount(count); page.setTotalPage(totalPage); return dao.selectLikePage(page); }

    dao层NewsDaoImpl.java文件
    public class NewsDaoImpl implements INewsDao { @Override public List selectLikePage(PageBean page) { QueryRunner qr = new QueryRunner(JdbcUtil.getDS()); int startRow=(page.getCurrPage()-1)*page.getSize(); String sql="select * from news_detail where 1=1"; if(page.getTitle()!=null&&!page.getTitle().equals("")){ sql+=" and title like '%"+page.getTitle()+"%'"; } sql+=" limit ?,?"; try { return qr.query(sql,new BeanListHandler(NewsDetail.class),startRow,page.getSize()); } catch (Exception e) { throw new RuntimeException(e); } } }

    实体类代码已经有了,就不多做描写了。
    到这一步,请求的处理就算解决了,现在就是解决数据的响应了,因为servlet的最后一步是转,那跳转的页面就需要写一下了:
    新闻管理系统 - 锐客网 ="/js/jquery-3.3.1.min.js">
    ="font-family: kaiti; font-size: 25px; color: darkorchid">旧波新闻
    javaWeb项目之新闻管理系统详细开发过程
    文章图片
    ="color: blue; font-family: kaiti; font-size: 50px; margin-left: 140px">欢迎访问旧波新闻!
    新闻标题:
    新闻编号 新闻标题 新闻摘要 作者 创建时间 操作
    ${news.id} ${news.title} ${news.summary} ${news.author} ${news.createdate} 查看评论||评论||删除
    > function goPage(v) { if(v<1){ v=1; } var totalPage=${sessionScope.page.totalPage} if(v>totalPage){ v=totalPage; } if(totalPage=0){ v=1; } $(":hidden").val(v); $("form").submit(); }

    完成后的效果图展示:
    javaWeb项目之新闻管理系统详细开发过程
    文章图片

    一个新闻页显示的代码就算彻底结束了,如有不懂的,欢迎提问,或者添加我上一篇文章中的联系方式,如果想获取源代码,请前往上一篇文章JavaWeb项目之新闻管理系统
    感谢您的阅读!

      推荐阅读