javaWeb中MVC的编程思想示例
没有学习MVC之前我只写了一个Servlet类(Note_List.java),分层之后,我将这个类分成了5个类(NoteDao.java,,NoteDaoImpl.java,,NoteService.java,,NoteServiceImpl.java,,Note_List.java),MVC的基础知识我就不在此赘述,这里只是写一个MVC分层思想的示例,便于了解这种编程思想。
分层之前的Note_List.java
 public class Note_List extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doPost(req,resp);
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         req.setCharacterEncoding("UTF-8");
         resp.setCharacterEncoding("UTF-8");
         DBHelp db = new DBHelp();
         String sql = "select * from note";
         List<Map<String, String>> lmap = new ArrayList<Map<String, String>>();
         lmap = db.query(sql, null);
         List<Note> list = new ArrayList<Note>();
         if (lmap.size() > 0) {
             for (Map<String, String> map : lmap) {
                 Note note = new Note();
                 note.setTitle(map.get("title"));
                 note.setTags(map.get("tags"));
                 note.setAuthor(map.get("author"));
                 note.setContent(map.get("content"));
                 note.setCreatetime(map.get("createtime"));
                 list.add(note);
             }
             List<String> imgSrc = new ArrayList<String>();// 提取每个文档内容中的图片地址集合
             List<String> imgSrcFirst = new ArrayList<String>();// 提取每个文档内容中的第一个图片地址
             List<String> contentTxt = new ArrayList<String>();// 提取每个文档内容中的纯文本内容的前101字节
             for (int i = 0; i < lmap.size(); i++) {
                 String ct = lmap.get(i).get("content");
                 if (ct == null || ct.equals("")) {// 判断文档内容是否为空或者为空串
                     contentTxt.add(null);
                     imgSrcFirst.add(null);
                 } else {
                     String ctTxt = Get_ContentTxt_FormHTML.getContentTxt(ct);
                     if (ctTxt == null) {
                         contentTxt.add(null);
                     } else {
                         int l = ctTxt.getBytes().length;
                         if (l <= 100) {// 字符串不等于NULL,字节数肯定大于0
                             contentTxt.add(ctTxt);
                         } else {
                             contentTxt.add(ctTxt.substring(0, 100) + "...");
                         }
                         contentTxt.add(null);
                     }
                     imgSrc = Get_Image_FormHTML.getImageSrc(ct);
                     if (imgSrc.size() == 0) {
                         imgSrcFirst.add(null);
                     } else {
                         imgSrcFirst.add(imgSrc.get(0));
                     }
                 }
             }
             HttpSession sesImg = req.getSession();
             sesImg.setAttribute("img", imgSrcFirst);
             HttpSession sesConTxt = req.getSession();
             sesConTxt.setAttribute("txt", contentTxt);
             req.setAttribute("list", list);
             req.getRequestDispatcher("note_list_user.jsp").forward(req, resp);
         }
     }
 }
可见,没有分层的代码杂乱无章,复杂难懂,所以应该把项目分层:
分层后的5个类:(按顺序阅读)
第1个类:NoteDao.java 接口:
 public interface NoteDao {
     public List<NoteBean> queryAll();// 查询所有文档所有字段内容
     public List<String>contentAll();//提取所有文档中content字段内容
     public List<List<String>>contentImg();// 提取所有文档内容中的每一个文档的图片地址集合
     public List<String>contentImgFirst();// 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
     public List<String>contentTxt(); //提取每个文档内容中纯文本内容
     public List<String>contentTxtHundred();//提取每个文档内容中纯文本内容的前101字节
 }
