bboss mvc开发手册_第1页
bboss mvc开发手册_第2页
bboss mvc开发手册_第3页
bboss mvc开发手册_第4页
bboss mvc开发手册_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、BBOSS MVC框架概述Bbossgroups框架是一个综合型的j2ee框架,涵盖了aop,mvc,persistent,taglib,分布式event,任务调度,webservice,jms,rpc,restful等业界主流技术。本文着重介绍mvc部分的使用方法。MVC-概念M即Model,是模型的意思 V即View,是视图的意思 C即Controller,是控制器的意思 MVC1 与MVC2MVC1View接收用户输入,把命令传到controller Controller处理命令,更新model Model被更新后,通知view需要update View更新后向用户显示 MVC1实例 传

2、统的桌面应用程序 传统的JSP+Javabean编程模式 MVC2View接受用户输入,并传递到ControllerController统一进行处理命令,交由model处理具体的业务经过处理的Model更新后,Controller会选一个View并把Model内容传递(request,session)给它(forward)然后View显示Model传递过来的内容。MVC2实例 基于Struts MVC框架开发的应用 基于Spring MVC框架开发的应用 基于Bboss MVC框架开发的应用Bboss mvc体系结构和特点实现原理Bboss mvc框架是一个轻量级的mvc框架,它基于bboss

3、 aop框架构建,它提供了以下常用的功能:单方法Controller,实现Controller接口即可多方法Controller,实现MultiActionController抽象类即可注解Controller,你无须实现任何接口和抽象类,只要在类级别指定Controller注解或者注解HandlerMapping,然后再相应的控制方法上设定HandlerMapping注解即可。Restful架构的Controller,同样你无须实现任何接口和抽象类,只要在类级别指定注解HandlerMapping,然后再相应的控制方法上设定HandlerMapping,然后在方法参数前加注解PathVari

4、able即可轻松实现restfule架构风格的mvc功能内置了文件上传处理功能,通过bboss mvc你可以非常方便地实现文件上传功能国际化,无论是在业务组件还是在jsp页面中都可以方便地通过ApplicationContext组件中提供的相关message方法和jsp tag标签message和theme实现国际化功能。方便地实现数据绑定功能,并且可以通过值编辑转换器方便地对数据绑定前对数据进行必要的转换。可以方便的扩展view层的功能,方便地定制自己的view实现,默认提供jspview,你可以方便地实现自己的jsonview、基于velocity和freemarker等模板引擎的view

5、。bboss技术体系在企业j2ee项目开发中所处地位Get startedBboss mvc配置文件基础配置文件WEB-INF/bboss-mvc.xml和一系列的action配置文件。/bboss-mvc.xml和ation配置文件可以放置在WEB-INF目录或者子目录下面,下图包括了mvc中可能所有配置文件:从上图可以看到配置文件分为四大类:Mvc基础配置文件和aop基础配置文件(用户无需修改,除非需要自己定制)Action配置文件(用来配置action处理器,所有的处理器以aop组件方式配置,name对应请求url【以,号分隔多个url地址】,可以通过属性例如viewName注入跳转地址

6、映射),举例如下: 以上是常规的action控制器配置方式,再看一个restful风格的action控制器配置示例(可以看出name属性指定的不是url映射地址,是在组件里面用注解指定的,同样也可以通过属性注入页面跳转地址):主题配置文件(用来配置样式和图片的映射配置,用来适应不同的主题)国际化配置文件(国际化属性配置文件)标签库配置文件(message和theme标签,用来读取国际化属性和主题)Dispatch和web应用部署描述文件,包含以下关键配置:mvcdispatherorg.frameworkset.web.servlet.DispatchServletcontextConfigL

