标题：mvc2
简介
模型-视图-控制器 (MVC)
JSP 标记只解决了部分问题。我们还得处理验证、流程控制和更新应用程序的状态等问题。这正是 MVC 发挥作用的地方。MVC 通过将问题分为三个类别来帮助解决单一模块方法所遇到的某些问题：  mvcModel（模型）
模型包含应用程序的核心功能。模型封装了应用程序的状态。有时它包含的唯一功能就是状态。它对视图或控制器一无所知。
View（视图）
视图提供模型的表示。它是应用程序的外观。视图可以访问模型的读方法，但不能访问写方法。此外，它对控制器一无所知。当更改模型时，视图应得到通知。
Controller（控制器）
控制器对用户的输入作出反应。它创建并设置模型。 
MVC Model 2
Web 向软件开发人员提出了一些特有的挑战，最明显的就是客户机和服务器的无状态连接。这种无状态行为使得模型很难将更改通知视图。在 Web 上，为了发现对应用程序状态的修改，浏览器必须重新查询服务器。
MVC2模式首见于网络程序，起初因为Model无法通知到Web程序的界面而发明，这种模式采用Controller做中介者，一方面取得View的输入，然后交由Model层处理，之后再把返回的数据传递到View。
View接受用户输入,并传递到Controller.
Controller统一进行处理命令,交由Model处理具体的业务.
经过处理Model更新后,Controller会选一个View并把Model内容传递(request,session)给它(forward).
然后View进行显示.
这种模式相对MVC优势很明显，首先Model和View无需继承甚么东西，其次Model和View无需了解对方的存在，只需准备相应的接口而已；缺点是Controller层变得相对复杂了。
代码
控制类:
package com.sitinspring;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/** *//**
* 控制类
*/
public class Mvc2Ctrl {
private Mvc2View view;
private Mvc2Model model;
public Mvc2Ctrl() {
view = new Mvc2View();
model = new Mvc2Model();
handleEvents();
}
// 处理事件响应
private void handleEvents() {
addCloseLintener();
addButtonListener();
addButtonListener2();
}
// 窗体关闭事件相应
private void addCloseLintener() {
view.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("Exit MVC2");
System.exit(0);
}
});
}
private void addButtonListener() {
view.getButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
view.getLabel().setText(model.getText());
}
});
}
private void addButtonListener2() {
view.getButton2().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
view.getLabel2().setText(model.getText2());
}
});
}
}
视图类:
package com.sitinspring;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/** *//**
* 视图类(View)
*/
public class Mvc2View extends JFrame {
private static final long serialVersionUID = 621145935910133202L;
private JButton button;
private JLabel label;
private JButton button2;
private JLabel label2;
public Mvc2View() {
locateView(300, 200);
this.setTitle("MVC2 Program");
setupComponents();
this.setVisible(true);
}
// 定位程序在屏幕正中并设置程序大小
private void locateView(int width, int height) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(width, height);
this.setLocation(screenSize.width / 2 - width / 2, screenSize.height
/ 2 - height / 2);
}
// 初始化内部组件
private void setupComponents() {
button = new JButton("点击响应事件1");
label = new JLabel(" 等待事件响应1");
button2 = new JButton("点击响应事件2");
label2 = new JLabel(" 等待事件响应2");
setLayout(new GridLayout(2, 2));
add(button);
add(label);
add(button2);
add(label2);
}
public JButton getButton() {
return button;
}
public JButton getButton2() {
return button2;
}
public JLabel getLabel() {
return label;
}
public JLabel getLabel2() {
return label2;
}
}
模块类:
package com.sitinspring;
/** *//**
* 模块类
*/
public class Mvc2Model{
public String getText(){
return " 事件1响应完毕";
}
public String getText2(){
return " 事件2响应完毕";
}
}