当前位置:首页 > Java技术 > javaWeb中MVC的编程思想示例

javaWeb中MVC的编程思想示例

2022年11月07日 08:41:51Java技术16

没有学习MVC之前我只写了一个Servlet类(Note_List.java),分层之后,我将这个类分成了5个类(NoteDao.java,,NoteDaoImpl.java,,NoteService.java,,NoteServiceImpl.java,,Note_List.java),MVC的基础知识我就不在此赘述,这里只是写一个MVC分层思想的示例,便于了解这种编程思想。

  分层之前的Note_List.java

 1 public class Note_List extends HttpServlet {
 2 
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         doPost(req,resp);
 6     }
 7 
 8     @Override
 9     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
10         req.setCharacterEncoding("UTF-8");
11         resp.setCharacterEncoding("UTF-8");
12         DBHelp db = new DBHelp();
13         String sql = "select * from note";
14         List<Map<String, String>> lmap = new ArrayList<Map<String, String>>();
15         lmap = db.query(sql, null);
16         List<Note> list = new ArrayList<Note>();
17         if (lmap.size() > 0) {
18             for (Map<String, String> map : lmap) {
19                 Note note = new Note();
20                 note.setTitle(map.get("title"));
21                 note.setTags(map.get("tags"));
22                 note.setAuthor(map.get("author"));
23                 note.setContent(map.get("content"));
24                 note.setCreatetime(map.get("createtime"));
25                 list.add(note);
26             }
27 
28             List<String> imgSrc = new ArrayList<String>();// 提取每个文档内容中的图片地址集合
29             List<String> imgSrcFirst = new ArrayList<String>();// 提取每个文档内容中的第一个图片地址
30             List<String> contentTxt = new ArrayList<String>();// 提取每个文档内容中的纯文本内容的前101字节
31 
32             for (int i = 0; i < lmap.size(); i++) {
33                 String ct = lmap.get(i).get("content");
34 
35                 if (ct == null || ct.equals("")) {// 判断文档内容是否为空或者为空串
36                     contentTxt.add(null);
37                     imgSrcFirst.add(null);
38                 } else {
39                     String ctTxt = Get_ContentTxt_FormHTML.getContentTxt(ct);
40                     if (ctTxt == null) {
41                         contentTxt.add(null);
42                     } else {
43                         int l = ctTxt.getBytes().length;
44                         if (l <= 100) {// 字符串不等于NULL,字节数肯定大于0
45                             contentTxt.add(ctTxt);
46                         } else {
47                             contentTxt.add(ctTxt.substring(0, 100) + "...");
48                         }
49                         contentTxt.add(null);
50                     }
51 
52                     imgSrc = Get_Image_FormHTML.getImageSrc(ct);
53                     if (imgSrc.size() == 0) {
54                         imgSrcFirst.add(null);
55                     } else {
56                         imgSrcFirst.add(imgSrc.get(0));
57                     }
58                 }
59             }
60 
61             HttpSession sesImg = req.getSession();
62             sesImg.setAttribute("img", imgSrcFirst);
63 
64             HttpSession sesConTxt = req.getSession();
65             sesConTxt.setAttribute("txt", contentTxt);
66 
67             req.setAttribute("list", list);
68             req.getRequestDispatcher("note_list_user.jsp").forward(req, resp);
69         }
70     }
71 }
可见,没有分层的代码杂乱无章,复杂难懂,所以应该把项目分层:

分层后的5个类:(按顺序阅读)

