Struts MVC 框架 (让你一步步成为高手)

web应用的分层

交互层,表现数据,收集数据,也就是视图层,接受请求,通过处理层完成相应的响应。(V,C)

处理层,完成数据的处理,也就是业务层(M)。

MVC设计模式(应用观察者模式的框架模式)

M model,模型,操作数据的业务处理层。

V view,示图,采集和显示数据,为业务层提供数据,表现业务层输出的数据,只关心数据的类型,不管新数据的来源。

C ctrl,控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图。

MVC框架的实现模型

模型一:

JSP+JavaBean,JSP既充当控制,又充当视图,以页面为核心,JSP使用jsp:useBean,他不能够实现不同的页面,显示不同的数据,需要借助于中间类来调用JavaBean的方法才能实现。

模型二:

JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。

StrutsMVC框架

Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。

Struts提供了一些组件使用MVC开发应用程序:

Model:Struts没有提供model类。这个商业逻辑必须由Web应用程序的开发者以JavaBean或EJB的形式提供

View:Struts提供了action form创建form bean, 用于在controller和view间传输数据。此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。

Controller:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Action form,然后调用一个Action控制器。Action控制器中提供了model的逻辑接口。

写一个基于Struts的web应用

1,创建一个符合标准的web应用的结构,也就是一个有WEB-INF文件夹的应用文件夹,在应用中需要使用到Struts的一些jar文件,要放到WEB-INF的lib文件夹下,这些jar文件都在struts的zip文件中的/struts-1.2.9-bin/lib下还有struts-1.2.9-bin/contrib/struts-el/lib下的standard.jar、jstl.jar和struts-el.jar。

2,在web.xml中配置Struts的核心控制器ActionServlet,并指明Struts的配置文件的所在位置WEB-INF下,在struts的文件中有一个样板的web.xml文件,使用这个web.xml文件来部署应用就可以了 ,这个样板在struts的zip文件中的struts-1.2.9-src.zip文件中的web/examples/WEB-INF/web.xml就是样板文件。部署应用看struts是否发布成功。

<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>

</servlet>

<servlet-mapping>

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

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

</servlet-mapping>

3,写jsp页面和业务,实体,和自定义控制器类Action,自定义Action是要继承于Action类

例:

import org.apache.struts.action.*;

import javax.servlet.http.*;

public class LoginAction extends Action{

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request,HttpServletResponse response) throws Exception

{

if(request.getParameter("username").equals("admin")&&

request.getParameter("passwd").equals("123")){

return mapping.findForward("success");

}

return mapping.findForward("fail");

}

}

在struts-config.xml文件中的配置,解析配置文件中,配置文件的action标签就会被映射成ActionMapping对象。

<struts-config>

<form-beans>

<form-bean name="xxx" type="ActionForm的类全名">

<form-bean name="LoginForm" type="basic.LoginForm">

</form-beans>

<action-mappings>

<action path="/basic/login"  type="alan.struts.basic.LoginAction"

name="xxx" scope="request|sessio(默认值)">

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

<forward name="fail" path="/basic/fail.jsp" redirect="false"(重定向,默认false)/>

</action>

<action path="action的路径,在form的action中写的那个路径" type="action的类全名">

<forward name="在自定义的Action中使用的findForward方法的参数" path="跳转页面的路径"/>

<forward name="xxx" path="xxx/xxx.jsp"/>

</action>

</action-mappings>

</struts-config>

ActionForm是可以自动将表单中的数据封装成对象,当然,一个自定义ActionForm也是要遵守Struts规范的,也就是要继承于ActionForm,并在以上的struts-config.xml进行配置。

ServletController(ActionServlet和自定义的Action),配置Ctrler需要配置struts-config.xml,通过客户端form的action来查找调用相应的action,自定义action中的mapping对应的是配置文件中的forward标签,通过forward的path属性来跳转到相应的路径。

基于struts的web应用的开发步骤

1,对应用环境进行配置

2,创建web应用的结构,需要将struts应用的jar文件进行部署。

3,在web服务器部署struts

