一、写在前面
最近突然发现我写的一篇文章被很多人关注了,自己去看了一眼,是我很早以前自己学习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目录下
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/news?characterEncoding=utf-8
root
123456
做好这些前期工作后,工程就算搭建完成了,接下来开始书写代码。
四、代码开发
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;
@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
文章图片
先将项目添加进来
文章图片
在配置相关参数,应用就可以了
文章图片
系统启动后会先访问首页,所以我们可以先做个漂亮的首页,也可以去网上找现成的,拿过来直接套用就可以了。
文章图片
现在以管理为例,讲解整套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">
>
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项目之新闻管理系统
感谢您的阅读!