一、写在前面

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

二、工程简介
以下是我个人对一个工程的理解:

三、搭建工程

1、new一个project。

这里选择javaEE下的web Application,然后下一步。


取一个项目名,然后完成。

2、搭建工程目录
创建好工程以后,先搭建工程目录,如下:

此处如果不能按照图片上的目录分级显示,可以点击小齿轮,然后点击图上标注的即可

3、导入jar包和c3p0文件
创建好工程目录后,我们现在就需要导入jar包和c3p0配置文件。
导jar包有两种方式,如图:

图片上的这个图标是导包的快捷方式,还有一种是在file下的project Structure也可导入,如图:

在Libraries下,点击加号,找到所有的jar包文件,引入。

将lib包fix进项目

然后应用,ok即可

c3p0代码如下(c3p0-config.xml)文件名必须叫这个,且必须放在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><!--默认配置--><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/news?characterEncoding=utf-8</property><property name="user">root</property><property name="password">123456</property></default-config></c3p0-config>

做好这些前期工作后,工程就算搭建完成了,接下来开始书写代码。

四、代码开发

1、设计数据表,因为自己做的是教学类代码,所以不做太多复杂的表,一共就两张表,如图:



数据表设计好以后就可以写对应的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;@Overridepublic String toString() {return  newsid +"," + 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;}@Overridepublic 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;@Overridepublic 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

先将项目添加进来

在配置相关参数,应用就可以了

系统启动后会先访问首页,所以我们可以先做个漂亮的首页,也可以去网上找现成的,拿过来直接套用就可以了。

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

<li style="display:inline-block"><a href="/News/show" style="color: black">管理</a></li>

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

<servlet><servlet-name>ShowServlet</servlet-name><servlet-class>com.news.web.ShowServlet</servlet-class></servlet><servlet-mapping><servlet-name>ShowServlet</servlet-name><url-pattern>/show</url-pattern></servlet-mapping>

这里一共分为两块,前面的<servlet></servlet>里面的内容,是servlet的路径,后面<servlet-mapping></servlet-mapping>里面的,则是配置的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, String[]> map = request.getParameterMap();page = JdbcUtil.mapToBean(map, PageBean.class);//调List<NewsDetail> 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);//转转发,将数据响应给前端界面。

现在补充这里调用方法的代码:
JdbcUtil.java文件

 public static <T> T mapToBean(Map map, Class<T> 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();@Overridepublic List<NewsDetail> 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 {@Overridepublic List<NewsDetail> 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>(NewsDetail.class),startRow,page.getSize());} catch (Exception e) {throw new RuntimeException(e);}}}

实体类代码已经有了,就不多做描写了。
到这一步,请求的处理就算解决了,现在就是解决数据的响应了,因为servlet的最后一步是转,那跳转的页面就需要写一下了:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2019/6/6Time: 16:20To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>新闻管理系统</title><script src="/js/jquery-3.3.1.min.js"></script>
</head>
<body>
<hr color="bisque">
<div><div style="background-color: ghostwhite"><div style="width: 50px;float: left;margin: 15px auto auto 60px"><span style="font-family: kaiti;font-size: 25px;color: darkorchid">旧波新闻</span></div><img src="img/bgimg2.jpg" alt="这是图片"  width="70" height="70" style="margin-left: 70px"><span style="color: blue;font-family: kaiti;font-size: 50px;margin-left: 140px">欢迎访问旧波新闻!</span><div style="float: right;margin-right: 100px"><ul style="list-style-type: none"><li style="display:inline-block"><a href="/index.jsp" style="color: black">首页/</a></li><li style="display:inline-block"><a href="login.jsp" style="color: black">登录/</a></li><li style="display:inline-block"><a href="/show" style="color: black">管理</a></li></ul></div></div><h4 ><hr color="bisque"></h4><div align="center"><form action="/show" method="post"><%--模糊查询区--%>新闻标题:<input type="text" name="title"><input type="hidden" name="currPage" value="1"><input type="submit" value="查询"></form><div align="center"><table border="1" cellpadding="13" cellspacing="1"><tr><td>新闻编号</td><td>新闻标题</td><td>新闻摘要</td><td>作者</td><td>创建时间</td><td>操作</td></tr><c:forEach var="news" items="${sessionScope.list}"><tr><td>${news.id}</td><td>${news.title}</td><td>${news.summary}</td><td>${news.author}</td><td>${news.createdate}</td><td><a href="/showPinLun?id=${news.id}">查看评论</a>||<a href="/addPinLun?id=${news.id}">评论</a>||<a onclick="return confirm('确认删除该评论吗?')" href="/del?id=${news.id}">删除</a></td></tr></c:forEach></table></div><div align="center" style="margin-top: 30px"><table cellspacing="1" cellpadding="10"><tr><td><a href="javascript:goPage(1)">首页</a></td><td><a href="javascript:goPage(${sessionScope.page.currPage-1})">上一页</a></td><td><c:forEach var="i" begin="1" end="${sessionScope.page.totalPage}"> <a href="javascript:goPage(${i})">${i}</a></c:forEach></td><td><a href="javascript:goPage(${sessionScope.page.currPage+1})">下一页</a></td><td><a href="javascript:goPage(${sessionScope.page.totalPage})">尾页</a></td><td>跳转到<input type="text" value="${sessionScope.page.currPage}" size="5">页<input type="button" value="跳转" onclick="goPage(this.previousElementSibling.value)"></td></tr></table></div></div>
</div></body>
<script>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();}
</script>
</html>

