SpringMVC学习

来源:互联网 发布:java 抓取网页内容 编辑:程序博客网 时间:2024/06/03 20:21

初期环境配置

【1】导入所需jar包

    –commons-logging-1.1.3.jar    –spring-aop-4.0.0.RELEASE.jar    –spring-beans-4.0.0.RELEASE.jar    –spring-context-4.0.0.RELEASE.jar    –spring-core-4.0.0.RELEASE.jar    –spring-expression-4.0.0.RELEASE.jar    –spring-web-4.0.0.RELEASE.jar    –spring-webmvc-4.0.0.RELEASE.jar

【2】配置项目总配置文件web.xml

配置前端控制器 DispatcherServlet 默认加载 /WEB- INF/<servletName-servlet>.xml 的 SpringMVC 配置文件
可以通过加载初始化参数配置<init-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:springmvc.xml</param-value></init-param>

【3】配置SpringMVC配置文件

<!-- 配置SpingMVC容器要扫描的包! -->        <context:component-scan base-package="XXX"></context:component-scan>

配置视图解析器(InternalResourceViewResolvers)

将逻辑视图转换成实际的物理视图,做一个转发操作<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <property name="prefix" value="/WEB-INF/views/"></property>    <property name="suffix" value=".jsp"></property></bean>

使用SpringMVC

【1】@RequestMapping 映射请求 Spring MVC

    1、使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求    2、在控制器的类定义及方法定义处都可标注    >>DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法    3、映射请求参数、请求方法或请求头        >>params     params={"",""}        ①出现在@RequestMapping中表示请求必须包含名为XXX的请求参数        ②{"!XXX"}表示请求不能包含名为 XXX 的请求参数        ③{"xxx!=values"}表示请求包含名为XXX的请求参数,但其值不能为 values    4、Ant 风格资源地址支持 3 种匹配符:        ?:匹配文件名中的一个字符        *:匹配文件名中的任意字符        **:** 匹配多层路径

【2】@PathVariable 映射 URL 绑定的占位符

    通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:    URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中,需要注意的是:该注解的value属性值要与占位符保持一致

【3】REST请求风格

    GET、POST、PUT、DELETE

POST请求如何转化为put请求和delele请求

(1)在web.xml文件中配置

<filter>        <filter-name>hiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping>        <filter-name>hiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern></filter-mapping>

(2)在表单域中需要携带一个name值为_method,value值为put或者delete的参数

<form action="${pageContext.request.contextPath }/order/1" method="post">        <input type="hidden" name="_method" value="put"/>        <input type="submit" value="Submit"/></form>

【4】@RequestParam 接收请求的参数
@CookieValue处理方法入参绑定某个 Cookie 值

    相当于Servlet的getParameter()方法    用在方法入参内    三个默认属性:    >>value:这个字段要与请求参数的name属性值一致    >>required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带    >>defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值

【5】@RequestHeader 获取请求头信息

    用在方法入参内    value:这个字段要与请求参数的name属性值一致!    required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带!    defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值!

【6】针对POST请求乱码的处理
在web.xml文件中加上CharacterEncodingFilter

    <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>   

【6】MVC 的 @Controller标注的方法可以接受哪些 ServletAPI 类型的参数

    HttpServletRequest    HttpServletResponse    HttpSession 

【7】POJO 对象绑定请求参数值

    Spring MVC 会按请求参数名和POJO属性名进行自动匹配,支持级联

【8】模型数据–ModelAndView

  • 返回值是String类型还是ModelAndView类型,SpringMVC框架执行目标Handler方法之后都会将返回值解析为ModelAndView
  • 我们放入到Map或者Model、ModelMap中的数据都会放入ModelAndView对象中,作为Model使用
  • 操作步骤
    • 添加模型数据addObject
    • 设置视图setViewName

