springmvc个人小结

1.springMVC是什么?他和struts2有什么区别?

springMVC和struts2都属于表现层的框架,他是spring框架的一部分.
区别:
a)  springMVC的入口是servlet,即前端控制器,而struts2入口是一个filter过滤器
b)  springMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例).
      struts2是基于类开发,传递参数是通过类的属性,只能设计为多例.
c)   struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,
      springMVC通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后将ModelAndView中的模型数据通过request域传输到页面.jsp视图解析器默认使用jstl.


2.框架结构




3.配置

a)  组件扫描器:省去在spring容器配置每个controller类的繁琐.使用<context:component-scan>自动扫描标记@controller的控制器类,多个包之间采用半角逗号分隔
	<!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->
	<context:component-scan base-package="cn.itcast.springmvc.controller.first"/>

b)  注解处理器和适配器的配置:

springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。

c) 视图解析器

在springmvc.xml文件配置如下:

	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

4.参数绑定

a) 绑定简单数据类型

使用Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap。

如果使用Model则可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象则可以使用String返回值替代。不管是Model还是ModelAndView,其本质都是使用Request对象jsp传递数据。

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null.

使用@RequestParam常用于处理简单类型的绑定

value:参数名字

required:是否必须(默认是true)

defaultValue:默认值,表示如果请求中没有同名参数时的默认值


b) 绑定pojo

要求:pojo对象中的属性名和表单中的input的name属性一致

注意:提交的表单中不要有日期类型的数据,否则会报400错误,如果想提交日期类型的数据,需要用到自定义参数绑定.

c) 自定义参数绑定

因为日期数据有很多格式,springMVC没办法吧字符串转换成日期类型,所以需要自定义参数绑定.

前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。在springmvc这可以在处理器适配器上自定义Converter进行参数绑定。如果使用<mvc:annotation-driven/>可以在此标签上进行扩展

自定义converter

public class DateConverter implements Converter<String, Date> {

	@Override
	public Date convert(String source) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return simpleDateFormat.parse(source);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
}
配置converter

	<!-- 加载注解驱动 -->
	<mvc:annotation-driven conversion-service="conversionService "/>
	<!-- 转换器配置 -->
	<bean id="conversionService"
		class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<bean class="cn.***.springmvc.convert.DateConverter"/>
			</set>
		</property>
	</bean>

5.解决乱码问题

a)  解决post乱码

在web.xml中加入
	<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>

b)get请求中文参数出现乱码解决方式(二种)

第一种:修改tomcat配置文件添加编码与工程编码一致
		<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

第二种:对参数进行重新编码:
		String userName new 
		String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值