文章目录
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;