第1个类:NoteDao.java 接口:
1 public interface NoteDao {
2     public List<NoteBean> queryAll();// 查询所有文档所有字段内容
3     public List<String>contentAll();//提取所有文档中content字段内容
4     public List<List<String>>contentImg();// 提取所有文档内容中的每一个文档的图片地址集合
5     public List<String>contentImgFirst();// 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
6     public List<String>contentTxt(); //提取每个文档内容中纯文本内容
7     public List<String>contentTxtHundred();//提取每个文档内容中纯文本内容的前101字节
8 }
第2个类:NoteDaoImpl.java 实现类:
  1 public class NoteDaoImpl implements NoteDao {
  2     DBUtil db = new DBUtil();
  3 
  4     // 查询所有文档所有字段内容
  5     @Override
  6     public List<NoteBean> queryAll() {
  7         String sql = "select * from note";
  8         List<Map<String, String>> lmap = new ArrayList<Map<String, String>>();
  9         lmap = db.query(sql, null);
 10         List<NoteBean> list = new ArrayList<NoteBean>();
 11         for (Map<String, String> map : lmap) {
 12             NoteBean nb = new NoteBean();
 13             nb.setAuthor(map.get("author"));
 14             nb.setContent(map.get("content"));
 15             nb.setCreatetime(map.get("createtime"));
 16             nb.setId(Integer.parseInt(map.get("id")));
 17             nb.setTags(map.get("tags"));
 18             nb.setTitle(map.get("title"));
 19             list.add(nb);
 20         }
 21         return list;
 22     }
 23 
 24     // 提取所有文档中content字段内容
 25     @Override
 26     public List<String> contentAll() {
 27         NoteDao nd = new NoteDaoImpl();
 28         List<NoteBean> lnb = nd.queryAll();
 29 
 30         List<String> content = new ArrayList<String>();
 31         if (lnb!=null&&lnb.size() > 0) {
 32             for (int i = 0; i < lnb.size(); i++) {
 33                 content.add(lnb.get(i).getContent());
 34             }
 35         }
 36         return content;
 37     }
 38 
 39     // 提取所有文档内容中的每一个文档的图片地址集合
 40     @Override
 41     public List<List<String>> contentImg() {
 42         NoteDao nd = new NoteDaoImpl();
 43         List<String> lnb = nd.contentAll();
 44 
 45         List<List<String>> imgSrc = new ArrayList<List<String>>();
 46         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档总内容的集合是否为null
 47             for (int i = 0; i < lnb.size(); i++) {
 48                 String ct = lnb.get(i);
 49                 if (ct == null || ct.equals("")) {// 判断每一个文档的内容是否为空
 50                     imgSrc.add(null);
 51                 } else {
 52                     imgSrc.add(Get_ContentImg_FormHTML.getImageSrc(ct));//此处调用了公共类
 53                 }
 54             }
 55         }
 56         return imgSrc;
 57     }
 58 
 59     // 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
 60     @Override
 61     public List<String> contentImgFirst() {
 62         NoteDao nd = new NoteDaoImpl();
 63         List<List<String>> lnb = nd.contentImg();
 64 
 65         List<String> imgSrcFirst = new ArrayList<String>();
 66         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档图片地址集合是否为空
 67             for (int i = 0; i < lnb.size(); i++) {
 68                 if (lnb.get(i)!=null&&lnb.get(i).size() > 0) {// 判断每一个文档中图片地址集合是否为空
 69                     imgSrcFirst.add(lnb.get(i).get(0));// 提取每一个文档中的图片地址集合中第一个图片
 70                 } else {
 71                     imgSrcFirst.add(null);
 72                 }
 73             }
 74         }
 75         return imgSrcFirst;
 76     }
 77 
 78     // 提取每个文档内容中纯文本内容
 79     @Override
 80     public List<String> contentTxt() {
 81         NoteDao nd = new NoteDaoImpl();
 82         List<String> lnb = nd.contentAll();
 83 
 84         List<String> ctTxt = new ArrayList<String>();// 提取每个文档内容中的纯文本内容
 85         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档内容的集合是否为空
 86             for (int i = 0; i < lnb.size(); i++) {
 87                 String ctText = Get_ContentTxt_FormHTML.getContentTxt(lnb.get(i));//此处调用了公共类
 88                 if (ctText == null || ctText.equals("")) {// 判断每一个文档的内容是否为空
 89                     ctTxt.add(null);
 90                 } else {
 91                     ctTxt.add(ctText);
 92                 }
 93             }
 94         }
 95         return ctTxt;
 96     }
 97 
 98     // 提取每个文档内容中纯文本内容的前101字节
 99     @Override
100     public List<String> contentTxtHundred() {
101         NoteDao nd = new NoteDaoImpl();
102         List<String> ctTxt = nd.contentTxt();
103 
104         List<String> ctTxtHundred = nd.contentTxt();
105         if (ctTxt!=null&&ctTxt.size() > 0) {// 判断所有文档的纯内容的集合是否为空
106             for (int i = 0; i < ctTxt.size(); i++) {
107                 if (ctTxt.get(i) == null || ctTxt.get(i).equals("")) {// 判断每一个文档的内容是否为空
108                     ctTxtHundred.add(null);
109                 } else {
110                     int l = ctTxt.get(i).getBytes().length;
111                     if (l <= 100) {// 字符串不等于NULL,字节数肯定大于0,判断总字节数是否大于100
112                         ctTxtHundred.add(ctTxt.get(i));
113                     } else {
114                         ctTxtHundred.add(ctTxt.get(i).substring(0, 100) + "...");
115                     }
116                 }
117             }
118         }
119         return ctTxtHundred;
120     }
121 
122 }
第3个类:NoteService.java 接口:
1 public interface NoteService {
2     public List<NoteBean> queryAll();// 查询所有文档所有字段内容
3     public List<String>contentAll();//提取所有文档中content字段内容
4     public List<List<String>>contentImg();// 提取所有文档内容中的每一个文档的图片地址集合
5     public List<String>contentImgFirst();// 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
6     public List<String>contentTxt(); //提取每个文档内容中纯文本内容
7     public List<String>contentTxtHundred();//提取每个文档内容中纯文本内容的前101字节
8 }
第4个类:NoteServiceImpl.java 实现类:
 1 public class NoteServiceImpl implements NoteService{
 2     NoteDao nd=new NoteDaoImpl();
 3     @Override
 4     public List<NoteBean> queryAll() {
 5         List<NoteBean> nb=nd.queryAll();
 6         return nb;
 7     }
 8     @Override
 9     public List<String> contentAll() {
10         List<String> ls=nd.contentAll();
11         return ls;
12     }
13     @Override
14     public List<List<String>> contentImg() {
15         List<List<String>>lts=nd.contentImg();
16         return lts;
17     }
18     @Override
19     public List<String> contentImgFirst() {
20         List<String>ls=nd.contentImgFirst();
21         return ls;
22     }
23     @Override
24     public List<String> contentTxt() {
25         List<String>ls=nd.contentTxt();
26         return ls;
27     }
28     @Override
29     public List<String> contentTxtHundred() {
30         List<String>ls=nd.contentTxtHundred();
31         return ls;
32     }
33 }
第5个类:Note_List.java (Servlet类)
 1 public class Note_List extends HttpServlet {
 2 
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         doPost(req, resp);
 6     }
 7 
 8     @Override
 9     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
