1.J2EE与MVC的关系是什么?什么是MVC?
J2EE主要是对MVC结构的具体实现。MVC结构指的是model,view,control。简单地说model就是对数据库的操作,view就是页面,control就是对业务逻辑的控制。J2EE里面有几大架构你必须了解,struts,spring,hibernate,IbatIs。其中struts是control,hibernate和ibatis是model,Spring则体现出面向对象编程思想的抽象和低耦合特性。至于页面,除了jsp和html也没有别的了。 MVC全名:Model View Controller,其中Model(模型层)、View(视图层)、Controller(控制层) 它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离,
常用模式: model1:jsp jdbc model2:mvc
三层架构和MVC的区别? 三层架构是一个经典的分层思想,将开发模式分为三层,每个人专注自己擅长模块即可 MVC是一种设计模式,其目的是让html和业务逻辑分开
2.MVC结构?
V(视图层)
C(控制层) M(模型层)
注:1)不能跨层调用; 2)只能由上往下进行调用;View -> Controller -> Model
3.自定义MVC工作原理图 *.action 调度 截取*(请求路径名) 处理具体业务逻辑 JSP -----------> Servlet(中央控制器)--------------------->Action(子控制器)--->Model(Dao、DB)
如图所示
4.MVC实现 案例1: 1)创建抽象类Action,定义抽象方法execute(处理具体逻辑) 2)创建HelloAction并继承抽象类Action,重写execute方法 3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类) 4)在ActionServlet中的init方法初始化Map集合 map.put('请求路径','逻辑处理Action类') 5)在ActionServlet中的doPost方法中处理请求
需要的jar包有:
代码如下:(我是先从AddAction->HelloAction->Action->ActionServlet来排版代码的)
代码语言:javascript复制package com.zking.mvc.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zking.mvc.framework.Action;
public class AddAction extends Action {
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Integer num1=Integer.parseInt(req.getParameter("num1"));
Integer num2=Integer.parseInt(req.getParameter("num2"));
int rs=num1 num2;
req.setAttribute("rs", rs);
req.getRequestDispatcher("rs.jsp").forward(req, resp);
}
}
代码语言:javascript复制package com.zking.mvc.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zking.mvc.framework.Action;
public class HelloAction extends Action {
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello,自定义MVC!");
}
}
代码语言:javascript复制package com.zking.mvc.framework;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 子控制器类,做具体的核心业务逻辑处理
* @author ActionServlet
*
*/
public abstract class Action {
public abstract void execute(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException;
}
代码语言:javascript复制package com.zking.mvc.framework;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zking.mvc.action.AddAction;
import com.zking.mvc.action.HelloAction;
/**
* ActionServlet:中央控制器,用于接收请求,分发请求,不做具体的核心业务逻辑处理
* @author ActionServlet
*
*/
public class ActionServlet extends HttpServlet {
//该集合用于定义请求路径与子控制器类Action之间的绑定关系
//例如:/helloAction ->HelloAction extends Action
private Map<String, Action> actions=new HashMap<>();
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
//初始化
actions.put("/helloAction", new HelloAction());
actions.put("/addAction", new AddAction());
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取请求路径*.action
String requestURL = req.getServletPath();
//2.获取请求路径名 * 例如:/helloAction.action -> /helloAction
int start=requestURL.indexOf("/");
int end = requestURL.lastIndexOf(".");
String requestName = requestURL.substring(start, end);
//3.根据请求路径名获取对应的子控制器类Action
Action action = actions.get(requestName);
//4.将请求委托给具体的子控制器类Action去处理
action.execute(req, resp);
}
}
效果图如下:(简单的写了一个例子来体验MVC的感觉)
好啦,今天就分享到这里啦!(敬请期待)