使用SpringMVC,必须在web.xml中配置好DispatcherServlet类
在context-param标签内,指定业务层的配置文件,被父Spring容器所应用
servlet声明DispatcherServlet
servlet-mapping中,配置请求后缀
DispatcherServlet有一些配置参数,默认情况下不需要指定,若需要可通过<servlet>的<init-param>指定
namespace 命名空间
contextConfigLocation 按照指定资源路径的方式指定
publishContext 默认值为true
运行体系:
DispatcherServlet的核心本质是一个Servlet
init方法在整个系统启动时运行,且只运行一次
service方法在系统运行的过程中处于侦听模式,侦听并处理所有的Web请求
继承体系:
依次继承FrameworkServlet和HttpServletBean
HttpServletBean是Spring对于Servlet最低层次的抽象
FrameworkServlet则是在HttpServletBean的基础之上进一步抽象,
通过FrameworkServlet真正初始化了一个Spring容器(WebApplicationContext),并引入到Servlet对象之中
DispatcherServlet通过initStrategies方法查找并装配Spring容器中用户定义的组件Bean
SpringMVC常用注解类:
RequestMapping
开发controller控制器类,使用@Controller注解标注,并在配置文件中用<context:component-scan />扫描
在Controller控制器类的类定义和方法定义处都可以标注@RequestMapping注解
DispatcherServlet截获请求后,就可以通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法
类级别的注解,可以不需要,若有了名称,则下面所有的请求路径前都要加入 例:@RequestMapping("user") /user/...
方法级别的注解,必须有,决定了这个方法处理哪个请求
属性: value - 代表具体的请求路径,可以省略value
method - 指定请求的method类型,get、post、put、delete等,只有指定哪种类型,使用了才能被触发,可以同时设定两种等
consumes - 指定请求的提交内容类型(Content-Type)
produces - 指定请求中必须包含某些参数值,才会触发这个处理方法
params - 指定请求中必须包含某些参数值,才会触发这个处理方法,参数中除了使用等号外,也可以使用不等号,表参数的值不等于的情况下触发方法
也可以不指定具体的值,直接使用paramName的格式,代表请求中必须包含参数名为paramName的参数,可以直接使用"!paramName"格式表请求不能包含名为paramName的请求参数
headers - 请求头Header中必须包含某些指定的参数值,才能让该方法处理请求
定义Ant风格和带占位符的URL:
@RequestMapping不仅支持标准的URL,还支持Ant风格和带{xxx}占位符的URL
/user/*/login:匹配/user/任意字符/login等
/user/**/login:匹配/user/任意字符/任意字符/login等,也可以省略为/user/login等
/user/login??:匹配/user/loginXX,一个问号代表一个任意字符等
/user/{userId}:匹配/user/任意字符等
/user/**/{userId}:匹配/user/xxx/xxx/任意字符,可以使用问号和星号、占位符同时使用等
@Component 通用标注
@Controller 标注web控制器
@Service 标注Service层的服务
@Respository 标注DAO曾的数据访问
以上注解可以带参数,也可以不带参数,代表名字,通过名字进行注入,都为类级别
在不清楚使用哪个注解的时候,可以统统使用Component注解,建议使用具体的注解类
在SpringMVC的配置文件中,通过context:component-scan使注解生效
使用@Resource或@Autowired注解实现注入
@Autowired注解:默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
若想使用名称装配,可以结合@Qualifier注解进行使用
@Resource注解:默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解卸载字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配;
当找不到与名称匹配的bean时才按照类型进行装配;但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配(属于J2EE,推荐使用)
@RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数
@RequestParam注解在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另一种使用注解@RequestParam直接获取
三个属性:value-参数的名字 required-是否必须有这个参数值 defaultValue-默认值
不带任何参数,表示需要的参数名与标注的变量名相同;可以通过required=false或true来要求@RequestParam配置的前端参数是否一定要传,默认为要传
参数类型尽量不要使用基本类型int、long等,而应该使用具体的对象类Integer、Long、String等
@CookieValue注解读取Cookies中的值,并且赋值给变量;有三个参数value-Cookie的名字,required-是否必须有这个Cookie值,defaultValue-如果没有默认值,defaultValue表示默认的值;不带任何参数,表示需要的参数名与标注的变量名相同
@SessionAttributes注解 若希望在多个请求之间公用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,Spring MVC会将模型中对应的属性暂存到HttpSession中;除了使用SessionAttributes,还可以直接用原生态的request.getSession()来处理session数据
@ResponseBody注解 用于将Controller的方法返回的对象,通过适当的HttpMessageConverter(转换器)转换为指定格式后,写入到Response对象的body数据区,返回如json、xml等时使用;
在Spring MVC配置文件中通过<mvc:annotation-driven />,给AnnotationMethodHandlerAdapter初始化7个转换器
常用转换器(后三个为重点):
ByteArrayHttpMessageConverter 读写二进制数据
StringHttpMessageConverter 将请求信息转换为字符串
ResourceHttpMessageConverter 读写org.springframework.core.io.Resource对象
SourceHttpMessageConverter 读写javax.xml.trasform.Source类型的数据
XmlAwareFormHttpMessageConverter 处理表单中的XML数据
Jaxb2RootElementHttpMessageConverter 通过JAXB2读写XML消息,将请求消息转换到标注XmlRootelement和XmlType的注解类中
MappingJacksonHttpMessageConverter 读写JSON数据
@RequestHeader注解可以把Request请求header部分的值绑定到方法的参数上
在context-param标签内,指定业务层的配置文件,被父Spring容器所应用
servlet声明DispatcherServlet
servlet-mapping中,配置请求后缀
DispatcherServlet有一些配置参数,默认情况下不需要指定,若需要可通过<servlet>的<init-param>指定
namespace 命名空间
contextConfigLocation 按照指定资源路径的方式指定
publishContext 默认值为true
运行体系:
DispatcherServlet的核心本质是一个Servlet
init方法在整个系统启动时运行,且只运行一次
service方法在系统运行的过程中处于侦听模式,侦听并处理所有的Web请求
继承体系:
依次继承FrameworkServlet和HttpServletBean
HttpServletBean是Spring对于Servlet最低层次的抽象
FrameworkServlet则是在HttpServletBean的基础之上进一步抽象,
通过FrameworkServlet真正初始化了一个Spring容器(WebApplicationContext),并引入到Servlet对象之中
DispatcherServlet通过initStrategies方法查找并装配Spring容器中用户定义的组件Bean
SpringMVC常用注解类:
RequestMapping
开发controller控制器类,使用@Controller注解标注,并在配置文件中用<context:component-scan />扫描
在Controller控制器类的类定义和方法定义处都可以标注@RequestMapping注解
DispatcherServlet截获请求后,就可以通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法
类级别的注解,可以不需要,若有了名称,则下面所有的请求路径前都要加入 例:@RequestMapping("user") /user/...
方法级别的注解,必须有,决定了这个方法处理哪个请求
属性: value - 代表具体的请求路径,可以省略value
method - 指定请求的method类型,get、post、put、delete等,只有指定哪种类型,使用了才能被触发,可以同时设定两种等
consumes - 指定请求的提交内容类型(Content-Type)
produces - 指定请求中必须包含某些参数值,才会触发这个处理方法
params - 指定请求中必须包含某些参数值,才会触发这个处理方法,参数中除了使用等号外,也可以使用不等号,表参数的值不等于的情况下触发方法
也可以不指定具体的值,直接使用paramName的格式,代表请求中必须包含参数名为paramName的参数,可以直接使用"!paramName"格式表请求不能包含名为paramName的请求参数
headers - 请求头Header中必须包含某些指定的参数值,才能让该方法处理请求
定义Ant风格和带占位符的URL:
@RequestMapping不仅支持标准的URL,还支持Ant风格和带{xxx}占位符的URL
/user/*/login:匹配/user/任意字符/login等
/user/**/login:匹配/user/任意字符/任意字符/login等,也可以省略为/user/login等
/user/login??:匹配/user/loginXX,一个问号代表一个任意字符等
/user/{userId}:匹配/user/任意字符等
/user/**/{userId}:匹配/user/xxx/xxx/任意字符,可以使用问号和星号、占位符同时使用等
@Component 通用标注
@Controller 标注web控制器
@Service 标注Service层的服务
@Respository 标注DAO曾的数据访问
以上注解可以带参数,也可以不带参数,代表名字,通过名字进行注入,都为类级别
在不清楚使用哪个注解的时候,可以统统使用Component注解,建议使用具体的注解类
在SpringMVC的配置文件中,通过context:component-scan使注解生效
使用@Resource或@Autowired注解实现注入
@Autowired注解:默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
若想使用名称装配,可以结合@Qualifier注解进行使用
@Resource注解:默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解卸载字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配;
当找不到与名称匹配的bean时才按照类型进行装配;但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配(属于J2EE,推荐使用)
@RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数
@RequestParam注解在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另一种使用注解@RequestParam直接获取
三个属性:value-参数的名字 required-是否必须有这个参数值 defaultValue-默认值
不带任何参数,表示需要的参数名与标注的变量名相同;可以通过required=false或true来要求@RequestParam配置的前端参数是否一定要传,默认为要传
参数类型尽量不要使用基本类型int、long等,而应该使用具体的对象类Integer、Long、String等
@CookieValue注解读取Cookies中的值,并且赋值给变量;有三个参数value-Cookie的名字,required-是否必须有这个Cookie值,defaultValue-如果没有默认值,defaultValue表示默认的值;不带任何参数,表示需要的参数名与标注的变量名相同
@SessionAttributes注解 若希望在多个请求之间公用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,Spring MVC会将模型中对应的属性暂存到HttpSession中;除了使用SessionAttributes,还可以直接用原生态的request.getSession()来处理session数据
@ResponseBody注解 用于将Controller的方法返回的对象,通过适当的HttpMessageConverter(转换器)转换为指定格式后,写入到Response对象的body数据区,返回如json、xml等时使用;
在Spring MVC配置文件中通过<mvc:annotation-driven />,给AnnotationMethodHandlerAdapter初始化7个转换器
常用转换器(后三个为重点):
ByteArrayHttpMessageConverter 读写二进制数据
StringHttpMessageConverter 将请求信息转换为字符串
ResourceHttpMessageConverter 读写org.springframework.core.io.Resource对象
SourceHttpMessageConverter 读写javax.xml.trasform.Source类型的数据
XmlAwareFormHttpMessageConverter 处理表单中的XML数据
Jaxb2RootElementHttpMessageConverter 通过JAXB2读写XML消息,将请求消息转换到标注XmlRootelement和XmlType的注解类中
MappingJacksonHttpMessageConverter 读写JSON数据
@RequestHeader注解可以把Request请求header部分的值绑定到方法的参数上