10         req.setCharacterEncoding("UTF-8");
11         resp.setCharacterEncoding("UTF-8");
12 
13         NoteService nd = new NoteServiceImpl();
14         List<NoteBean> lnb = nd.queryAll();// 查询所有文档所有字段内容
15         List<String> imgSrcFirst = nd.contentImgFirst();// 提取每个文档内容中的第一个图片地址的集合
16         List<String> ctTxtHundred = nd.contentTxtHundred();// 提取每个文档内容中的纯文本内容的前101字节
17 
18         HttpSession sesImg = req.getSession();
19         sesImg.setAttribute("img", imgSrcFirst);
20 
21         HttpSession sesConTxt = req.getSession();
22         sesConTxt.setAttribute("txt", ctTxtHundred);
23 
24         req.setAttribute("list", lnb);
25         req.getRequestDispatcher("note_list_user.jsp").forward(req, resp);
26 
27     }
28 }

 

 可见,分层后的代码,简明易懂,易于维护和代码复用,但是代码量增加了不少,对于程序的运行效率我觉得会有一定程度的损失。

作者:nreg
来源链接:https://www.cnblogs.com/nreg/p/9769892.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68287.html

分享给朋友:

“javaWeb中MVC的编程思想示例” 的相关文章

冒泡排序的原理,思路,以及算法分析(Java实现)

冒泡排序的原理,思路,以及算法分析(Java实现)

冒泡排序 如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。 1.原理:比较两个相邻的元素,将值大的元素交换到右边 2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 (1)第一次比较:首先比较第...

二分法(折半查找)的运用之java实现猜数字游戏

让计算机输入一个数 然后用户进行猜数游戏 一般而言,七次会猜对,如果猜不对,那么就是你的方法不对 在这儿涉及到的一个算法就是二分法 ***二分法查找,***也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下: (1)首先,从数组...

Java常用日志框架介绍

Java常用日志框架介绍

目录 Java日志概述 Java常用日志框架类别 Java常用日志框架历史 java常用日志框架关系 Commons Logging与Slf4j实现机制对比 Commons Logg...

Java多线程详解

Java多线程详解

       线程对象是可以产生线程的对象。比如在Java平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对...

解决ADT不显示javadoc An exception occurred while getting the javadoc

这几天发现ADT在网速特别差的情况下,鼠标悬停不会显示javadoc,而自己写的注释则没有问题. 在网络畅通的时候又会显示javadoc. 所以我猜测ADT会在本地查找文档失败时候尝试联网查找. 一般来说,如果你之前鼠标悬停会显示javadoc,最近突然不显示了...

Java集合之LinkedList

Java集合之LinkedList

一、LinkedList概述 1.初识LinkedList 上一篇中讲解了ArrayList,本篇文章讲解一下LinkedList的实现。 LinkedList是基于链表实现的,所以先讲解一下什么是链表。链表原先是C/C++的概念,是一种线性的存储结构,意思是将要存储...

2020 年了,Java 日志框架到底哪个性能好?——技术选型篇

2020 年了,Java 日志框架到底哪个性能好?——技术选型篇

大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了。 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4j 仅仅是接口,实现方面, logback 与...

MyEclipse运行tomcat提示严重错误 严重: Error starting endpoint java.lang.Exception: Socket

原因:tomcat要开启的端口被占用了!解决办法:如果你用的是8080端口,请按以下方式查找端口被哪个程序占用了:“开始”--“运行”—“cmd”—“netstat -ano”回车会出现以下结果:C:\Users\candy>netstat -ano活动连接 协议 本地地址 外部...

Java中interrupt的使用

Java中interrupt的使用

通常我们会有这样的需求,即停止一个线程。在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。具体原因可以参考Why is Thread.stop deprecated。 在本文...

WIN10下Java环境变量配置

WIN10下Java环境变量配置

首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html) 本文以安装 jdk-8u102-wi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。