文章目录

  • 三层MVC开发模式架构
  • 一.先建立目标类对象:Curriculum。
  • 三,过滤层Filter
  • 四.增加商品
    • 4.1 增加前端adds.jsp
    • 4.2 增加的servlet服务
  • 五.删除课程
  • 五.修改操作
  • 六.修改课程
  • 实验总结

三层MVC开发模式架构

使用自己设计的商城实体类创建对应的数据库表和类完成增删改查管理模块。
(1)不使用MVC设计模式完成增删改查管理功能。
(2)使用MVC设计模式完成增删改查管理功能。
(3)对比(1)和(2)理解使用MVC模式的优势。

一.先建立目标类对象:Curriculum。

属性对象为:ID,curriculumName,price,introduction。

二.建立DAO层,作用于对于Mysql数据库的增删改查的操作。
对于servlet与数据库操作CURD之间写了一个FService,便于代码的维护和排除管理。具体代码如下:
CurriculumDao代码如下:

    public List<Curriculum> GetAllCurriculum() throws SQLException {QueryRunner r=new QueryRunner(DataSourceUtils.getDataSource());String sql="select * from curriculum";return r.query(sql,new BeanListHandler<Curriculum>(Curriculum.class));}public Curriculum selectTypeNameByID(int feid) throws SQLException {QueryRunner r=new QueryRunner(DataSourceUtils.getDataSource());String sql="select * from curriculum where id=?";return r.query(sql,new BeanHandler<Curriculum>(Curriculum.class),feid);}public Curriculum select(int id) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select * from curriculum where id = ?";return r.query(sql, new BeanHandler<Curriculum>(Curriculum.class),id);}public void insert(Curriculum f) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "insert into curriculum(curriculumName,price,introduction) values(?,?,?)";r.update(sql,f.getCurriculumName(),f.getPrice(),f.getIntroduction());}public void update(Curriculum f) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "update curriculum set curriculumName=?,price=?,introduction=? where id = ?";r.update(sql,f.getCurriculumName(),f.getPrice(),f.getIntroduction(),f.getId());}public void delete(int id) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "delete from curriculum where id = ?";r.update(sql,id);}public static void main(String[] args) throws SQLException {CurriculumDao td=new CurriculumDao();List<Curriculum> list=td.GetAllCurriculum();//System.out.println("size="+list.size());}