7、ocation/WEB-INF/bboss-*.xml0mvcdispather*.htmmvcdispather*.ajaxmvcdispather/rest/*Bboss mvc中的组件控制器组件org.frameworkset.web.servlet.mvc.AbstractControllerorg.frameworkset.web.servlet.mvc.MultiActionControllerorg.frameworkset.web.servlet.ModelAndVieworg.frameworkset.web.servlet.view.RedirectVieworg.fram

8、eworkset.web.servlet.HandlerInterceptorAbstractController和MultiActionController两个class可以方便地帮助开发人员实现自己action 处理组件,开发人员只需要编写他们的子类,然后配置到aop的组件配置文件中,并且在aop配置文件中指定的组件名称将作为该action的映射url地址。事实上用户可以通过两种方式实现自己的控制器组件。一种方式就是实现AbstractController和MultiActionController,另外一种方式是通过注解方式来编写控制器组件,注解方式同样也需要配置到aop的组件配置文件中

9、,这种方式和第一种方式在配置上有点区别,就是无需在配置名称上指定action的映射url地址。ModelAndView组件可以作为action处理器方法的返回值,用来封装url跳转页面地址和传递到该页面的模型数据RedirectView组件作为action处理方法的返回值,用来封装url跳转页面地址信息,它和ModelAndView的区别主要为不能传递页面模型数据,这样的好处是可以有效防止重复提交问题,缺点是需要在相应的页面上获取所需数据。同时action处理方法也可以直接返回url的映射地址串(String),由mvc框架自动跳转到相应的页面。补充一下,如果action处理方法不需要跳转到相

10、应的页面,可以将返回值定义为void或者直接返回null。HandlerInterceptor作为action控制器处理器方法的执行时拦截器,来实现相应的预处理操作,比如安全和认证。目前bboss mvc框架还不支持拦截器配置。请求委派组件org.frameworkset.web.servlet.DispatchServlet这个servlet用来分发url请求到相应的action处理器,并且根据action处理器返回的view转向到具体的view页面,如果处理器配置了相应的Interceptors,在执行action处理方法时,系统还会执行拦截器中定影的相关方法。基于MVC的WebAppli

11、cationContext组件org.frameworkset.web.servlet.context.WebApplicationContext组件作为ApplicationContext组件的子类用来加载mvc框架的所有配置文件,包括bboss-mvc.xml,这些mvc配置文件在web.xml中配置:mvcdispatherorg.frameworkset.web.servlet.DispatchServletcontextConfigLocation/WEB-INF/bboss-*.xml0所有加载的组件、控制器、mvc的基础属性配置都可以通过WebApplicationContext

12、来获取。获取WebApplicationContext实例的方法如下:org.frameworkset.web.servlet.support.WebApplicationContextUtils.getWebApplicationContext()。然后可以在该实例上调用所有ApplicationContext组件具备的方法,例如获取userService组件实例:org.frameworkset.web.servlet.support.WebApplicationContextUtils.getWebApplicationContext().getBeanObject(userServic

13、e);RequestContext组件org.frameworkset.web.servlet.support.RequestContextRequestContext组件做为mvc框架request上下文对象,封装了相关的请求信息,比较有用的有:public static String getHandlerMappingPath(HttpServletRequest request)public static String getPathWithinHandlerMappingPath(HttpServletRequest request)我们可以在jsp页面中通过这两个方法获取到请求对应的

14、url和和控制器匹配的路径信息。获取请求url路径中包含的url和和控制器匹配的路径信息public static String getHandlerMappingPath(HttpServletRequest request)例如,控制器配置信息如下: 输入的请求url为: HYPERLINK http:/localhost:8080/bboss-mvc/pager/pagerdemo.html http:/localhost:8080/bboss-mvc/pager/pagerdemo.html那么该请求将会匹配/pager/*.html模式,那么匹配的路径信息为:/pager/pager

15、demo.html这样我们可以在对应的jsp页面中获取该路径信息:String urlpath = RequestContext.getHandlerMappingPath(request);获取匹配模式部分的信息public static String getPathWithinHandlerMappingPath(HttpServletRequest request)例如,控制器配置信息如下: 输入的请求url为: HYPERLINK http:/localhost:8080/bboss-mvc/pager/pagerdemo.html http:/localhost:8080/bboss

16、-mvc/pager/pagerdemo.html那么该请求将会匹配/pager/*.html模式,那么匹配的模式路径信息为:pagerdemo.html这样我们可以在对应的jsp页面中获取该模式路径信息:String urlpath = RequestContext. getPathWithinHandlerMappingPath (request);相关注解Bboss mvc框架提供以下注解组件:org.frameworkset.web.servlet.handler.annotations.Controller 类级别的注解,只能用来标注一个组件为控制器,一旦通过Controller注解

17、来标注一个类为控制器后,该控制器可以不用在类级别指定HandlerMapping注解(当然也可以两个同时指定,这样没有太大的意义,可以二者选一)。通过controller和HandlerMapping都可以标注一个组件类为mvc的控制器,这样这个控制器无需实现AbstractController和MultiActionController抽象类,使得开发控制器变的更加简单和灵活。适用范围:类级别。org.frameworkset.util.annotations.HandlerMapping作用:定义url和action的映射关系和action可以接受的http 请求method提供两个参数:

18、value,用来指定映射地址,可以为空method,用来指定控制器可以映射的url请求的method,可以指定多个method,取值范围可以为:GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE;使用范围:可以作为类级别,也可以应用于方法级别例如:HandlerMapping(value=/rest/people)HandlerMapping(value = /id, method = RequestMethod.GET)HandlerMapping(method = RequestMethod.GET)HandlerMapping(value = /ac

19、tion/id, method = RequestMethod.DELETE,RequestMethod.GET,RequestMethod.POST)org.frameworkset.util.annotations.PathVariable作用:适用于restful架构的控制器从地址中获取方法执行的相关参数变量。提供了两个参数:value,指定从地址中获取变量的名称,以便作为注解对应的参数的值editor,属性编辑器,用来把从地址变量中获取的参数值(一般为String类型)转换为方法参数对应的类型,必须实现com.frameworkset.util.EditorInf接口defaultVa

20、lue:如果参数为空用来指定默认值使用范围:方法参数实例:HandlerMapping(value = /action/id, method = RequestMethod.DELETE,RequestMethod.GET,RequestMethod.POST)public String deletePerson(PathVariable(action) String action,PathVariable(id) Long personId,ModelMap model)org.frameworkset.util.annotations.RequestParam作用:获取request对象中

21、的参数,作为控制器方法的参数值或者注入到po对象的属性的值提供了三个参数:name,指定request参数的名称required,布尔值,用来指定参数是否必须指定值editor,属性编辑器,用来把从request获取的参数值(一般为String类型)转换为方法参数对应的类型,必须实现com.frameworkset.util.EditorInf接口defaultValue:如果参数为空用来指定默认值decodeCharset: 解码字符集,用于设置在服务端对jquery的ajax方法中文参数的解码字符集charset:参数原始字符集,与convertcharset属性一起结合使用,解决中文乱码

22、问题convertcharset:参数转换字符集,与charset属性一起结合使用,解决中文乱码问题dateformat:指定日期格式,适用于date类型的参数dataformat:指定数据格式,适用于数字类型的参数适用范围:控制器方法参数,po对象set方法org.frameworkset.util.annotations.Attribute作用:根据AttributeScope类型,可以从request,session,PageContext对象中获取属性值,然后作为参数或者注入到po对象中。提供了四个参数:name,指定request参数的名称required,布尔值,用来指定参数是否必

23、须指定值(未生效)editor,属性编辑器,用来把从request获取的参数值(一般为String类型)转换为方法参数对应的类型,必须实现com.frameworkset.util.EditorInf接口defaultValue:如果参数为空用来指定默认值scope,指定属性对应的对象容器和相关范围,可以指定为以下类型:public enum AttributeScope SESSION_ATTRIBUTE,REQUEST_ATTRIBUTE,PAGECONTEXT_PAGE_SCOPE,PAGECONTEXT_REQUEST_SCOPE,PAGECONTEXT_SESSION_SCOPE,P

24、AGECONTEXT_APPLICATION_SCOPE,MODEL_ATTRIBUTE适用范围:控制器方法参数,po对象set方法。实例:public ModelAndView checkImageCode(RequestParam(name=imagecode) String imagecode,Attribute(name=imagecodekey,scope=AttributeScope.SESSION_ATTRIBUTE) String oldcode)org.frameworkset.util.annotations. ResponseBody作用:mvc框架根据ResponseB

25、ody注解,使用特定的message转换器自动将控制器方法的返回值转换为相应类型的数据返回给浏览器,比如json,rss,atom等等,使用该注解需要在bboss-mvc.xml文件中配置相应messageconverter: !- - 提供的参数:datatype:json,xml等值,用来指出输出数据的content类型charset:用来指出reponse响应字符编码详细使用方法请参考测试用例org.frameworkset.web.enumtest.EnumConvertControllerorg.frameworkset.web.http.converter.json.JsonCon

26、troller适用范围:方法级别,方法返回值使用实例:public ResponseBody JsonDataWrapper ajax(HttpServletRequest request,RequestParam(name=page,defaultvalue=1) int page,RequestParam(name=rp,defaultvalue=10) int pagesize,RequestParam(name=sortname,defaultvalue=id) String sortname,RequestParam(name=sortorder,defaultvalue=asc)

27、String sortorder) public ResponseBody Channel rss()org.frameworkset.util.annotations.RequestHeader作用:用来注入RequestHeader中的属性值作为控制器方法的参数,或者值对象的属性值参数:name,指定request header参数的名称required,布尔值,用来指定参数是否必须指定值editor,属性编辑器,用来把从requestheader获取的参数值(一般为String类型)转换为方法参数对应的类型,必须实现com.frameworkset.util.EditorInf接口def

28、aultValue:如果header属性为空用来指定默认值适用范围:控制器方法参数,po对象set方法使用实例:类似RequestParam注解org.frameworkset.util.annotations. CookieValue作用:将cookie中的属性值作为控制器方法的参数,或者值对象的属性值参数:name,指定cookie参数的名称required,布尔值,用来指定参数是否必须指定值editor,属性编辑器,用来把从cookie获取的参数值(一般为String类型)转换为方法参数对应的类型,必须实现com.frameworkset.util.EditorInf接口defaultV

29、alue:如果cookie属性值为空用来指定默认值适用范围:控制器方法参数,po对象set方法使用实例:类似RequestParam注解org.frameworkset.util.annotations.PagerParam作用:支撑mvc框架的分页功能,一个功能是标识控制器中的分页方法,另一个功能是用来为分页控制器方法提供相应的四个分页参数:PagerParam.SORT 标识排序关键字参数,可选PagerParam.DESC 标识排序顺序参数,可选PagerParam.OFFSET 标识分页起点位置参数,必选PagerParam.PAGE_SIZE 标识每页显示记录数参数,必选,相应的de

30、faultValue指定了每页初始显示记录数。参数:id 分页参数名称的前缀name,分页参数的名称defaultvalue:defaultValue可以用来指定每页初始显示记录数,默认的排序字段,默认的排序顺序适用范围:控制器方法参数使用实例:/* * http:/localhost:8080/bboss-mvc/pager/pagerdemo.html * param sortKey * param desc * param offset * param pagesize * return */public ModelAndView pagerdemo(PagerParam(name=Pa

31、gerParam.SORT ) String sortKey,PagerParam(name=PagerParam.DESC,defaultvalue=true) boolean desc,PagerParam(name=PagerParam.OFFSET) long offset,PagerParam(name=PagerParam.PAGE_SIZE,defaultvalue=10) int pagesize,RequestParam(name=TABLE_NAME) String tablename)String sql = select * from tableinfo;boolean

