MVC模式在Java Web中的应用

流行的Java Web应用框架基本上都实现了MVC模型,下面分别以JSFStruts为例介绍这些框架是如何实现MVC模型的。

JSF

JSP框架中提供了一个中心控制器FacesServlet完成所有的控制,这样所有的请求都可以提交这个Servlet。需要在web.xml中进行配置,典型的代码如下:

<context-param>

<param-name>javax.faces.CONFIG_FILES</param-name>

<param-value>/WEB-INF/faces-config.xml</param-value>

</context-param>

<servlet>

<servlet-name>Faces Servlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

<load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Faces Servlet</servlet-name>

<url-pattern>*.faces</url-pattern>

</servlet-mapping>

在代码中,url-pattern的值是“*.faces”意味着所有的以.faces结束的请求都会由中心控制器FacesServlet处理。

另外在使用JSF框架的时候还需要编写一个配置文件,在上面的配置中可以看到有一个参数,参数指向了一个配置文件faces-config.xml,这个文件是所有的JSF应用中必须提供的,在这个配置文件中可以描述文件之间的跳转关系,以及使用JavaBean等。下面是某个应用中的faces-config.xml中的部分代码:

<navigation-rule>

<from-view-id>/login.jsp</from-view-id>

<navigation-case>

<from-outcome>success</from-outcome>

<to-view-id>/ok.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>failure</from-outcome>

<to-view-id>/error.jsp</to-view-id>

</navigation-case>

</navigation-rule>

<managed-bean>

<managed-bean-name>userValidator</managed-bean-name>

<managed-bean-class>validator.UserValidator</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

</managed-bean>

其中<navigation-rule>表示一个跳转关系,<from-view-id>表示从哪个页面的发送的请求,<navigation-case>表示一个可能的跳转,<from-outcome>表示一种情况的条件,<to-view-id>表示这种条件下的跳转目标。<managed-bean>表示一个被容器自动加载的类,所以所有的JavaBean基本上都不需要实例化。

JSF框架中模型部分也是采用JavaBean实现,没有特殊的地方。

JSF框架中视图部分仍然使用JSP文件实现,只是为了与框架更好的结合,JSF提供了大量的自定义标签库来增强页面的功能。

在值的传递方面,JSF提供了表达式语言,通过表达式语言,直接把值从视图层传递给模型层,也可以把值从模型层传递给视图层。当然具体的传递过程仍然是通过控制层完成的。相当于把4种传递方式(从视图到控制层,从控制层到模型层,从模型层到控制层,从控制层到视图层)结合在一起了。

Struts

Struts中提供了一个中心控制器ActionServlet完成所有的控制,这样所有的请求都可以提交给这个Servlet。需要在web.xml中进行配置,典型的代码如下:

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

在代码中,url-pattern的值是“*.do”意味着所有的以.do结束的请求都会由中心控制器ActionServlet处理。对应用户的每个请求,都需要编写一个Action,与中心控制器一起完成控制功能。Action控制器中的代码与现在介绍的控制器中的代码基本相同。

另外在使用Struts框架的时候还需要编写一个配置文件,在上面的配置中可以看到有一个参数,参数指向了一个配置文件struts-config.xml,这个文件是所有的Struts应用中必须提供的,在这个配置文件中可以描述文件之间的跳转关系,以及请求路径和处理处理之间的关系。下面是某个应用中的struts-config.xml中的部分代码:

<struts-config>

<action-mappings>

<action path="/findAction" type="com.li.action.FindAction">

<forward name="success" path="/test.jsp" />

</action>

</action-mappings>

<message-resources parameter="ApplicationResources" />

</struts-config>

其中,每个action元素就表示一个请求,path属性指出请求的名字,例子中的名字对应一个以findAction.do为结束的请求。Type指出该请求由哪个Action处理,com.li.cation.FindAction就是要与中心控制器协同工作的Action。子元素<forward>表示Action执行完之后可能跳转到什么文件,这里的配置表明如果用户在程序中选择了success,则最后将跳转到test.jsp文件。后面的<message-resources>元素表示应用所使用的资源文件。

Structs中的模型部分JSF中的模型没有区别。

Struts中的视图部分仍然使用JSP文件实现,只是为了与框架更好的结合,Struts提供了大量的自定义标签库来增强页面的功能。

在值的传递方面,Struts提供了ActionForm机制,如果需要在视图层与控制层传值,需要编写ActionFormActionForm中的属性与要传递的表单元素是对应的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值