4,配置struts-config.xml文件,配置Actoin

5,写自定义Action,实体,以及业务类

ActionForm的校验

<struts-config>

<form-beans>

<form-bean name="xxx" type="ActionForm的类全名">

<form-bean name="LoginForm" type="basic.LoginForm">

<!--配置ActionForm类-->

</form-beans>

<action-mappings>

<action path="/basic/login"  type="alan.struts.basic.LoginAction"

name="xxx" scope="request|sessio(默认值)Form的保存空间">

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

<forward name="fail" path="/basic/fail.jsp" redirect="false"(重定向,默认false)/>

</action>

<action-mappings>

</struts-config>

ActionForm的校验是struts提供的一项类似于Javascript的表单校验的功能。他可以验证用户填写的表单数据的正确性。

ActionForm的校验,如果表单中的数据符不符合规定格式的要求,ActionForm的validate()方法会返回一个ActionError对象,ActionError对象中封装了一个或多个应用发现的校验错误,每一个错误有一个ActionMessage对象表达,我们可以通过判断这个ActionError的对象是否为空,如果为空那么表单的数据符合格式要求,不为空就是表单项中就有不符合格式要求的项。

struts标签

在使用struts标签的JSP页面中要先加上以下的标签库的引用

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<bean:message key="errors.username.required">这个标签可以从指定的资源文件中根据指定的key值来取得可以对应的值,但是需要在struts-config.xml中进行配置。

配置资源,这些资源可以在ActionMessage中使用,也就是在构造ActionMessage是指定资源文件中的key这样,在发现校验错误时,就可以先在资源文件中指定的key的值了。可以使用struts的<html:errors>

<html:message>、<bean:message>标签都可以显示指定错误的消息。

<struts-config>

.....

<message-resources parameter="alan.struts.message.MessageResource" />

<!--使用message标签时配置资源文件的位置-->

</struts-config>

struts会自动的判断返回ActionError是否为空,如果是空可以自动的转向指定页面,也可以强制不进行校验,虽然可以在Form中不去覆盖validate()方法,但是那样是不可取的。要实现上面提得到功能还需要在struts-config中配置。

<action   path="/basic-validate/login"  type="alan.struts.basic.LoginAction"

name="loginValidateForm" scope="request"

validate="true"  input="/basic-validate/login.jsp">

<!--scope可以指定Form的存放空间,默认为sessoin-->

<!--action标签中配置validate="false"可以不进行校验,input是指定校验出错跳转的页面-->

<forward name="success" path="/basic-validate/success.jsp"/>

<forward name="fail" path="/basic-validate/fail.jsp"/>

</action>

<html:message id="error"><!--id属性是ActionMessage存放在空间中的key-->

<h1>${error}</h1>

</html:message>

<html:errors>标签只会原样输出在ActionErrors中ActionMessage对应资源文件中对应的值。

<html:messages>标签还可以对输出在ActionError中ActionMessage对应资源文件中对应的值作一些显示效果的修改。

<bean:message key="xxx.xxx">标签只会取资源文件中指定key所对应的值,使用bean:message标签可以实现国际化。

struts的html标签

struts的html标签的使用类似于html标签,但是少有区别,指定类型的方式变成使用不同的标签,这样会绑定struts,所以旨在需要时使用。

<html:form method="post" action="/basic-validate/login">

<!--

struts的html标签中的action可以只写转到的actionpath,struts会在解析是自动添加需 要的部分

-->

<html:text property="userName" />

<html:password property="password" redisplay="false"/>

<!--redisplay="false"不进行回写,只有html:password标签可用-->

<html:radio property="hibbos">

<html:submit value="login" />

</html:form>

Struts预定义的Action类

注意:在使用继承Struts预定义的Action类,一定不要覆盖execute方法,否则会导致无法调用自定义Action相应方法。

DispatchAction类(org.apache.struts.actions.DispatchAction)

DispatchAction类是Action类的子类,他提供了有实现的execute方法。