第2个类:NoteDaoImpl.java 实现类:
 public class NoteDaoImpl implements NoteDao {
     DBUtil db = new DBUtil();
     // 查询所有文档所有字段内容
     @Override
     public List<NoteBean> queryAll() {
         String sql = "select * from note";
         List<Map<String, String>> lmap = new ArrayList<Map<String, String>>();
         lmap = db.query(sql, null);
         List<NoteBean> list = new ArrayList<NoteBean>();
         for (Map<String, String> map : lmap) {
             NoteBean nb = new NoteBean();
             nb.setAuthor(map.get("author"));
             nb.setContent(map.get("content"));
             nb.setCreatetime(map.get("createtime"));
             nb.setId(Integer.parseInt(map.get("id")));
             nb.setTags(map.get("tags"));
             nb.setTitle(map.get("title"));
             list.add(nb);
         }
         return list;
     }
     // 提取所有文档中content字段内容
     @Override
     public List<String> contentAll() {
         NoteDao nd = new NoteDaoImpl();
         List<NoteBean> lnb = nd.queryAll();
         List<String> content = new ArrayList<String>();
         if (lnb!=null&&lnb.size() > 0) {
             for (int i = 0; i < lnb.size(); i++) {
                 content.add(lnb.get(i).getContent());
             }
         }
         return content;
     }
     // 提取所有文档内容中的每一个文档的图片地址集合
     @Override
     public List<List<String>> contentImg() {
         NoteDao nd = new NoteDaoImpl();
         List<String> lnb = nd.contentAll();
         List<List<String>> imgSrc = new ArrayList<List<String>>();
         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档总内容的集合是否为null
             for (int i = 0; i < lnb.size(); i++) {
                 String ct = lnb.get(i);
                 if (ct == null || ct.equals("")) {// 判断每一个文档的内容是否为空
                     imgSrc.add(null);
                 } else {
                     imgSrc.add(Get_ContentImg_FormHTML.getImageSrc(ct));//此处调用了公共类
                 }
             }
         }
         return imgSrc;
     }
     // 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
     @Override
     public List<String> contentImgFirst() {
         NoteDao nd = new NoteDaoImpl();
         List<List<String>> lnb = nd.contentImg();
         List<String> imgSrcFirst = new ArrayList<String>();
         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档图片地址集合是否为空
             for (int i = 0; i < lnb.size(); i++) {
                 if (lnb.get(i)!=null&&lnb.get(i).size() > 0) {// 判断每一个文档中图片地址集合是否为空
                     imgSrcFirst.add(lnb.get(i).get(0));// 提取每一个文档中的图片地址集合中第一个图片
                 } else {
                     imgSrcFirst.add(null);
                 }
             }
         }
         return imgSrcFirst;
     }
     // 提取每个文档内容中纯文本内容
     @Override
     public List<String> contentTxt() {
         NoteDao nd = new NoteDaoImpl();
         List<String> lnb = nd.contentAll();
         List<String> ctTxt = new ArrayList<String>();// 提取每个文档内容中的纯文本内容
         if (lnb!=null&&lnb.size() > 0) {// 判断所有文档内容的集合是否为空
             for (int i = 0; i < lnb.size(); i++) {
                 String ctText = Get_ContentTxt_FormHTML.getContentTxt(lnb.get(i));//此处调用了公共类
                 if (ctText == null || ctText.equals("")) {// 判断每一个文档的内容是否为空
                     ctTxt.add(null);
                 } else {
                     ctTxt.add(ctText);
                 }
             }
         }
         return ctTxt;
     }
     // 提取每个文档内容中纯文本内容的前101字节
     @Override
     public List<String> contentTxtHundred() {
         NoteDao nd = new NoteDaoImpl();
         List<String> ctTxt = nd.contentTxt();
         List<String> ctTxtHundred = nd.contentTxt();
         if (ctTxt!=null&&ctTxt.size() > 0) {// 判断所有文档的纯内容的集合是否为空
             for (int i = 0; i < ctTxt.size(); i++) {
                 if (ctTxt.get(i) == null || ctTxt.get(i).equals("")) {// 判断每一个文档的内容是否为空
                     ctTxtHundred.add(null);
                 } else {
                     int l = ctTxt.get(i).getBytes().length;
                     if (l <= 100) {// 字符串不等于NULL,字节数肯定大于0,判断总字节数是否大于100
                         ctTxtHundred.add(ctTxt.get(i));
                     } else {
                         ctTxtHundred.add(ctTxt.get(i).substring(0, 100) + "...");
                     }
                 }
             }
         }
         return ctTxtHundred;
     }
 }
第3个类:NoteService.java 接口:
 public interface NoteService {
     public List<NoteBean> queryAll();// 查询所有文档所有字段内容
     public List<String>contentAll();//提取所有文档中content字段内容
     public List<List<String>>contentImg();// 提取所有文档内容中的每一个文档的图片地址集合
     public List<String>contentImgFirst();// 提取每一个文档内容中的图片地址集合中第一个图片地址的集合
     public List<String>contentTxt(); //提取每个文档内容中纯文本内容
     public List<String>contentTxtHundred();//提取每个文档内容中纯文本内容的前101字节
 }
第4个类:NoteServiceImpl.java 实现类:
 public class NoteServiceImpl implements NoteService{
     NoteDao nd=new NoteDaoImpl();
     @Override
     public List<NoteBean> queryAll() {
         List<NoteBean> nb=nd.queryAll();
         return nb;
     }
     @Override
     public List<String> contentAll() {
         List<String> ls=nd.contentAll();
         return ls;
     }
     @Override
     public List<List<String>> contentImg() {
         List<List<String>>lts=nd.contentImg();
         return lts;
     }
     @Override
     public List<String> contentImgFirst() {
         List<String>ls=nd.contentImgFirst();
         return ls;
     }
     @Override
     public List<String> contentTxt() {
         List<String>ls=nd.contentTxt();
         return ls;
     }
     @Override
     public List<String> contentTxtHundred() {
         List<String>ls=nd.contentTxtHundred();
         return ls;
     }
 }