32、 usecondition = tablename != null & !tablename.equals();if(usecondition)sql += where TABLE_NAME like ?;ListInfo datas = new ListInfo();PreparedDBUtil db = new PreparedDBUtil();try db.preparedSelect(sql,offset,pagesize);if(usecondition)db.setString(1, % + tablename + %);List tables = db.executePrepar

33、edForList(TableInfo.class);datas.setTotalSize(db.getTotalSize();/设置总记录数datas.setDatas(tables);/设置当页数据 catch (SQLException e) e.printStackTrace();ModelAndView view = new ModelAndView(/jsp/pager/pagerdemo.jsp,pagedata, datas);return view;对应的页面:form action= method=post请输入表名:input type=text name=TABLE_N

34、AME value= img border=0 src=$pageContext.request.contextPath alt=/ org.frameworkset.util.annotations.MapKey作用:指定Map类型参数中的Stringkey 值对应的request参数字段名称,框架在构造Map对象时,采用对应字段的值作为map的key值。参数:value,指定参数字段名称适用范围:控制器方法参数国际化Aop中的国际化Mvc中的国际化搭建环境搭建之前首先要安装好jdk 1.5或者1.6,准备好tomcat 5x或者tomcat 6x,这个就不多说了。Jdk安装完毕后一定要配置

35、好JAVA_HOME环境变量。Mvc的环境搭建设置数据库连接池修改源码工程中的数据库连接池配置,默认使用的是derby数据库:对应的配置文件存放路径为:resources/poolman.xmlDerby数据库是一个文件型的数据库,你可以直接指定库文件目录。jdbc/derby-ds org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:D:/workspace/bbossgroup-2.0-RC2/bboss-mvc/database/cimdb 如果要修改其他的数据库,例如oracle:jdbc/oracle-ds oracle.jdbc.driv

36、er.OracleDriver jdbc:oracle:thin:/19:1521/orcl cim cim表主键生成机制配置如果需要使用bbossgroups持久层框架的主键生成机制,需要在你配置的数据库中创建tableinfo表drop table TABLEINFO cascade constraints/CREATE TABLE TABLEINFO( TABLE_NAME VARCHAR2(255) NOT NULL, TABLE_ID_NAME VARCHAR2(255), TABLE_ID_INCREMENT NUMBER(5) DEFAULT 1, TABLE_ID_VALUE

37、NUMBER(20) DEFAULT 0, TABLE_ID_GENERATOR VARCHAR2(255), TABLE_ID_TYPE VARCHAR2(255), TABLE_ID_PREFIX VARCHAR2(255);COMMENT ON TABLE TABLEINFO IS 表信息维护对象; COMMENT ON COLUMN TABLEINFO.TABLE_NAME IS 表名称; COMMENT ON COLUMN TABLEINFO.TABLE_ID_NAME IS 表的主键名称;COMMENT ON COLUMN TABLEINFO.TABLE_ID_INCREMENT

38、IS 表的主键递增量缺省为1;COMMENT ON COLUMN TABLEINFO.TABLE_ID_VALUE IS 主键当前值:缺省为0;COMMENT ON COLUMN TABLEINFO.TABLE_ID_GENERATOR IS 自定义表主键生成机制必需从mon.poolman.sql.PrimaryKey集成;COMMENT ON COLUMN TABLEINFO.TABLE_ID_TYPE IS 主键类型(string,int);COMMENT ON COLUMN TABLEINFO.TABLE_ID_PREFIX IS 类型为string的主键前缀,可指定可不指定,缺省值为

39、;CREATE UNIQUE INDEX PK_TABLEINFO0 ON TABLEINFO(TABLE_NAME)/ALTER TABLE TABLEINFO ADD CONSTRAINT PK_TABLEINFO0 PRIMARY KEY (TABLE_NAME)/-注册表的主键信息-INSERT INTO TABLEINFO ( TABLE_NAME, TABLE_ID_NAME, TABLE_ID_INCREMENT, TABLE_ID_VALUE,-TABLE_ID_GENERATOR, TABLE_ID_TYPE, TABLE_ID_PREFIX ) VALUES ( -test

40、, id, 1, 0, seq_test, sequence, null);Tableinfo表创建好后就可以将需要获取主键的表信息注册到tableinfo中:INSERT INTO TABLEINFO ( TABLE_NAME, TABLE_ID_NAME, TABLE_ID_INCREMENT, TABLE_ID_VALUE,-TABLE_ID_GENERATOR, TABLE_ID_TYPE, TABLE_ID_PREFIX ) VALUES ( -test, id, 1, 0, seq_test, sequence, null);各个字段说明如下:Table_name:表名称,大小写无

41、关,字符串类型TABLE_ID_NAME:表主键字段名称,大小写无关,字符串类型TABLE_ID_INCREMENT:表主键自增值,数字类型TABLE_ID_VALUE:主键的当前值TABLE_ID_GENERATOR:表主键生成器TABLE_ID_TYPE:主键生成的值类型(基本数据类型int,long,string,uuid,sequence)TABLE_ID_PREFIX:表主键前缀设置mvc框架分派器控制器及控制器方法和url匹配规则配置修改web.xml文件在web.xml中添加以下servlet及其映射关系即可:contextConfigLocation参数用来指定mvc的配置文件

42、,这些配置文件分为:mvc 控制器配置文件mvc框架基础配置文件aop组件配置文件demo中配置为/WEB-INF/bboss-*.xml,也就是说/WEB-INF/目录下所有的以bboss-开头的xml文件都会作为mvc框架的配置文件加载。servlet-mapping部分指定了需要被mvc控制器拦截处理的所有url规则。例如html,htm,ajax,/rest/*mvcdispatherorg.frameworkset.web.servlet.DispatchServletcontextConfigLocation/WEB-INF/bboss-*.xml0mvcdispather*.ht

43、mmvcdispather*.htmlmvcdispather*.ajaxmvcdispather/rest/*扩展的jar包加载机制配置同样在web.xml文件中添加一个listener,就可以将web应用的jar包放置在指定的第三方目录下,而不一定要放置在lib目录下,这样做的好处有二:对lib下的jar包按目录分类将jar放置在web应用以外的目录下,减少war包的大小,使得jar包更加易于部署org.frameworkset.web.listener.ApplicationLifeListener扩展的jar包存放地址配置这个配置文件在源码工程中的位置如下/bboss-mvc/src/

44、org/frameworkset/web/servlet/DispatcherSperties发布后位于jar包bboss-mvc.jar的包路径下:org/frameworkset/web/servlet/这个文件中和jar包加载相关的配置如下:Jar文件的信息和目录配置#指定需要加载的jar包的文件后缀org.frameworkset.web.servlet.launcher.jarFiles=.jar,.dll,.lib,.so,.zip#加载的时候需要忽略的目录org.frameworkset.web.servlet.launcher.execludejarDirs=.svn#jar包

45、存放的目录地址,如果有多个目录可以用,号分隔,默认相对于WebRoot(应用上下文地址)org.frameworkset.web.servlet.launcher.customJarsLocation=/WEB-INF/lib/ext#jar包存放的目录根地址customJarsLocation都是相对于这个地址 org.frameworkset.web.servlet.launcher.docbase=不同容器的适配器,目前提供了websphere 7,weblogic 11g,tomcat 6和5,金蝶apusic的适配器org.frameworkset.web.servlet.launc

46、her.CustomClassLoader=org.frameworkset.web.servlet.launcher.ApusicWebappClassLoader,org.frameworkset.web.servlet.launcher.TomcatWebAppClassLoader,org.frameworkset.web.servlet.launcher.WAS70WebappClassLoader,org.frameworkset.web.servlet.launcher.ResinWebAppClassLoader,org.frameworkset.web.servlet.lau

47、ncher.WeblogicWebAppClassLoaderMvc url映射规则配置Mvc url映射规则语法可以是完整明确的url地址,例如:/pager/pagedemo.html也可以是带通配符的url模式地址,例如:/pager/*.htmlMvc框架中url映射规则主要包括以下两种:用户在浏览器端输入的http url地址和控制器以及控制方法的映射规则控制器方法跳转地址与实际的页面url地址的映射规则下面简单做个说明。前提条件是url要能够被mvc框架分派器servlet所拦截,不需再mvc 分派器中进行映射规则配置。参考【2.2.4 】节,我们可以看到该分派器可以拦截以下格式的

48、url:*.htm*.html*.ajax/rest/*这个都是根据项目的实际情况来定义的,你可以定义你自己的匹配格式。只要符合这些url格式的客服端请求就会交给具体的控制器处理,大致的处理流程如下:Mvc框架处理客服端请求的流程控制器及控制器方法和url匹配规则配置分为单方法匹配控制器,和多方法匹配控制,注解控制器以及restful控制器四种,每一种控制器映射http url地址的方法是不一样的。注解控制器以及restful控制器都是通过注解来标识的控制器(Controller注解,restful注解)单方法控制器和多方法控制器的识别方法为:直接通过控制器配置文件中对应的name属性来指定控

49、制器对应的url匹配模式。单方法匹配控制映射规则单方法控制器必须实现抽象类:org.frameworkset.web.servlet.mvc.AbstractController并且实现handleRequestInternal方法。单方法控制器与url的映射必须配置在mvc的配置文件(也就是aop组件配置文件)中:说明:首先一个控制器是以aop组件的方式进行配置管理的。name=/demo.htm:通过name属性指定DemoController控制器与/demo.htm地址进行映射,因此该控制器直接匹配以下格式的地址: HYPERLINK http:/ip:port/contextpath

50、/demo.htm http:/ip:port/contextpath/demo.htm也就是说用户输入上述地址后,mvc框架将使用DemoController的handleRequestInternal方法来处理该请求,处理完毕后将处理结果设置到ModelAndView对象中,并且将转向页面也存入该对象。下面的两个属性直接向DemoController控制器中注入了两个处理转向页面地址:f:viewName=demo f:listviewName=demolistDemoController控制器中根据处理的结果不同而转向到相应的页面,两个页面的地址为:demo和demoList分别对应具体

51、的jsp页面地址,需要经过url rewriter规则转换为实际的物理页面地址。我们还可以在每个地址前面显示地加上redirect和forward两个前缀,用来指示mvc框架是redirect还是forward到指定的页面,如果没有指定的话,默认为forward操作,具体的指定方法如下:f:viewName=redirect:demof:viewName=forward:demo返回值的方式为:List values = new ArrayList();for(int i = 0; i 100; i +)TestObject object = new TestObject();object.s

52、etId(id + i);object.setName(多多);values.add(object);return new ModelAndView(this.getViewName(),testmodel,values);需要补充说明的是,一个单方法控制可以映射多个url请求,多个url的映射规则为:每个url以逗号分隔例如:name=/demo.htm,/hello.htm多方法映射控制器与url映射规则配置多方法控制器可以实现抽象类,也可以不实现:org.frameworkset.web.servlet.mvc.MultiActionController多方法控制器与url的映射必须配置

53、在mvc的配置文件(也就是aop组件配置文件)中: 说明:首先一个控制器是以aop组件的方式进行配置管理的。name=/demo/*.htm:通过name属性指定DemoMutiActionController控制器与以/demo/父路径开始的以htm结尾的所有url请求,因此该控制器直接匹配以下格式的地址: HYPERLINK http:/ip:port/contextpath/demo/queryUsers.htm http:/ip:port/contextpath/demo/queryUsers.htm HYPERLINK http:/ip:port/contextpath/demo/

54、queryUsers.htm http:/ip:port/contextpath/demo/genrateImg.htm HYPERLINK http:/ip:port/contextpath/demo/ queryUsers.htm http:/ip:port/contextpath/demo/queryPagineUsers.htm其中的通配符*所代表的就是MultiActionController中的一个方法名称,也就是说用户输入上述地址后,mvc框架将使用MultiActionController的queryUsers,genrateImg,queryPagineUsers方法来处理该

55、请求,处理完毕后将处理结果设置到ModelAndView对象中,并且将转向页面也存入该对象。下面的两个属性直接向MultiActionController控制器中注入了一个处理转向页面地址:MultiActionController控制器中根据处理的结果不同而转向到相应的页面,页面的地址为:userList对应具体的jsp页面地址,需要经过url rewriter规则转换为实际的物理页面地址。我们还可以在地址前面显示地加上redirect和forward两个前缀,用来指示mvc框架是redirect还是forward到指定的页面,如果没有指定的话,默认为forward操作,具体的指定方法如下:

56、多方法控制器的返回值和参数形式也非常灵活。详情参考章节4。注解控制映射规则注解控制器是指mvc通过注解(Controller注解和HandlerMapping注解)来识别的控制器,每个方法对应的请求url模式直接在控制器的类名或者方法上用HandlerMapping注解来配置。如果控制器中即在类名上用HandlerMapping配置的了url路径也在控制器方法上用HandlerMapping注解配置了url路径,那么对应的方法的匹配路径将是类-url + 方法url对应的完整路径,例如:HandlerMapping(/rest/search)public class SearchControl

57、lerHandlerMapping(value = /dosearch.html, method = HttpMethod.GET,HttpMethod.POST )public ModelAndView search()。那么方法search()对应的url请求路径就是:/rest/search/dosearch.html如果类名上没有指定映射路径那么直接使用方法配置的路径:/dosearch.htmlRestful控制器映射规则Restful控制器也是一种注解控制器,不同的地方就是:映射地址中指定了匹配方法的方法参数变量,例如: HandlerMapping(/rest/imagevali

58、dator)public class ImageValidatorController /http:/localhost:8080/bboss-mvc/rest/imagevalidator/abcefg1234/6HandlerMapping(value=/codelist/codenum)public void generateImageCode(PathVariable(codelist) String codelist,PathVariable(codenum) int codenum,HttpServletRequest request,HttpServletResponse res

59、ponse)。如果输入以下地址: HYPERLINK http:/localhost:8080/bboss-mvc/rest/imagevalidator/abcefg1234/6 http:/localhost:8080/bboss-mvc/rest/imagevalidator/abcefg1234/6将匹配控制器方法public void generateImageCode,由于ImageValidatorController 指定了部分映射地址:/rest/imagevalidator方法generateImageCode上也指定了映射地址:/codelist/codenum,这个地址

60、有点特别,等同于模式/*/*,因此方法generateImageCode的映射模式实际为:/rest/imagevalidator/*/*codelist和codenum指定了两个路径变量,也就是说/*/*部分对应的信息将分别作为codelist和codenum两个变量的值,将被传递给由PathVariable注解注明的方法参数codelist和codenum:PathVariable(codelist) String codelist,PathVariable(codenum) int codenum,跳转url与实际jsp页面的匹配规则配置在控制器中的处理完毕后转向的url地址可以是任何合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论