FService代码如下:

 CurriculumDao tDao=new CurriculumDao();public List<Curriculum> GetAllCurriculum(){List<Curriculum> list=null;try {list=tDao.GetAllCurriculum();} catch (SQLException e) {e.printStackTrace();}return list;}public Curriculum selectTypeNameByID(int feid){Curriculum type=null;try {type=tDao.selectTypeNameByID(feid);} catch (SQLException e) {e.printStackTrace();}return type;}public Curriculum select(int id) {Curriculum f=null;try {f = tDao.select(id);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return f;}public void insert(Curriculum f) {try {tDao.insert(f);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void update(Curriculum f) {try {tDao.update(f);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public boolean delete(int id) {try {tDao.delete(id);return true;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}

三,过滤层Filter

过滤器是指“过滤器”,它是客户端和服务器资源文件之间的过滤器。
在访问资源文件之前,通过一系列过滤器对请求进行修改和判断,对不符合规则的请求进行拦截或中途修改;还可以过滤、拦截或修改响应。
作用:用来过滤网站的数据。
处理中文乱码
登录验证等等

具体代码如下:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws ServletException, IOException {req.setCharacterEncoding("utf-8");//解决请求过程的乱码chain.doFilter(req, resp);}

需要注意,我们配置注册url映射写一下任何请求访问都需要经过过滤层,这样就实现了对于中文字符的过滤与转码。

1.@WebFilter(filterName = "EncodeFilter",urlPatterns = "/*")

四.增加商品

写一个form表单,写三个输入框,获取到课程名称,课程价格,课程介绍。
传值到映射路径为Curriculum_add的servlet中。

4.1 增加前端adds.jsp

<form class="form-inline" method="post" action="/MVC_war_exploded/Curriculum_add">课程名称:<input type="text" class="form-control" id="input_curriculumName" name="curriculumName" placeholder="名称" required="required" style="width: 60% "><br/>课程价格:<input type="text" class="form-control" id="input_price" name="price" placeholder="价格" required="required" style="width: 60%"><br/>课程介绍:<input type="text" class="form-control" id="input_introduction" name="introduction" placeholder="课程" required="required" style="width: 60%"><br/>
<input type="submit" class="btn btn-warning" value="添加课程教程"/>

4.2 增加的servlet服务

获取到前端发来的带参请求,传递给fService里然后调用Dao层,实现了对于数据项Mysql里添加数据的操作。

  1. private FService fService = new FService();
  2. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  3.    String curriculumName = request.getParameter("curriculumName");
    
  4.    String price = request.getParameter("price");
    
  5.    String introduction = request.getParameter("introduction");
    
  6.    double price1=Double.parseDouble(price);
    
  7.    fService.insert(new Curriculum(curriculumName,price1,introduction));
    
  8.    request.getRequestDispatcher("/Curriculum_list").forward(request, response);
    
  9. }
  10. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11.    doGet(request, response);
    
  12. }
    Adds.jsp->添加我们的目标商品:

    发起请求后处理跳转结果页面:

五.删除课程

删除商品的按钮设计在list前端展示所有课程页面里。

1.<a class="btn btn-danger" href="/MVC_war_exploded/Curriculum_delete?id=${f.id }">删除</a>

当发生点击事件,向映射路径为Curriculum_delete的servlet发起了一个带参请求。
Curriculum_delete的servlet代码如下:
由FService调用DAO层执行删除sql语句的操作:

  private FService fService = new FService();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int id = Integer.parseInt(request.getParameter("id"));fService.delete(id);request.getRequestDispatcher("/Curriculum_list").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}

删除执行结果:

五.修改操作

修改和删除大致相同,在list页面里加一个修改的按钮如下:

<a class="btn btn-primary" href="/MVC_war_exploded/Curriculum_editshow?id=${f.id }">修改</a>

当发生点击事件,向映射路径为Curriculum_editshow的servlet发起了一个带参请求。

        int id = Integer.parseInt(request.getParameter("id"));fService.delete(id);request.getRequestDispatcher("/Curriculum_list").forward(request, response);

删除之后:

六.修改课程

修改课程作为一个独立的页面,使用一个form搜集需要改的目标值,然后指向路径为Curriculum_edit的servlet执行修改操作:

   <form class="form-horizontal" action="/MVC_war_exploded/Curriculum_edit" method="post"><input type="hidden" name="id" value="${f.id }"><div class="form-group"><div class="col-sm-6">课程名称:<input type="text" class="form-control" id="input_curriculumName" name="curriculumName" value="${f.curriculumName }" required="required"><br/>课程价格:<input type="text" class="form-control" id="input_price" name="price" value="${f.price }" required="required"><br/>课程介绍:<input type="text" class="form-control" id="input_introduction" name="introduction" value="${f.introduction }" required="required"></div></div><div class="form-group"><div class="col-sm-offset-1 col-sm-10"><button type="submit" class="btn btn-success">提交修改</button></div></div></form>

Curriculum_edit服务:

        Curriculum t = new Curriculum();try {BeanUtils.copyProperties(t, request.getParameterMap());} catch (Exception e) {e.printStackTrace();}fService.update(t);//更新修改的内容request.getRequestDispatcher("/Curriculum_list").forward(request, response);

七.查询全部
前端JSP如下:

        <c:forEach items="${list }" var="f"><tr><td><p>${f.id }</p></td><td><p>${f.curriculumName }</p></td><td><p>${f.price }</p></td><td><p>${f.introduction }</p></td><td><a class="btn btn-primary" href="/MVC_war_exploded/Curriculum_editshow?id=${f.id }">修改</a><a class="btn btn-danger" href="/MVC_war_exploded/Curriculum_delete?id=${f.id }">删除</a></td></tr></c:forEach>

Servlet代码如下:

        List<Curriculum> list= fService.GetAllCurriculum();request.setAttribute("list", list);this.getServletContext().removeAttribute("Curriculum");this.getServletContext().setAttribute("Curriculum",list);request.getRequestDispatcher("/Curriculum_list.jsp").forward(request, response);

实验总结

对比(1)和(2)理解使用MVC模式的优势:分工明确,便于维护,重用性高,多个视图共享一个模型,有利于分工合作,可以加快开发进度。
MVC架构图如下:

实验过程中没有遇到较大的问题,在使用Maven的时候遇到过包与sql版本不兼容的问题,通过更换本地包解决了此问题。
本次实验让我对MVC三层架构有了非常深刻的理解,对后面非原生的web开发过程中的推动作用很大。

JavaWeb之MVC开发模式之商品实例CURD详解相关推荐

  1. Java设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

  2. spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  3. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  4. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  5. Java设计模式之五大创建型模式(附实例和详解)

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

  6. 方立勋_30天掌握JavaWeb_JavaBean、mvc开发模式、el表达式、jstl标签

    什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法暴露 ...

  7. Re:PyQt5 从零开始的MVC开发模式规划

    前言 初次接触较大型的软件开发项目,找了几天可参照的项目无果,于是自己模仿django中的结构来做一个MVC开发模式规划,也有点闭门造车的意思,如有其他好的办法分享,下方评论见. (本篇文章从零开始, ...

  8. 学习笔记 --- 工厂、单体、适配器、策略、观察者、MVC设计模式及ASP.NET MVC开发模式、关闭缓存的方法...

    关于工厂.单体.适配器.策略.观察者没啥好说的, 代码中有说明 //DesignPattern.cs View Code using System; using System.Collections. ...

  9. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记

    今日内容 1. JSP:1. 指令2. 注释3. 内置对象2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令* 作用:用于配置JSP页面,导入资源文件* ...

最新文章

  1. 如果不被吐槽,那我还是程序员吗
  2. Lync Server 2013企业版部署系列之五:前端服务器软件准备
  3. .net core实践系列之短信服务-架构设计
  4. list 置顶元素_java集合指定元素排序:最前,按照提供的顺序排序?求算法
  5. git仓库的基本用法
  6. figcaption html5,HTML5 figcaption 标签
  7. Oracle(三)多行函数
  8. 遥感导论网课_甘肃农业大学2019年地理信息科学专业专升本招生 专业课考试大纲...
  9. Linux基础教程之系统管理篇系统部署
  10. hadoop大数据平台_Hadoop之外的3个大数据平台
  11. QQ快速登录的实现原理
  12. 【杂谈】有三AI所有重要的公开微信群最新汇总,欢迎加入
  13. 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc
  14. 华为 、锐捷、新华三、睿易网络设备怎么选
  15. 矩阵的定义——MATLAB
  16. 解决autocad闪退
  17. 修改android.policy.jar全屏
  18. python 延时sleep
  19. java模拟而一个电话本操作
  20. Chrome浏览器开发新截图工具,安全浏览器截图方法

热门文章

  1. Wps和word共存
  2. 【数据结构】二叉树的前中后序遍历
  3. Vulkan_PCSS软阴影
  4. 水星nw315r服务器无响应,水星MW315R路由器的上网设置教程
  5. 鸿蒙会和安卓一样吃内存吗,鸿蒙系统到底能不能替代安卓?
  6. SpringMVC知识整理
  7. Fluent UDF中调用变量的梯度及其注意点
  8. Android dialog 弹出时,保持 隐藏 navigation bar(虚拟栏)
  9. 中兴新支点操作系统信创全栈国产化解决方案
  10. linux桌面天气,安装和使用Meteo以在Linux系统上获得快速天气预报