我们写的自定义Action类,可以继承DispatchAction类,但不要覆盖execute方法,可以在自定义类中写反回值和参数表都与execute方法相同的方法,可以通过在struts-congfig.xml中为这个action的配置中添加一个参数,来判断调哪一个方法,实际上DispatchAction类就是通过反射机制,通过form中参数调用了自定义Action中的方法,当然这些方法的定义要符合规范,使用继承DispatchAction类的自定义的Action类,也就会共享同一的Action路径。

注意:使用继承DispatchAction类的自定义的Action,只会匹配一个action路径,只能共享一个ActionForm,如果加上校验,会产生form表单的参数不一致的情况,会导致校验无法通过。

例:

public class MyAction extends DispatchAction{

ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ,ActionMapping mapping) throws Exception

{

return mapping.findForward("sucess")

}

}

<action path="/add"  type="MyAction" parameter="methodName">

<!--parameter属性是和form中隐藏域的名字相对应的-->

<forward name="sucess" path="/sucess.jsp"/>

</action>

<from action="add.do" method="post">

<input type="hidden" name="methodName" value="add"/>

<!--

使用隐藏域为struts传递要调用自定义Action中方法的方法名,是通过与struts-config.xml

中action标签中的parameter和name属性相对应来获取隐藏域的value。

-->

<input type="submit" value="submit"/>

</from>

MappingDispatchAction类(org.apache.struts.actions.MappingDispatchAction)

MappingDispatchAction类是DispatchAction的子类,他和DispatchAction不同点就是可以去匹配多个action路径,这样也就是结决了共用ActoinForm的校验问题了,多个Action的路径使用同一的自定义Action类,这样就不用共享同一个ActionForm,也就不会有校验问题了。

例:

