|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。MVC是三个单词的缩写,分离为:
模子(Model),视图(View)和把持Controller)。
MVC形式的目标就是完成Web体系的本能机能合作。
Model层完成体系中的营业逻辑,一般能够用JavaBean或EJB来完成。
View层用于与用户的交互,一般用JSP来完成。
Controller层是Model与View之间相同的桥梁,它能够分拨用户的哀求并选择得当的视图以用于显现,同时它也能够注释用户的输出并将它们映照为模子层可实行的操纵。
MVC形式的优点
各施其职,互不干与
在MVC形式中,三个层各施其职,以是假如一旦哪一层的需求产生了变更,就只必要变动响应的层中的代码而不会影响到别的层中的代码。
有益于开辟中的合作
在MVC形式中,因为按层把体系开,那末就可以更好的完成开辟中的合作。网页计划职员能够举行开辟视图层中的JSP,对营业熟习的开辟职员可开辟营业层,而别的开辟职员可开辟把持层。
有益于组件的重用
分层后更有益于组件的重用。如把持层可自力成一个能用的组件,视图层也可做成通用的操纵界面。
分歧JSP机关的使用
为何要组合利用servlet&JSP?
典范的做法:利用JSP来简化HTML内容的开辟与保护
关于复杂的静态代码,利用由剧本元素挪用JAVA代码来完成。
关于略微庞大一些的使用,则可以使用剧本元素挪用定制的类来完成。(即所谓的help类)
关于对照庞大的使用,则利用JAVABEAN和定制标签
但,这些是不敷的
关于庞大的处置历程,从JSP入手下手做起会难以处置。
JSP除可以带来将实践的代码断绝成独自的类、bean、和定制标签的便当之外,它所隐含的假定是单个页面给出单个基础视图。
对MVC的曲解
必需接纳庞大的框架
框架偶然很有效
Struts
JavaServerFaces(JSF)
但并不是必须!
关于年夜多复杂大概过度庞大的使用来讲,利用内建的RequestDispatcher就可以够很好地完成MVC
MVC影响全部体系的计划
我们能够用MVC来处置单个哀求
能够将它以为是MVC计划,而非MVC框架。
也被称为是模子2计划
用RequestDispatcher完成MVC
1.界说用以暗示数据的javabean
2.利用一个servlet处置哀求
servlet读取哀求参数,反省数据的缺掉或非常等。
3.添补bean
该servlet挪用营业逻辑或数据会见代码失掉终极的了局。得出的了局被放在第一步中界说的bean中。
4.将bean存储在哀求,会话或servlet的高低文中
该servlet挪用哀求、会话或servlet高低文对象的setAttribute存储表达哀求了局的bean的援用。
5.将哀求转发到JSP页面
该servlet断定哪一个JSP页面合适于处置以后的情况,并利用RequestDispatcher的forward办法将把持转移到谁人页面。
6.从bean中提取数据
JSP页面利用jsp:useBean和与第4步婚配的地位会见之前存储的bean,然后利用jsp:getProperty输入bean的属性。
JSP页面其实不创立或修正bean;它只是提取并显现由servlet创立的数据。
jsp:useBean在MVC中的利用与在
自力JSP页面中有甚么分歧
JSP页面不该该创立对象
应当由servlet创立一切的数据对象。因而,为了包管JSP页面不会创立对象,我们应当利用<jsp:useBean...type=“package.Class”/>
而不是
<jsp:useBean...class="package.Class"/>
JSP页面也不该该修正已有的对象
因而,我们应当只利用jsp:getProperty,不利用jsp:setProperty
。提醒:jsp:useBean的scope选项
request
<jsp:useBeanid="..."type="..."scope="request"/>
session
<jsp:useBeanid="..."type="..."scope="session"/>
application
<jsp:useBeanid=".."type=".."scope="application"/>
page
<jsp:useBeanid=“...”type=“...”scope=“page”/>
大概仅仅利用<jsp:useBeanid="..."type="..."/>
MVC(Model2)构架不利用这个scope。
分歧数据共享体例
向用户显现一个随机的数字。
因为每次哀求应当发生新的数字,因此基于哀求的共享是得当的。
显现用户的姓和名
数据要为每一个客户存储,因此基于会话的共享对照合用。
显现一个指定长度的质数。
数据在多个客户间共享,因而,基于使用的共享对照得当。
基于哀求的数据共享
Servlet
ValueObjectvalue=newValueObject(...);
request.setAttribute("key",value);
RequestDispatcherdispatcher=
request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
dispatcher.forward(request,response);
JSP
<jsp:useBeanid="key"type="somePackage.ValueObject"
scope="request"/>
<jsp:getPropertyname="key"property="someProperty"/>
基于会话的数据共享
Servlet
ValueObjectvalue=newValueObject(...);
HttpSessionsession=request.getSession();
session.setAttribute("key",value);
RequestDispatcherdispatcher=
request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
dispatcher.forward(request,response);
JSP
<jsp:useBeanid="key"type="somePackage.ValueObject"
scope="session"/>
<jsp:getPropertyname="key"property="someProperty"/>
基于ServletContext的数据共享
Servlet
synchronized(this)
{
ValueObjectvalue=newValueObject(...);
getServletContext().setAttribute("key",value);
RequestDispatcherdispatcher=
request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
dispatcher.forward(request,response);
}
JSP
<jsp:useBeanid="key"type="somePackage.ValueObject“scope="application"/>
<jsp:getPropertyname="key"property="someProperty"/>
JSP页面中的绝对URL
成绩:
利用哀求分派器举行的转发对客户来讲是通明的。初始的URL是扫瞄器唯一晓得的URL。
为何这会对照主要?
扫瞄器会怎样处置相似上面的这些标签:
<IMGSRC="http://www.webjx.com/htmldata/2005-11-17/foo.gif"…>
<LINKREL=STYLESHEET
HREF="JSP-Styles.CSS"TYPE="text/css">
<AHREF="bar.jsp">…</A>
谜底:扫瞄器将会把它们看做是相对servlet的URL
最复杂的办理计划:
利用以斜杠入手下手的URL
Summary
MVC(Model2)体例合用于:
单次提交会发生多个基础表面。
几个页面具有大批大众的处置历程。
必要为一样的数据供应多个视图的使用程序,它很好地完成了数据层与暗示层的分别,出格合用于开辟与用户图形界面有关的使用程序
构架
由一个servlet应对初始的哀求
Servlet完成实践的数据处置并将了局存储在bean中
Bean存储在HttpServletRequest,HttpSession,或ServletContext中
Servlet利用RequestDispatcher的forward办法将哀求转发到JSP页面
JSP页面经由过程利用jsp:useBean和响应的感化域(request,session,application)从bean中读出数
他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。 |
|