【9】SpringMVC如何实现重定向和转发

  • redirect:/success.jsp 重定向
  • forward:/success.jsp 转发
  • 在spingmvc配置文件中配置
    • mvc:view-controller path=”/j1sp” view-name=”success”
      此标签用于访问静态资源
    • 请求不经过Controller,直接进入另一个目标页面
    • 但是此时原来访问正常的@RequestMapping URL现在却不能正常访问
      需要加入mvc:annotation-driven标签

【10】@SessionAttributes

  • SpringMVC将在模型中对应的属性放入到reuqest域的同时暂存到 HttpSession 中

【11】@ModelAttribute

  • 方法定义上使用 @ModelAttribute 注解
    • Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
  • 方法的入参前使用 @ModelAttribute 注解
    • SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中
    • SpringMVC会以value为key,POJO类型的对象为value,存入到request域

【12】SpringMVC确定目标方法POJO类型入参的过程

  1. 确定一个key:

    1. 若目标方法的POJO类型的参数木有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写。
    2. 若使用@ModelAttribute修饰,则key为@ModelAttribute注解的value属性值.
  2. 在implicitModel中查找key对应的对象,若存在,则作为入参传入

    1. 若在@ModelAttribute标记的方法中在Map保存过,且key和1确定的key一致,则会获取到
  3. 在implicitModel中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute注解修饰,若使用了该注解,且@SessionAttributes注解的value属性值中包含了key,则会从HttpSession中来获取key所对应的value值,若存在则直接传入到目标方法的入参中,若不存在则将抛出异常。

  4. 若Handler没有标识@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,则会通过反射来创建POJO类型的参数,传入为目标方法的参数。

    • SpringMVC会把key和POJO对象保存到implicitModel中,进而会保存到request域中!

【13】SpringMVC 的表单标签form:form

  • 需要表单回显或者使用下拉列表的时候,就使用form表单标签
  • form:radiobuttons:单选框组标签,用于构造多个单选框

  • items:可以是一个 List、String[] 或 Map

  • itemValue:指定 radio 的 value 值。可以是集合中 bean 的一个 属性值

  • itemLabel:指定 radio 的 label 值

  • delimiter:多个单选框可以通过 delimiter 指定分隔符

【14】自定义视图

  • 实现view接口或者继承AbstractView抽象类,并加入到IOC容器中
  • 在springmvc配置文件中配置BeanNameViewResolver视图解析器
  • SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常

【15】自定义类型转换器

  • 实现Converter< S,T >接口并加入到SpringMVC的IOC容器中
  • 配置自定义转换器到FormattingConversionServiceFactoryBean工厂中
  • <!-- 将ConversionService再作为annotation-driven的一个属性存在! -->    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>    <!-- 配置ConversionService -->    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">        <property name="converters">            <set>                <ref bean="employeeConverter"/>            </set>        </property>

【16】SpringMVC如何处理JSON数据

  • 加入json的3个jar包
    • jackson-annotations-2.1.5.jar
      jackson-core-2.1.5.jar
      jackson-databind-2.1.5.jar
  • 编写目标方法,使其返回 JSON 对应的对象或集合
  • 在方法上添加 @ResponseBody 注解

【17】自定义拦截器

  • 自定义实现类实现 HandlerInterceptor接口
    • preHandle():该方法在目标方法之前被调用
    • postHandle():调用目标方法之后,但渲染视图之前被调用
    • afterCompletion():渲染视图之后被调用
  • 在springmvc配置文件中配置相对应的拦截器

     <mvc:interceptors>    <!--配置自定义拦截器 ,所有的路径都拦截 -->    <bean class="com.neuedu.springmvc.filter.MyFilter"></bean>    <!-- 关于拦截器的配置问题 ,可以通过<mvc:interceptor>来配置使用哪个拦截器来【不】拦截的路径-->    <mvc:interceptor>        <!-- 用<mvc:mapping>标签指定要拦截的路径 -->        <mvc:mapping path="/employ"/>        <!-- 指定使用哪个拦截器进行拦截 -->        <bean class="com.neuedu.springmvc.filter.SecondFilter"></bean>    </mvc:interceptor></mvc:interceptors>
原创粉丝点击