第5个类:Note_List.java (Servlet类)
 public class Note_List extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doPost(req, resp);
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         req.setCharacterEncoding("UTF-8");
         resp.setCharacterEncoding("UTF-8");
         NoteService nd = new NoteServiceImpl();
         List<NoteBean> lnb = nd.queryAll();// 查询所有文档所有字段内容
         List<String> imgSrcFirst = nd.contentImgFirst();// 提取每个文档内容中的第一个图片地址的集合
         List<String> ctTxtHundred = nd.contentTxtHundred();// 提取每个文档内容中的纯文本内容的前101字节
         HttpSession sesImg = req.getSession();
         sesImg.setAttribute("img", imgSrcFirst);
         HttpSession sesConTxt = req.getSession();
         sesConTxt.setAttribute("txt", ctTxtHundred);
         req.setAttribute("list", lnb);
         req.getRequestDispatcher("note_list_user.jsp").forward(req, resp);
     }
 }
可见,分层后的代码,简明易懂,易于维护和代码复用,但是代码量增加了不少,对于程序的运行效率我觉得会有一定程度的损失。
javaWeb中MVC的编程思想示例的更多相关文章
- PHP中MVC的编程思想浅谈
		我相信这样的文章已经被写烂了,但是我今天还是愿意冒着风险把自己的经验与大家分享一下.纯属原创,我也没什么可保留,希望对新手有帮助,有说的什么不对的地方,欢迎大家伙吐槽. 什么是MVC? 简单的说就是将 ... 
- JDK 7中的函数式编程思想[转载]
		原文作者的观点是Lambda表达式一定会包含在JDK 7中,而全文也着重介绍了这方面的知识,作者认为函数式编程的概念也将出现在JDK 7中. Lambda表达式 Lambda表达式并不是什么新概念,自 ... 
- JavaWeb中MVC的使用--以管理系统举例
		开发环境:JavaSE1.7.JavaEE7.0.JSTL1.2.2.Web2.3.MySQL5.5.28 系统分析与功能设计: 本系统实现商品信息的管理,应包括以下几个功能: 商品信息列表:列出所有 ... 
- JavaWeb中过滤器Filter的使用示例
		https://github.com/YouXianMing/Java-Web-Study/tree/master/Servlet-Filter 过滤器示例基于以下流程 测试效果如下 web.xml配 ... 
- 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想
		K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ... 
- JavaWeb之Servlet、拦截器、监听器及编程思想
		本文包含的内容有: Servlet的理解 自定义Servlet.监听器和过滤器 三者的一点点编程设计思想 后续的学习 JavaWeb是Web开发的重要基础,对Servlet.监听器和过滤器等知识的掌握 ... 
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
		在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ... 
- Java中的泛型   --- Java 编程思想
		前言  我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ... 
- Java编程思想中关于闭包的一个例子
		Java编程思想中的一个例子,不是很理解使用闭包的必要性,如果不使用闭包,是不是有些任务就不能完成?继续探索. package InnerClass; interface Incrementable ... 
随机推荐
- SQL语句 拆分某些字段,一行变多行
			原文链接:http://bbs.csdn.net/topics/310219852 ------------------------------------- -- Author : liangCK ... 
- Shell 运算相关
			一.${str} 二.变量替换 三.3种计算字符串长度的效率比较 四.(())用法 五.expr 六.bc 4种连续整数求和效率 七.条件测试 八.字符串测试 
- 题目--统计一行文本的单词个数(PTA预习题)
			PTA预习题——统计一行文本的单词个数 7-1 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数.所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以 ... 
- 解决InetAddress.isReachable(timeout)在windows xp始终返回false的bug
			笔者最近在做产品,其中一个环节用到ping测试主机是否在线. 开发环境:Windows 7 64bit+JDK1.8 x64 以下是检测主机是否在线,开发环境中测试通过 public static b ... 
- express基础项目创建
			https://www.cnblogs.com/zhentaoo/p/6392248.html 
- mysql 函数介绍
			含义 一组预先编译好的SQL语句集合,可以理解成批处理语句 提高代码的重用性 简化操作 减少了编译次数并且减少了和数据库服务器的连接次数, 提高了效率 区别 : 存储过程:可以有0个返回,也可以有多个 ... 
- SNORT入侵检测系统
			SNORT入侵检测系统 YxWa · 2015/10/09 10:38 0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (ms ... 
- 关于PHP架构师进阶的一些思考
			相信大家都有感觉,就是当程序员写业务写了几年后,就会有想进阶的想法,技术方面当然就是架构师了,然后具体从哪些方面丰富自己才能个达到目的呢?大部分人可能会很迷茫,当然也包括我, 最近和很多大牛交流了一些 ... 
- python基础之Day17
			一.包 1.包 含有--init--.py的文件夹 是模块的一种形式 本质是一个文件夹(用来存放文件,包内所有的文件都是用来被导入的) import 包 包.名字 往包的init里加名字 导 ... 
- 服务管理之rsync
			目录 rsync 1. rsync简介 2. rsync特性 4. rsync命令 5. rsync+inotify rsync 1. rsync简介 rsync是linux系统下的数据镜像备份工具. ... 
