`

Spring2.5基于驱动的MVC

    博客分类:
  • SSH
 
阅读更多

一. Web.xml 的配置

<!--  Spring  服务层的配置文件, 它将会加载spring 文件夹下的所有spring 的配置文件--> 

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*: spring/*.xml</param-value>

    </context-param>

    <!--  Spring  容器启动监听器 --> 

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

    <!--  Spring MVC  的Servlet ,它将加载WEB-INF/annomvc-servlet.xml 的 

      配置文件,以启动Spring MVC 模块--> 

    <servlet>

          <servlet-name>annomvc</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet

        </servlet-class>

        <load-on-startup>2</load-on-startup>

        </servlet>

       <servlet-mapping>

        <servlet-name>annomvc</servlet-name>

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

       </servlet-mapping>

二.     annomvc-servlet.xml 的配置: 

 <!-- ① :对web 包中的所有类进行扫描,以完成Bean 创建和自动依赖注入的功能 --> 

    <context:component-scan base-package=" 指定的Controller 类存放的包的路径"/> 

    <!-- ② :启动Spring MVC 的注解功能,完成请求和注解POJO 的映射 --> 

    <bean class="org.springframework.web.servlet.mvc.annotation.

        AnnotationMethodHandlerAdapter"/>

  <!--  ③ :对模型视图名称的解析,即在模型视图名称添加前后缀,会自动到/WEB-INF/jsp/ 路径下面加载.jsp 的文件 --> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 

         p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

三.     然后在你的控制类名称前面加上@Controller 表明这个普通的类是起到控制跳转的类, 

在用@RequestMapping (” 请求的路径” )来制定你前台调用此方法的url,@RequestMapping 可以加在一个方法的前面,表明只有这个方法受此路径的控制,如果加在一个类的前面表明此类的所有方法都受这个路径的控制。 

四.一个 Controller 对应一个 URL ,由请求参数决定请求处理方法  : 通过注解我们可以实现指定一个url, 去调用一个大类里的不同的方法,具体的实现是 在一个类的前面用@RequestMapping (“URL “)指定一个访问路径,然后在你调用的此类的不同的方法的前面通过@RequestMapping (params=” 调用此方法的标志如:method=delete” )来调用具体的方法,在@RequestMapping 里还有一个属性method 可以用来指定你是用get 还是用post 调用请求这个方法的,如:( method = RequestMethod.POST 表明只有post 请求才能调用此方法)。

五.处理方法入参如何绑定 URL 参数 :spring 在调用处理方法时如何给指定的方法传入参数,其实spring 在给方法传入参数,和处理好后跳转到指定的视图存在一套潜在的规则,例如我们在调用public String  addUer(String username,int id){return “视图名称“} 时,前台视图对应的属性的名称的值就会传入到此方法对应的属性上,需要注意的是我们视图上属性的名称和方法里视图的名称一定要一直,而且对于像int,long, 等这样的基本的数据类型其前台一定要有值传过来,不然就会抛出 TypeMismatchException 异常,提示无法将 null 转换为基本数据类型,另外请求处理方法的入参还可以是一个封装为具体对象的javaBean ,此时从前台传过来的数据会自动的绑定到JavaBean 里相应的属性的上面,而且像int,long, 等这样的基本数据类型可以为空,spring 会自动的将其转换为0 ,如果对象里有级联的属性,还可以把值付级联对象的属性上面。如果我们不想让前面的属性一定要和方法里的属性想对应,而且不一定非要传值过来,我们可以通过 @RequestParam   注解实现,例如: public String listBoardTopic(@RequestParam(value="id", required=false ) int topicId,User user) ,此时前台传过来的id 的值就会付到topicId 的上面,而且当属性required=false 时表示前台可以不传值过来,当等于true 的时候,前台对应的属性一定要传值过来,否则报错。 

六.如何让方法里的得到的数据传入到指定的页面:spring2.0 以上的版本给我们提供了org.springframework.ui.ModelMap 类,它作为通用的模型数据承载对象,传递数据供视图所用。我们可以在请求处理方法中声明一个 ModelMap 类型的入参,在方法里通过.addattribute() 方法把值加入到一个变量里面,然后在制定的页面就可以通过request 的请求道指定的制定的值,通过一个例子来详细说明ModelMap 的具体使用规则 

@SessionAttributes("currUser") (1 )

public String listBoardTopic(@RequestParam("id")int topicId,

                                     User user,ModelMap model (2 ) ) {

                   bbtForumService.getBoardTopics(topicId);

                model.addAttribute("currUser",user);  (3 )

                return "listTopic";

 

我们在2 处提供了一个ModelMap 类型的入参,在3 处把要传到视图上的值封装到一个字符串里,这样我们在制定的视图页面就可以取得到user 对象里的值,ModelMap 传值的默认的范围是request 级别的,也就是说只能在制定的视图里可以看到,在下一个视图里就无法取得,为此我们可以通过@SessionAttributes 注解把指定的值的范围指定为Session 级别的,这样我们可以在一次请求的所有的页面都可以访问到此值,如1 处那样。其实 @SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @SessionAttributes({“attr1”,”attr2”}) 。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class) ,当然也可以指定多个类,如 @SessionAttributes(types = {User.class,Dept.class}) ,还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”}) 。我们还可以通过@ModelAttribute ()注解把ModelMap 里的值绑定到入参里面,传入到下一个方法里使用。 

七.方法返回的参数: 

       当返回时void 的时候,对应的视图寻找路径是你请求的url 路径;当返回的是String 类型的时候,对应的视图寻找路径是你返回的字符串;当返回的是ModelMap 的时候,对应的视图路径是你请求的URL 路径,此时返回的ModelMap 里包含的数据作为视图显示的数据模型。 

八.注册自己的属性编辑器: 

     Spring MVC  允许向整个 Spring 框架注册属性编辑器,它们对所有 Controller 都有影响。当然 Spring MVC 也允许仅向某个 Controller 注册属性编辑器,对其它的 Controller 没有影响。前者可以通过 AnnotationMethodHandlerAdapter 的配置做到,而后者则可以通过 @InitBinder 注解实现。 

(1)          对所有的Controller 都有影响的属性编辑器实现方式: 

           <bean class="org.springframework.web.servlet.mvc.annotation.

AnnotationMethodHandlerAdapter">

    <property name="webBindingInitializer">

        <bean class="com.baobaotao.web.MyBindingInitializer"/>

    </property>

</bean>

       实现具体的方法: 

           public class MyBindingInitializer implements WebBindingInitializer {

 

    public void initBinder(WebDataBinder binder, WebRequest request) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

          dateFormat.setLenient(false);// 关闭时间宽松的模式

        binder.registerCustomEditor(Date.class, 

             new CustomDateEditor(dateFormat, false));

        binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));

    }

(2)          如果希望某个属性编辑器仅作用于特定的 Controller ,可以在 Controller 中定义一个标注 @InitBinder 注解的方法,可以在该方法中向 Controller 了注册若干个属性编辑器 

@Controller

public class MyFormController {

    @InitBinder

    public void initBinder(WebDataBinder binder) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        dateFormat.setLenient(false);

        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));

    }

(3)         绑定二进制流文件解析器:

@InitBinder

protected void initBinder(HttpServletRequest request,

ServletRequestDataBinder binder) throws ServletException {

binder.registerCustomEditor( byte []. class , new ByteArrayMultipartFileEditor());

}

 

分享到:
评论

相关推荐

    Spring 2.5 基于注解驱动的Spring MVC

    Spring 2.5 基于注解驱动的Spring MVC 开发参考文档

    Spring 2.5 基于注解驱动的 Spring MVC.docx

    Spring 2.5 基于注解驱动的 Spring MVC

    使用Spring 2.5 基于注解驱动的 Spring MVC详解

    使用Spring 2.5 基于注解驱动的 Spring MVC详解

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    使用 Spring 2.5 基于注解驱动的 Spring MVC

    使用 Spring 2.5 基于注解驱动的 Spring MVC

    详细讲解spring MVC中注解怎么使用

    Spring2.5注释驱动与基于注释的MVC

    NULL 博文链接:https://xusaomaiss.iteye.com/blog/606991

    使用 Spring 2_5 基于注解驱动的 Spring MVC

    介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。

    spring2.5.chm帮助文档(中文版)

    Spring Framework 开发参考手册 目录 1. 简介 1.1. 概览 1.1.1. 使用场景 2. Spring 2.0和 2.5的新特性 ...2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 ......

    电子商务系统(Struts+Spring+Hibernate)

    该系统是基于B/S架构下java开发的,采用mvc模式包括前后台完整流程 1.注意:由于jar包过大,所以暂没放上去,要部署运行可以自己添加Struts1.2+Spring2.5+Hibernate3.2de jar包以及mysql驱动

    Spring中文帮助文档

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    spring 注解开发说明

    spring在2.5以后也对MVC进行了大幅度改进,现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一个 POJO 具有 Controller 的绝大部分功能。

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6 .3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 ...

    Spring 2.0 开发参考手册

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring ...

    spring chm文档

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring ...

    Spring in Action(第二版 中文高清版).part2

    11.2 开发Spring驱动的EJB(EJB 2.x) 11.3 Spring和EJB3 11.3.1 引入Pitchfork 11.3.2 从Pitchfork起步 11.3.3 通过注释注入资源 11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中...

    Spring in Action(第二版 中文高清版).part1

    11.2 开发Spring驱动的EJB(EJB 2.x) 11.3 Spring和EJB3 11.3.1 引入Pitchfork 11.3.2 从Pitchfork起步 11.3.3 通过注释注入资源 11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中...

    Spring.3.x企业应用开发实战(完整版).part2

    4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition 5.1.3 InstantiationStrategy 5.1.4 ...

    Spring攻略(第二版 中文高清版).part1

    2.5 使用Spring表达式语言 64 2.5.1 问题 64 2.5.2 解决方案 64 2.5.3 工作原理 65 2.6 设置Bean作用域 69 2.6.1 问题 69 2.6.2 解决方案 69 2.6.3 工作原理 70 2.7 自定义Bean初始化和析构 72 ...

Global site tag (gtag.js) - Google Analytics