完成后的效果图展示:

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

感谢您的阅读!

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

  1. javaWeb项目之新闻管理系统

    javaWeb项目之新闻管理系统 这是csdn保存的源码,如有需要,可自行下载:https://download.csdn.net/download/fzt12138/11776339 另外,根据各位 ...

  2. javaWeb项目之图书管理系统(附视频讲解)

    javaWeb项目之图书管理系统(附视频讲解) 视频播放地址:javaWeb图书系统 本系统为"Swing项目之图书管理系统"(此源码已共享)的Web版,网页框架用采用EasyUI ...

  3. mysql大项目:新闻管理系统

    第一遍跟着课程写代码 第二遍自己写一遍代码 文章目录 新闻管理系统项目展示 封装数据库连接池 新闻管理系统项目展示 colorama from colorama import Back, Fore, ...

  4. JavaWeb项目:新闻发布系统01(登录新闻增加)

    上次给大家介绍了一下页面的跳转和数据库的连接,不知道大家都记住了没有啊,今天就来接着给大家分享一下如何制作一个简单的新闻小项目吧,会用到之前给大家分享的一些知识哦,不知道大家都记住了没有,赶紧来一起动 ...

  5. JavaWeb项目 学生后台管理系统 有源码!!(基于MVC设计模式)

    运行环境: jdk8+tomcat8.5+mysql 项目技术: Servlet+JSP+jdbc+bootstrap+jquery+js 数据库文件:https://pan.baidu.com/s/ ...

  6. javaweb项目实战--学生管理系统

    准备工作 所使用到的技术: 前端–html css javascript 后端–tomcat servlet jsp el jdbc mybatis 项目结构: 实现原理: 1.登录页面的逻辑结构 2 ...

  7. JavaWeb项目:新闻发布系统02(新闻系统功能制作)

    上一期给大家介绍了新闻发布系统的登录和增加功能的制作,接下来这期继续给大家来介绍新闻系统功能制作 目录 一,首页的数据显示: 效果图: 插入数据前: 插入数据后: 代码: 二,修改功能: 效果图: 代 ...

  8. JavaWeb项目:新闻发布系统03(新闻系统的功能完善)

    上一期给大家分享了关于系统的增删改查功能,今天就来接着给大家介绍新闻系统的评论及其他功能. 目录 一,阅读量的制作 效果图: 代码块: 二,新闻标题的模糊查询 效果图: 代码: 三,新闻评论的新增,删 ...

  9. 宠物诊所java项目_JavaWeb项目-宠物诊所管理系统

    [实例简介] 用eclipse开发的JavaWeb项目--宠物诊所管理系统:可以对宠物信息和宠物主人信息进行管理,添.删.改.查,数据库用的是Mysql.服务器用的是tomcat. [实例截图] [核 ...

  10. 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询...

    详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统).模糊查询 1,创建数据库,我的用户名:root 密码:root,数据库名称:lianwei,表名:login 2,效果 ...

最新文章

  1. iScience | 大规模表征学习寻找分子间相互作用
  2. Oracle-No.04 Oracle视图加主键解决hibernate复合主键问题
  3. 笔记本右侧手滑板Synaptics
  4. filebeat启动多个_【翻译】Filebeat相关(一)
  5. 重置npm设置_密码重置用户流程4部曲
  6. 四、spring中高级装配(2)
  7. 使用java将字符串写入到指定的文件中
  8. Swift网络开发之NSURLSession学习笔记
  9. [ACL17]A Minimal Span-Based Neural Constituency Parser(一个最小化的基于跨度的神经句法分析器)...
  10. 计算离散点线性相关系数
  11. android 手机内存64实际不到,手机拥有64G,为何用了不到1G,就显示内存不足?是谁在搞鬼?...
  12. 前端web实训——小米商城(第一天)
  13. Android仿芝麻信用分雷达分布图
  14. Self-Supervised Learning of Pretext-Invariant Representation
  15. 开发者的拯救者还是掘墓人?解密低代码开发平台 ZT
  16. qlv是什么格式?要怎么把qlv格式转换成mp4视频
  17. 新随笔--读书笔记《学会提问》:学习提出好问题的思维方法
  18. K8S在centeros中的部署
  19. Java实现是否为节假日、工作日判断(调用“http://api.goseek.cn/Tools/holiday”接口)
  20. 判断等腰三角形java_JAVA怎么编写程序判断一个三角形是否为等腰三角形

热门文章

  1. 【转】 UDK 全版本安装文件下载
  2. 遗传算法Python代码实现
  3. CCNA学习笔记-1 基础知识回顾
  4. 性能高的tftp服务器,tftp服务器软件
  5. 【源码】VB6聊天机器人
  6. P2P终结者的工作原理
  7. 日月神话_启动成本的神话
  8. 破解ACCESS(2000) .mdb格式文件密码手记
  9. (尚硅谷)2022 版 MyBatis 教程笔记一
  10. SQL注入攻击与防御