1.MVC(Model View Controller)
MVC是什么?
是一种软件架构思想、其核心思想是,要将数据处理与数据展现分开,按照这种思想,可以将一个软件划分成三种不同类型的模块,分别是模型、视图和控制器。
模型负责数据处理(业务逻辑)、视图负责数据展现(表示逻辑)、控制器负责协调模型和视图(请求要先发送给控制器,由控制器选择对应的模型来处理;模型返回的处理结果也要先发送给控制器,由控制器选择对应的视图来展现)。
如何使用MVC来开发一个web应用?
使用Servlet来充当控制器,使用jsp充当视图,使用java类来充当模型。
三者的关系如下图所示:
MVC的优点
a.方便代码的维护。
比如,视图发生变化(修改了视图的代码或者增加了新的视图,不影响模型)。
b.方便测试。
比如,将代码写在java类里面,可以直接测试,不需要部署整个应用。
c.方便分工协作。
2.实现一个简单的MVC框架(smartmvc)
(1)SmartMVC是什么?
是一个简单的MVC框架,实现了一个通用的控制器,开发人员利用该框架,只需要写业务逻辑和表示逻辑。
(2)架构
(3)各个组件的关系
步骤:
- step1.新建一个maven工程(smartmvc-exec)。
- step2.导包。(dom4j)
- step3.添加login.jsp(/WEB-INF/login.jsp)。
jsp文件添加在WEB-INF文件夹内,用户不可以字节访问,需通过servlet访问 - step4.添加@RequestMapping注解(base.common包下)。
//告诉JVM注解的存在时间到运行期
@Retention(value=RetentionPolicy.RUNTIME)
public @interface RequestMapping {
//声明一个属性,注意要用public,而且后面由小括号。用来储存请求路径
public String value();
}
- step5.添加LoginController(controller包下)。
public class LoginController {
@RequestMapping("/toLogin.do")
public String toLogin() {
System.out.println("LoginController.toLogin()");
return "login";
}
@RequestMapping("/login.do")
public String login(HttpServletRequest request) {
System.out.println("LoginController.login()");
String username = request.getParameter("username");
String password = request.getParameter("password");
if("tom".equals(username)&& "1234".equals(password)) {
System.out.println("正确,重定向成功页面");
/*
* 如果视图名是以redirect:开头,表示重定向
*/
//因为浏览器无法直接访问jsp文件,所以无法直接重定向,这里返回一个请求地址,由下面的方法处理
return "redirect:toSuccess.do";
}else {
request.setAttribute("login_failed", "用户名或密码错误");
System.out.println("错误,转发登录页面");
return "login";
}
}
@RequestMapping("/toSuccess.do")
public String toSuccess(){
return "success";//视图名
}
- step6.添加smartmvc.xml(配置有处理器的类名)。
这个是用来给servlet使用反射实例化处理器(处理业务逻辑的类)
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean