zoukankan      html  css  js  c++  java
  • javaWeb中MVC的编程思想示例

    没有学习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 }

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

  • 相关阅读:
    科普园地
    专家段 错误 新闻
    16进制转rgb
    图片截取0825
    域名的问题 图片显示不出来
    height cell0809
    添加银行卡
    DeviceDelegateHelper.m
    UUID
    MBProgressHUD 动画
  • 原文地址:https://www.cnblogs.com/nreg/p/9769892.html
Copyright © 2011-2022 走看看