SpringMVC基础知识 (2)

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中查看有没有拦截器对象,如果有就找到拦截器指定拦截的请求。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwffj.html