首页 > 编程语言 >JavaWeb之MVC开发模式之商品实例CURD详解

JavaWeb之MVC开发模式之商品实例CURD详解

时间:2022-10-18 12:02:06浏览次数:53  
标签:JavaWeb list Curriculum request public CURD MVC new id

三层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 block
            e.printStackTrace();
        }
        return f;
    }
    public void insert(Curriculum f) {
        try {
            tDao.insert(f);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void update(Curriculum f) {
        try {
            tDao.update(f);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public boolean delete(int id) {
        try {
            tDao.delete(id);
            return true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.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 rel="nofollow" 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 rel="nofollow" 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 rel="nofollow" class="btn btn-primary" href="/MVC_war_exploded/Curriculum_editshow?id=${f.id }">修改</a>
                    <a rel="nofollow" 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,list,Curriculum,request,public,CURD,MVC,new,id
From: https://blog.51cto.com/u_15568258/5765717

相关文章

  • mysql事务隔离级别及MVCC 原理
    一、事务的隔离级别为了保证事务与事务之间的修改操作不会互相影响,innodb希望不同的事务是隔离的执行的,互不干扰。两个并发的事务在执行过程中有读读、读写(一个事务在读......
  • MVCC版本控制
    MVCC被为多版本并发控制在MySQL中用于实现RR级别与RC级别利用了undolog日志版本链。当查询的时候会生成一个事务id和readview的事务id数组,readview的数组放的是当前未提......
  • SpringMVC的常用注解
    springmvc常用注解1.@controller注解是否是控制器类2.@requestMapping请求路径的注解​在类和方法上都可以用​可以设置请求路径也可以设置请求方法@Request......
  • SpringMVC常用注解
    springmvc常用注解1.@controller注解是否是控制器类2.@requestMapping请求路径的注解在类和方法上都可以用可以设置请求路径也可以设置请求方法@RequestMapping("/Use......
  • javaweb实操之session'
    什么是session服务器会给一个用户(浏览器)创建一个session对象一个session独占一个浏览器,只要浏览没有关闭,这个session就存在用户登录之后,整个网站都可以访问->保存用......
  • Spring Boot、Spring MVC 和 Spring 比较
    SpringBoot、SpringMVC和Spring比较spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将......
  • 13.0 SpringMVC父子容器
    一、Spring整合SpringMVCSpring整合SpringMVC唯一的体现就是父子容器:、通常我们会设置父容器(Spring)管理Service、Dao层的Bean,子容器(SpringMVC)管理Controller的Bea......
  • SpringMVC(五):重定向和请求转发
    我们都知道通过servlet跳转到具体的视图有两种方式,一种方式是重定向,一种方式请求转发。那么在SpringMVC中视图解析后跳转是哪种方式实现的呢?很明显在我们发起请求时地址栏......
  • javaweb
    <td><astyle="color:blue"href='showall.jsp?name=<%=(d.getName())%>'><%=(d.getName())%></a></td>                   ......
  • SpringMVC(四):RequestMapping
    现在我们来学习一下RequestMapping注解。RequestMapping注解用来将url映射到一个控制类(Controller类)或一个特定处理的方法上。一、RequestMapping使用的位置1.方法上直......