zoukankan      html  css  js  c++  java
  • 05_springmvc参数绑定

    一.参数绑定的过程

    从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收。

    二.springmvc默认支持的类型

    默认支持的类型:直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。

    HttpServletRequest:通过request对象获取请求参数。

    HttpServletResponse:通过response响应处理信息。

    HttpSession:通过session对象获得session对象中存放的信息。

    Model/ModelMap:model是一个接口,modelMap是一个接口实现 。作用:将model数据填充到request域。

    三.参数绑定

    1.简单类型的绑定

    通过@RequestParam对简单类型的参数进行绑定。如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:

    其它简单类型的参数绑定大同小异。

    2.pojo类型绑定

    页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。

    页面:

    controller中形参:

    pojo类型:

    3.自定义参数绑定(实现日期类型参数绑定)

    转换器:

    配置方式:

    <mvc:annotation-driven conversion-service="conversionService"/>
    	<!--	自定义参数绑定-->
    	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    		<property name="converters">
    			<list>
    				<!--				这里可以定义自定义类型转换,不一定是日期类型    -->
    				<bean class="com.ssm.controller.converter.CustomDateConverter"/>
    			</list>
    		</property>
    	</bean>

    @PathVariable

    org.springframework.web.bind.annotation.PathVariable,可以动态或得url请求参数中的值,@PathVariable只支持一个属性value类型为String,表示绑定的名称,如果省略则绑定默认参数 。

    url为:http://localhost:8099/springmvc_mybatis/items/editItems.action?id=3,则自动将url中的模版变量${id}绑定到通过@PathVariable注解的同名参数上即,id变量被赋值1.

    springmvc和struts2的区别

    1、springmvc基于方法开发的,struts2基于类开发的。

    springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。

    方法执行结束,形参数据销毁。

    springmvc的controller开发类似service开发。

    2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。

    3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。

    2.post乱码

    在web.xml添加post乱码filter

    <!--    处理参数绑定过程中post乱码-->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    以上可以解决post请求乱码问题。

    对于get请求中文参数出现乱码解决方法有两个:

    1.修改tomcat配置文件添加编码与工程编码一致,如下:

    <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    2对参数进行重新编码

    String userName new 
    String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
    

    补充....

  • 相关阅读:
    正则替换 html
    黎曼积分:采用任意无限分割时
    A field guide to algebra,theorem 1.1.3
    $\mathbf{R}$上开集的构造
    陶哲轩实分析引理18.2.5
    A field guide to algebra,theorem 1.1.3
    陶哲轩实分析引理18.2.5
    $\mathbf{R}$上开集的构造
    关于勒贝格外测度的一条等式
    Some remarks on definition 1.1.1,A field guide to algebra
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767521.html
Copyright © 2011-2022 走看看