public class MyAction extends MappingDispatchAction{

ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception

{

return mapping.findForward("add")

}

ActionForward del(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception

{

return mapping.findForward("del")

}

}

<action path="/add"  type="MyAction" parameter="add">

<!--parameter属性是指定调用方法的名字-->

<forward name="add" path="/add.jsp"/>

</action>

<action path="/del"  type="MyAction" parameter="del">

<forward name="del" path="/del.jsp"/>

</action>

在JSP页面中也不用在使用隐藏域传递参数,直接在form中的action中就可以直接使用xxx.do匹配了。

<form action="add.do" method="post">

<input type="submit" value="submit"/>

</form>

<form action="del.do" method="post">

<input type="submit" value="submit"/>

</form>

LookupDispatchAction(org.apache.struts.actions.LookupDispatchAction)

LookupDispatchAction类也是DispatchAction类的子类,他所实现的功能是解决一个表单多种提交问题的

,他是通过使用资源文件,用submit按钮的value来作为资源文件中的key所对应的值,通过这个值来找到对用的key,在使用这个key来获得指定Map中所对应的值,这个值就是要调用的方法名。

submit的value---->MessageResource.properties中的key----->Map中key对相应的值---->action

例:

<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<form method="post" action="${pageContext.request.contextPath}/lookup/adddel.do">

<input type="submit" value="<bean:message key="button.add" />" name="methodName">

<!--注意name="methodName"是和strut-config.xml中action标签中的parameter属性-->

<input type="submit" value="<bean:message key="button.delete" />" name="methodName">

</form>

MessageResource.properties

button.add=add new user

button.delete=delete user

注意:在继承LookupDispatchAction时,要覆盖getKeyMethodMap()方法,并定义Map,向Map中放入指定的键值对。

public class AddDelLookupDispatchAction extends LookupDispatchAction

{

public Map getKeyMethodMap(){

Map keyMethodMap= new HashMap();

keyMethodMap.put("button.add", "add");

keyMethodMap.put("button.delete", "delete");

return keyMethodMap;

}

public ActionForward add(ActionMapping mapping,ActionForm form,

HttpServletRequest request,HttpServletResponse response) throws Exception

{

return mapping.findForward("add");

}

public ActionForward delete(ActionMapping mapping,ActionForm form,

HttpServletRequest request,HttpServletResponse response) throws Exception

{

return mapping.findForward("delete");

}

}

<action   path="/lookup/adddel"  type="alan.struts.actions.AddDelLookupDispatchAction"

parameter="methodName">

<forward name="add" path="/add.jsp"/>

<forward name="delete" path="/delete.jsp" />

</action>

<message-resources parameter="alan.struts.message.MessageResource" />

自定义的Action类的一些规则

1,尽量不要在Action类中使用(静态)成员变量,如果使用要加上同步。

2,尽量使各模块间的耦合性降低,最大限度的针对接口编程。

3,可以将共代码方在覆盖父类的方法中,最后可以用super.xxx(xxx)来调用父类的方法,使用父类的实现,并加上了自定义的功能。

Struts的Token(令牌)机制

Struts使用Token机制,来防止恶意的破坏和重复提交问题,也就是点击后退后在再提交,这是Struts无法发现的,在form中生成一个token码,在session中也报村有一个同样的token码,当表单提交后,判断两个token码向等后,就会改变session中的这个token码,当然在用回退后,form的token码是不会变的,在提交,还会判断两个token码是否相等,如果不等就会抛出异常,证明这是过时的垃圾数据。

void saveToken(HttpServletRequest request)方法用于将在客户端生成的token码,保存在session中。

void resetToken(HttpServletRequest request)方法用于重置token码,生成新的token码。

boolean isTokenValid(HttpServletRequest request,boolean reset)判断token码是否相等,并且是否重置token码。reset是设定是否重置token码,一般设为true。

设置token码

public ActionForward toadd(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)throws Exception

{

saveToken(request);

return mapping.findForward("next");

}

验证token码

public ActionForward add(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)throws Exception

{

if(isTokenValid(request, true)){

request.setAttribute("message", "contratulation!");

} else {

request.setAttribute("message", "sorry");

}

return mapping.findForward("next");

}

Struts的异常处理

Struts只处理action的异常,

配置struts的异常处理

全局的异常处理

<global-exceptions>

<exception key="error" path="xxx/xxx" type="xxx.xxx.Xxxx">

</global-exceptions>

<action path="xxx/xxx" type="xxx.xxx.Xxxx">

....

<exception key="xxx" path="xxx/xxx" type="xxx.xxx.Xxxx">

</action>

在exception标签中的key,也就是在出现异常时会封装在ActionErrors中,也就是可以在页面中使用。

ActionError(String key, Object value0),可以通过在构造ActionError时,指定不同的key值来对异常进行分类,并且在html:error标签的

自己构造ActionErrors并使用下面的方法发送

void saveErrors(HttpServletRequest request,ActionErrors errors)这个方法用以把封装了异常的ActionErrors的key存储到request中。

Struts动态Form

DynaActionForm,动态的ActionForm,动态的form不需要去写特定的ActionForm类,只需要在配置文件中配置好form中的属性名和属性类型。以,Struts会自动的封装成动态的Form。

<form-bean name="xxx" type="org.apache.struts.action.DynaActionForm">

<from-property name="xxx" type="xxx.xxx.xxx">

<from-property name="xxx" type="xxx.xxx.xxx">

...

...

</form-bean>

动态的ActionForm的使用上和普通的ActionForm相同。

在Struts中的Form要是粗粒度的,不要写太多的Form,要根据情况确定Form的多少。

Struts的动态校验

Struts可以通过继承DynaActionForm,并覆盖validate()方法来打倒校验的目的。也可以通过配置校验规则来进行动态Form的校验实质上就是翻译成javasctipt代码。

使用校验规则来进行动态校验时需要写validation.xml,validator-rules.xml

还需要对struts-config.xml进行配置

validation.xml

<form-validation>

<formset>

<form name="/token/add">

<field property="name" depends="required,minlength, maxlength">

<arg0 key="token.name" />

<arg1 name="minlength" key="${var:minlength}" resource="false"/>

<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>

<var>

<var-name>minlength</var-name>

<var-value>5</var-value>

</var>

<var>

<var-name>maxlength</var-name>

<var-value>8</var-value>

</var>

</field>

</form>

</formset>

</form-validation>

struts-config.xml

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

<set-property

property="pathnames"

value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>

</plug-in>

Struts的标签

bean,html,logic标签库,在Struts的标签也支持JSP2.0的EL表达式。

bean标签库

<bean:... >

bean标签库,是用来访为JavaBean的属性或者是为Bean的属性赋值,创建JavaBean,类似于JSP中的jsp:useBean动作的功能。

bean标签库中的标签中大部分都有以下的属性

id="xxx" 指定Bean的名字标识,Bean在被读出后将引用保存在以这个id命名的对象中,也就是在JSP中使用的变量的引用。

name="xxxx"指定要读取Bean的名字

property="xxxx"

scope="page|request|session|application"

资源读取标签

<bean:resource>读取资源文件

<bean:cookie>使用这个标签可以对Cookie进行操作

<bean:header>读取header信息

例:

<bean:resource id="indexpage" name="index.jsp"/>

<bean:write name="indexpage"/>

<bean:head id="head" name="user-agent"/>

<bean:write name="head"/>

<bean:cookie id="testcookie" name="/taglib/bean-cookie" value="emptyValue"/>

<%

if(testcookie.getValue.equals("emptyValue")){

javax.servlet.http.cookie cook=new javax.servlet.http.cookie("/taglib/bean-cookie","taglib cookie");

cook.setComment("test");

cook.setMaxAge(3600);

response.addCookie(cook);

}

%>

可以将资源写到页面的标签

<bean:write>将Bean的属性加入到输出流中

<bean:write name="xxx"/>name属性是要加入的资源,也就是先前在其他资源标签中的id属性定义的名字

<bean:define>定义变量

例:<bean:define id="test" value="test in Struts">

<bean:write name="test"/>

<bean:message>读取消息,可以根据key读取消息。

例:

<bean:message key="org.test">

html标签库

<html:form>

对应html中的<form>,使用<html:form>会将表单中的属性自动封装成Form,他的action属性可以直接写struts的配置文件中的path

<html:text>、<html:password>、<html:textarea>、<html:hidden>、<html:submit>

<html:reset>、<html:checkbox>、<html:radio>、<html:select>、<html:option>

以上者写标签的使用是和html中的form相对应的。

<html:options>这个标签用来表示一组选择项

<%

java.util.ArrayList list=new java.util.ArrayList();

list.add(new org.apache.struts.util.LabelValueBean("show value","value"));

list.add(new org.apache.struts.util.LabelValueBean("show value1","value1"));

pageContext.setAttribute("vlauelist" list);

%>

<html:form action="xxx.do">

<html:select property="test">

<html:options collection="valuelist" property="value" labelProperty="label"/>

</html:select>

</html:form>

Struts的Tiles框架

Tiles是一个框架,他实现了页面的复合视图,页面代码中不仅有数据,也有页面的布局格式。

要在基于Struts应用中使用Tiles框架,就要在struts-config.xml中配置

<plugin className="org.apache.struts.tiles.TilesPlugin">

<set-property property="definintions-config" value="/WEB-INF/tiles-defs.xml">

<!--定义tiles布局文件tiles-defs.xml-->

</plugin>

tiles的布局配置文件tiles-defs.xml

<tiles-definitions>

<!-- 页面基本布局-->

<definition name="pms_base" path="/common/pms_layout.jsp">

<put name="title" value="pms title" />

<put name="header" value="/common/header.jsp" />

<put name="body"   value="some body page" />

<put name="footer" value="/common/footer.jsp" />

</definition>

<!-- 其他页面定义-->

<definition name="add" extends="pms_base">

<put name="title" value="add" />

<put name="body" value="/person_add.jsp" />

</definition>

</tiles-definitions>

在struts-config.xml中要把forward的配置更改一下

<action path="/person/toadd"  type="alan.pms.action.PersonAction"

name="personForm" scope="request"

parameter="toAdd">

<forward name="add" path="add"/>

</action>

这样就会使页面加上header.jsp和footer.jsp显示在配置好的页面中

在页面中使用tiles标签时,要引入标签库,<%@taglib uri="/WEB-INF/tiles.tld" prefix="tiles"%>

<tiles:insert page="xxx.jsp">

<tiles:put name="header" value="header.jsp">

<tiles:put name="footer" value="footer.jsp">

</tiles:insert>

在struts-config.xml中要把forward的配置更改一下

<action path="/person/toadd"  type="alan.pms.action.PersonAction"

name="personForm" scope="request"

parameter="toAdd">

<forward name="add" path="add"/>

</action>

时间: 2024-10-26 22:28:27

Struts MVC 框架 (让你一步步成为高手)的相关文章

Apache OFBIZ快速上手--MVC框架

继续上一篇博客,本篇博客介绍OFBiz的MVC框架. 1.OFBiz特点 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具.包括实体引擎.服务引擎.消息引擎.工作流引擎.规则引擎等. 2.关于OFBiz的版本以及文档 版本一直在更新,现在更新到13.0.7了. OFBiz的学习文档,少之又少,国内的文档都是过时了的,大多都是4.x的版本,国外的文档也很少.所以本博客都会将自己研究的OFBIZ的东西分享出来. 3.OFBiz的MVC框架 OFBiz采用的

Struts和SpringMVC两种MVC框架比较

基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架有Spring MVC.Tapestry.JSF等.这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica.VRaptor等.这些框架都提供了较好的层次分隔能力.在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高. 如何选择一个好的

Spring MVC 框架搭建及详解

一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.commons-logging.jar.cglib-nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar.hibernate-jpa-2.0-api-1.0.1.Final.jar.antlr-2.7.6.jar.commons-collections-3

Struts1 MVC框架的工作原理

MVC英文及Model-View-Controller,分别是模型(Model),视图(View)和控制(Controller).MVC模式的目的是实现web系统的职能分工. View:即用户交互界面,对于web应用程序来说,可以概括为HTML界面.但由于应用的复杂性和规模性,界面的处理就会变得极具挑战.一款软件可能有多个不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包含在视图上的业务流程的处理.通常用JSP来实现,把业务流程都给了模型层. Model

MVC框架

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 外文名 MVC框架 全    名 Model View Controller 产生时间 1982年 架构内容

Spring MVC 简述:从MVC框架普遍关注的问题说起

任何一个完备的MVC框架都需要解决Web开发过程中的一些共性的问题,比如请求的收集与分发.数据前后台流转与转换,当前最流行的SpringMVC和Struts2也不例外.本文首先概述MVC模式的分层思想与MVC框架普遍关注的问题,并以此为契机结合SpringMVC的入门级案例简要地从原理.架构角度介绍了它对这些问题的处理,包括请求处理流程.消息转换机制和数据绑定机制等核心问题.最后,本文对目前最为流行的两个MVC框架SpringMVC 和 一. MVC 模式与框架 1.MVC 模式 Java We

【struts1】--Servlet讲解MVC框架基本原理

1.开始 根据路径的不同,调用不同的jsp地址——> 把行为封装到不同的Action里面,Test分个调用各个Action,if..else并没有解决.——> 把变化的Action和需要跳转的jsp都写入xml文件里面——> 配置文件,反射——> mvc Struts大体思路如下: 1.中央控制器,最高指挥官:1)收到指示(URL访问),截取URL   2)通过URL解析,分发到对应的Action. Servlet发送,接收一个请求. 1.web客户端发送request到tomca

同是流行MVC框架,比较Strtus2和SpringMVC的区别

Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出. SpringMVC工作流程图 图二 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及

Spring官方文档翻译——15.1 介绍Spring Web MVC框架

Part V. The Web 文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层) Spring拥有自己的web框架--Spring Web MVC,在前两章中会有介绍.剩下的章节则用来介绍Spring和其他web技术的集成,比如Struts和JSF(这里只提两个). 本节以对Spring MVC portlet框架的介绍结尾. 第十五章--Web MVC框架(Web MVC framework) 第十六章--视图技术(View technologie) 第十七章--