一、什么是MVC?
1、MVC全名
MVC全名:Model View Controller,其中Model模型层、View视图层、Controller控制层.
它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离.
2、常用模式
model1:jsp+jdbc
model2:mvc
主要特点:高内聚 低耦合
核心思想:各司其职
3、三层架构和MVC的区别
三层架构是一个经典的分层思想,将开发模式分为三层,每个人专注自己擅长模块即可。
MVC就不一样了,它是一种设计模式,其目的是让html和业务逻辑分开。
二、MVC结构
V(视图层)——> JSP/HTML/freemarker
C(控制层)——> Servlet/Action/Controller
M(模型层)——> entity、dao
entity:实体域模型(名词)
dao:过程域模型(动词) 经常访问数据库,所以是动词。
注:
1)不能跨层调用。
2)只能由上往下进行调用;View -> Controller -> Model。
三、自定义MVC工作原理图了解
请求路径:.action 调度 截取(请求路径名) 处理具体业务逻辑
JSP -----------> Servlet(中央控制器)--------------------->Action(子控制器)—>Model(Dao、DB)
四、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方法中处理请求。
6)创建AddAction继承抽象类Action,重写execute方式,处理逻辑后,返回结果。
7)在ActionServlet中的init方法中添加
map.put('/AddAction',new AddAction());
8)完成界面代码。
在这之前,我们来认识一下要用到的jar包:
我是比较提倡在熟悉代码流程的情况下,先把jar包弄好的。
我们从第一 步开始: 1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)。
打开eclipse开始敲代码:
//zouyan
public abstract class Action {
//创建抽象类Action,定义抽象方法execute(处理具体逻辑)
protected abstract String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}
然后看到第二步: 2)创建HelloAction并继承抽象类Action,重写execute方法。
//zouyan
public class HelloAction extends Action{
//创建HelloAction并继承抽象类Action,重写execute方法
@Override
protected String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("123");
return null;
}
}
接下来看到第三、四、五步:
3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)
4)在ActionServlet中的init方法初始化Map集合。
map.put(‘请求路径’,‘逻辑处理Action类’)
5)在ActionServlet中的doPost方法中处理请求。
//zouyan
public class ActionServlet extends HttpServlet{
//在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)
private Map<String, Action> map;
@Override
public void init() throws ServletException {
System.out.println("123");
//在ActionServlet中的init方法初始化Map集合
//map.put('请求路径','逻辑处理Action类')
map=new HashMap<String, Action>();
map.put("/HelloAction", new HelloAction());
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
//在ActionServlet中的doPost方法中处理请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求路径
String requestURI = req.getRequestURI();
int start = requestURI.lastIndexOf("/");
int end = requestURI.lastIndexOf(".action");
//截取请求路径
String actionName = requestURI.substring(start, end);
//通过截取路径中的action找到对应的自控制器
Action action = map.get(actionName);
//执行execute方法
action.execute(req, resp);
}
}
然后看到AddAction这边的代码: 6)创建AddAction继承抽象类Action,重写execute方式,处理逻辑后,返回结果。
//zouyan
public class AddAction extends Action{
@Override
protected String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
int num3=0;
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");
String calculate = req.getParameter("calculate");
switch (calculate) {
case "+":
num3 = Integer.parseInt(num1) + Integer.parseInt(num2);
break;
case "*":
num3 = Integer.parseInt(num1) * Integer.parseInt(num2);
break;
case "-":
num3 = Integer.parseInt(num1) - Integer.parseInt(num2);
break;
case "/":
num3 = Integer.parseInt(num1) / Integer.parseInt(num2);
break;
default:num3 = Integer.parseInt(num1) + Integer.parseInt(num2);
break;
}
System.out.println("num"+num3);
req.setAttribute("num3", num3);
req.getRequestDispatcher("result.jsp").forward(req, resp);
return null;
}
}
下一步就是在ActionServlet添加一段代码:7)在ActionServlet中的init方法中添加
map.put(’/AddAction’,new AddAction());
同时也不要忘了xml的配置:
//zouyan
//添加进去即可
<servlet>
<servlet-name>ActionServlet</servlet-name>
<servlet-class>com.framework.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ActionServlet</servlet-name>
<url-pattern>/AddAction.action</url-pattern>
</servlet-mapping>
最后就是界面上的各个代码:
index.jsp——add.jsp——result.jsp
界面显示效果如下:
计算结果确认无误之后,案例就成功完成啦。
五、总结
所有目录如下:
然后自定义mvc的加减乘除就可以实现了,此后可以更深入去了解这方面的学习。继续加油吧。
我是南橙,一个逐渐秃头的橙子Orange。