但是,在基于JSP/Servlet的Web应用中要使用MVC模式,需要解决这样一个问题,就是HTTP的底层是TCP/IP协议,而TCP/IP是一种无状态连接的协议,如果我们的模型发生了变化,就无从通知视图。而Struts采用了在“JSP规范v0.92”中就提出的MVC
Model 2,这是对MVC在Web上应用的修订版,它可以解决这个问题,见图1。
图1 MVC Model2(FromMalcolm Davis)
图2 Sturts工作机理(From Malcolm Davis)
Struts应用有3个主要部件:一个是使用Servlet实现的中心控制器(Controller
Servlet,由Struts提供的org.apache.action. ActionServlet类实现)及负责具体业务逻辑处理的Action(org.apache.action.Action的子类);一个是用于显示的JSP页面(viewer);另一个是用于封装系统状态的业务逻辑元件(Model)。Struts
的中心控制器接受所有来自客户端的请求,并根据系统的配置(struts-config.xml)路由HTTP请求到其它Action对象(开发者实现的org.apache.struts.
action.Action的子类)。在这些Action对象中会完成所有的业务操作,比如插入一条订单、修改一条记录等。处理完毕,由Struts的Controller
Servlet根据配置转向到适当的JSP页面,将处理结果显示给用户。从这里可以看出,在Struts中Controller
Servlet担任了重要的角色,它控制所有的程序流转,使MVC三个相对独立的部分协调工作,从而使系统的功能更加完善。从图1可见Struts是MVC
Model 2的一个典型应用。
在图3中你可以点击“Register with the MailReader
Demonstration Application”注册一个MailReader用户,或直接点击“Log
on to the MailReader Demonstration Application”,输入用户名和密码(示例程序已经预置了一个用户user/pass,配置在struts-example下的WEB-INF\database.xml文件中)登入。
分析
web.xml
在图3所示的页面中,点击“Log on to the MailReader
Demonstration Application”链接,进入/logon.jsp页面,输入预定义的用户名为user、密码为pass,然后提交就进入了图4的用户主页面。