可以将MVC模式的主要优势总结如下:
多个视图可以对应一个模型。这样有利于代码的重用。如果模型发生改变,也容易升级和维护。
由于模型和视图由Controller进行控制,并且模型和视图是分离的,因此,可以通过模型为视图提供不同的数据,如各种类型的数据库、XML、Excel等。
由于控制器负责访问视图和模型,因此,可以在控制器中加入权限验证来限制用户对敏感资源的访问。
在MVC模式中,3个层次是分离的,降低了各个层次之间的耦合性,这样有利于对系统的各层进行扩展[11]。
2.1.2 Struts2架构
Struts2是在Struts1和webwork技术的基础上进行合并的全新的框架,采用拦截器为核心。底层仍然使用servlet来处理数据。客户端提交表单,经Struts2自身拦截器和用户自定义的拦截器栈,将数据封装到Action对应的字段中然后进入该Action,用户在Action中执行相应的方法进行逻辑处理并返回一个字符串,然后Struts2根据配置文件定义好的跳转路径跳转到相应的页面或者下一个Action中[2]
Struts2的Action和执行方法提供多种方式的定义。
方式一:配置一个Action同时定义好该Action对应的method这样在JSP页面上直接写该Action就可以执行上述类中的方法。需要提交的表单:
<form action="Edit" method="post">
……
</form>
配置文件中需要配置如下:
<action name="Edit" class="com.UserAction" method="editUser">
<result name="success">editUser.jsp</result>
</action>
方式二:一个Action只配置一次,当页面需要执行该Action中的不同方法是只需要在书写Action名称的时候按照一定的规则即可。需要提交的表单如下:
<form action="UserAction!editUser" method="post">
……
</form>
配置文件中的配置
<action name="UserAction" class="com.test.UserAction">
<result name="success">editUser.jsp</result>
</action>
上述两种配置都可以实现在点击提交的时候将表单提交给UserAction中的editUser方法进行处理,不同的只是在配置的时候不一样。方式一中指明了需要提交的action名字,而在配置文件中可以找到,并且定义了相关的方法,所以可以直接转到UserAction中去执行[12]。而方式二则是使用了感叹号的方式进行配置,Struts2会根据用户的感叹号两边的内容到配置文件中去查找对应的action,并将表单提交给感叹号后面的方法去处理。两种方式的使用都各有优缺点,第一种方式更直接,只要写明了action名字,就可以直接到配置文件中找到相应的类和方法,当时需要对于每一个action都进行配置而第二种则更简洁清晰,一个Action只需要一个配置就可以了。因此在实际开发中第二种方式更加常见。