2、自动的将表单中的参数设到User对象中(这个User对象的属性名和表单中的参数名必须保持一致),没有对应的参数名时 就取对象的默认值。String类型取null,int类型取0.
3、自动将收集完数据的User对象设到request内置对象中,属性名为user.
在jsp页面中,直接通过el表达式输出:${user.username}
// 获取applicationContext.xml中bean的id为loginService的,并注入
@Resource(name = "loginService")
private LoginService loginService; //等价于spring传统注入方式写get和set方法,这样的好处是简洁工整,省去了不必要得代码
SpringMVC的国际化国际化使用的技术:国际化资源文件
相应的国际化标签
SpringMVC几乎不支持动态国际化,只支持静态国际化。
国际化资源文件:基名+Locale(语言名 zh+国家名CN),示例:MessageResources_zh_CN.properties
中文国际化资源文件:转换为Unicode码
根据浏览器显示语言实现国际化步骤:
1、 在src下添加国际化资源文件
2、 在applicationContext.xml文件中配置国际化资源文件
<bean id=”messageSource” class=”^”>
3、 使用标签处理国际化
必须导入标签库prefix,uri
<spring:message code=”国际化标签的key”/>
Tomcat启动:
先创建Listener对象,对application对象的创建做监听
Application对象一创建就调用监听器的contextInitialized()方法
创建中央控制器DispatcherServlet,执行init()方法,读取主配置文件
创建请求分派器
创建后端控制器
创建拦截器LocaleChangeInterceptor(处理国际化)
创建国际化处理器对象SessionLocaleResolver
发送请求执行项目,默认调用index.jsp,
1、在index.jsp页面发送login.do的请求
2、Tomcat创建request接收请求字符串,把http协议中的locale信息也封装到request。(Locale,Cookie,IP)
3、Tomcat自动将locale信息封装到locale对象设到session中
4、发现是/login.do请求,tomcat把请求交给springmvc
5、springmvc截取请求路径
6、先到webFactory中有没有拦截器拦截此请求
7、没有就在webFactory中找到请求分派器对象
8、通过分派器找到对应的后端控制器
9、执行后端控制器的handleRequest方法,返回ModeAndView对象
10、找到视图解析器,加上前缀和后缀,完成转向
在jsp页面使用国际化资源标签:
1、 到BeanFactory中找到国际化资源对象拿到国际化资源文件的基名
2、 到Session通过属性名中拿到Locale
3、 (基名+locale)找到相应的国际化资源文件,根据code指定的key,找到国际化资源文件中对应的value进行显示。
Springmvc把国际化基名放在beanFactory中
可以人为的设定locale信息,控制显示语言
手动控制显示语言实现国际化步骤:
1、 在src下添加国际化资源文件
2、在applicationContext.xml文件中配置国际化资源文件
<bean id=”messageSource” class=”^”>
3、使用标签处理国际化
必须导入标签库prefix,uri
<spring:message code=”国际化标签的key”/>
请求参数必须是locale,参数值必须是按照格式填写
Chinese.do?locale=zh_CN
Tomcat启动:
先创建Listener对象,对application对象的创建做监听
Application对象一创建就调用监听器的contextInitialized()方法
创建中央控制器DispatcherServlet,执行init()方法,读取主配置文件
创建请求分派器
创建后端控制器
创建拦截器LocaleChangeInterceptor(处理国际化)
创建国际化处理器对象SessionLocaleResolver
发送请求执行项目,默认调用index.jsp,
1、在index.jsp页面发送Chinese.do的请求
2、Tomcat创建request接收请求字符串,把http协议中的locale信息也封装到request。(Locale,Cookie,IP)
3、Tomcat自动将locale信息封装到locale对象设到session中
4、发现是/Chinese.do请求,tomcat把请求交给springmvc
5、springmvc截取请求路径/Chinese.do
6、先到webFactory中有没有拦截器拦截此请求
7、发现拦截请求,就找到拦截器对象LocaleChangeInterceptor,执行拦截器对象的preHandle方法,从request中拿到locale信息,更改locale信息
8、找到国际化处理器对象SessionLocaleResolver,将locale信息设定到Session中
9、在webFactory中找到请求分派器对象
10、通过分派器找到对应的后端控制器
11、执行后端控制器的handleRequest方法,返回ModeAndView对象
12、找到视图解析器,加上前缀和后缀,完成转向
在jsp页面使用国际化资源标签:
到BeanFactory中找到国际化资源对象拿到国际化资源文件的基名
到Session通过属性名中拿到Locale
(基名+locale)找到相应的国际化资源文件,根据code指定的key,找到国际化资源文件中对应的value进行显示。
Spring中的拦截器
作用:用来拦截Spring的相关请求
学习springmvc的拦截器目的:了解拦截器的特点,为国际化做准备
拦截器的语法
1、实现接口:HandlerInterceptor
必须实现接口中的方法:
afterCompletion:对结果进行拦截,最后执行,用于释放资源,处理异常,
postHandle:在执行完后端处理器的相应方法,进行拦截(找到视图定位器,生成视图之前)对结果数据和页面信息做处理。
preHandle:在请求进入后端处理器之前调用,处理国际化问题,处理编码问题(请求拦截)
2、继承适配器类:HandlerInterceptorAdapter
适配器是对接口中的方法进行了空实现,这里可以不实现三个方法,需要用到哪个就实现哪个方法。
类的继承和实现接口有什么不同:
接口和类不是同一个概念
语法:定义接口是interface,实现是implements ;使用class定义类继承是extends,
一个子接口能继承多个接口
一个子类只能继承一个接口
语义:接口是功能规范
父类对外不提供构造方法:构造方法私有
接口中没有构造方法
接口数据结构的特点:
接口中的属性:public static final
接口中的方法:public abstract
创建子类对象:会调用父类的构造方法为父类的私有属性初始化,采用动态绑定的机制;不会创建父类对象。
子接口继承多个父接口,父接口中有相同的方法,一个类实现子接口后,该实现哪个父类的方法?
使用预运算符,:,指定具体的方法。
Java提出的面向接口编程:
降低耦合性,提高可维护性
3、拦截器的配置:
<mvc:interceptors>
<mvc:interceptor>
//指定拦截的请求,如果path=”/*”表示拦截所有请求
<mvc:mapping path=”/login.do”/>
//配置拦截器的位置
<bean class=”cn.springmvc.myInterceptor”/>
</mvc:interceptor>
</mvc:interceptors>
Tomcat启动:(配置方式)
1、Tomcat一启动,创建DispatcherServlet对象
2、执行init()方法,创建web工厂,
3、在web工厂中会创建以下几个对象
创建分派器对象:(只有一个,在webFactory中)
后端处理器对象:(配置方式有多个,注解方式只有一个,在webFactory中)
视图定位器对象
拦截器对象(配置了几个拦截器就创建几个拦截器对象),并且设定拦截范围
发送请求:
4、发送请求:/login.do,交给tomcat处理
5、tomcat创建request内置对象接收请求(请求中包含Locale,Cookie,IP地址)
request.getRequestURL();拿到请求路径
request.getLocale();拿到请求中的locale信息
request.getRemoveAddr();拿到请求的ip地址
request.getCookies();拿到cookies,是个数组
6、将请求交给DispatcherServlet 处理,截取请求
7、先到webFactory中查看有没有拦截器对象,如果有就找到拦截器指定拦截的请求。