MVC设计模式

MVC

什么是mvc

MVC是一种概念,不是一种技术,是一种用与企业级开发的设计模式,MVC(Model,View,Controller)为模型-视图-控制器的简称,将程序明确的分为这三层,以用于把处理和输出分开

模型

数据处理和数据封装

数据处理:业务逻辑处理和数据库设计实现

数据封装:资料对象入DTO,POJO等

视图

与用户交互的模块,及HTML、jsp等

控制器

控制请求行为和响应数据

怎么使用MVC设计模式开发

Java应用

1.Struts1、SpringMVC、JavaServer Faces 使用Servlet控制器方式实现

1.Struts2 Filter分发器方式实现

在这里插入图片描述

简单实现

项目结构

在这里插入图片描述

  • pojo存放领域对象:M
  • controller存放控制器对象:C
  • service存放业务处理对象:M
  • dao存放数据持久对象:M
  • view存放视图对象:V
Servler控制器方式实现
代码
//urlPatterns 能控制访问的路径
@WebServlet(name = "controllerservlet",urlPatterns = {"/"})
public class controllerservlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        process(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        process(req, resp);
    }

   private void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //对uri进行区分分发
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        int i = requestURI.lastIndexOf("/");
        String substring = requestURI.substring(i - 1);
        //创建model
        //用过req.setAttribute("modle",model);传给对应servlet
        req.getRequestDispatcher(substring).forward(req,resp);
    }
}
避免用户直接访问JSP页面
  • 将页面放入WEB-INF目录
  • 利用filter过来页面
  • 在部署描述符中为JSP页面增加安全限制
Filter分发器方式实现

过滤器目标包括静态内容在内的所有网站,因此静态资源调用filterChain.doFilter进行放行

@WebFilter(filterName = "filtercontroller",urlPatterns = "/*")
public class FilterController implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        int i = requestURI.indexOf("/");
        String substring = requestURI.substring(i - 1);
        int i1 = substring.indexOf("/");
        String substring1 = substring.substring(0, i);
        String dispatcher = null;
        if(!"css".equals(substring1) && "js".equals(substring1)) {
            //创建model
            //用过req.setAttribute("modle",model);传给对应servlet
            dispatcher = "/controllerXXX";
        }
        if(dispatcher!=null){
            //转发对应servlet
            req.getRequestDispatcher(dispatcher).forward(req,servletResponse);
        }else{
            //放行静态资源如css、js等
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
    @Override
    public void destroy() {

    }
}

JavaScript实现

/** 模拟 Model, View, Controller */
var M = {}, V = {}, C = {};

/** Model 负责存放资料 */
M.data = "hello world";

/** View 负责将资料输出给用户 */
V.render = (M) => { alert(M.data); }

/** Controller 作为连接 M 和 V 的桥梁 */
C.handleOnload = () => { V.render(M); }

/** 在网页读取的时候呼叫 Controller */
window.onload = C.handleOnload;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值