springMVC学习回顾

2020.06.15

MVC设计模型

M:Model模型 JavaBean
V:View模型 html
C:Controller模型 Servlet

SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架。

速成小例子

web.xml

配置servlet
init-param为导入spring配置的坐标
load-on-startup为启动服务器就扫描xml配置
配置servlet-mapping

springmvc.xml

开启注解配置 context:component-scan
视图解析器 id=“internalResourceViewResolver” class=“org.springframework.web.servlet.view.InternalResourceViewResolver”
所要找的文件在哪里 :property name=“prefix” value="/WEB-INF/pages/"
所要找的文件的后缀 :property name=“suffix” value=".jsp"
开启springmvc框架注解的支持:mvc:annotation-driven

springMVC学习回顾_第1张图片

@RequestMapping

加在类上需要在连接前先加上类的部分
加在方法上就是正常连接即可
属性:

  • value和path:作用是一样的
  • method:用于指定请求的方式
  • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置一模一样。
  • headers:发送的请求中必须包含请求头
    小tips:

请求参数的绑定

传入参数时需要将传入的参数名与后台的参数名相同,才能正常传入。
可以直接传入类,让框架帮你进行赋值。
如果一个类中有其他的类存在,在前端传入参数时写成,类.xxx即可

如果要传入集合类型,只需要将传入的参数变成 list[0].xxx,map[0].xxx等形式

配置解决中文乱码的过滤器

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

自定义类型转换器

重写Converter接口的convert方法。
在springmvc.xml中配置

<bean id="ConversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.recruit.utils.StringToDateConverter"></bean>
            </set>
        </property>
    </bean>

再在springmvc.xml的开启springmvc框架注解的支持中配置

<mvc:annotation-driven conversion-service="ConversionService"/>

@RequestParam

作用:把请求中指定名称的参数给控制器中的形参赋值。
属性:value:请求参数中的名称,required:请求参数中是否必须提供此参数(默认值:True,表示必须提供,不提供会报错)。

@RequestBody

作用:用于获取请求体内容。直接使用得到的是key=value&key=value…结构的数据。get请求方式不适用。
属性:required:是否必须有请求体。默认值是:true。当取值为true时,get请求方式会报错。如果取值为false,get请求得到是null。

@PathVaribale

作用:用于绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。url支持占位符是spring3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。
属性:value:用于指定url中占位符名称,required:是否必须提供占位符。

@RequestHeader

作用:用于获取请求消息头。
属性:value:提供消息头名称,required:是否必须有次消息头。

@ModelAttribute

作用:该注解是SpringMVC4.3版本以后新加入的,它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。
属性:value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
如果没有返回值的情况下,需要将数据存入Map中。

@SessionAttribute

作用:用于多次执行控制器方法间的参数共享,只能作用在类上。
属性:value:用于指定存入的属性名称,type:用于指定存入的数据类型。

2020.06.15

返回值分类

String
void
ModelAndView:springmvc提供的对象

转发和重定向

请求的转发:return “forward:/WEB-INF/pages/success.jsp”;
重定向:return “redirect:/index.jsp”;

json数据

前端控制器,可以不拦截 一些静态资源

<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>

json解析的maven环境

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

异常处理

  1. 编写自定义异常类(继承Exception)
  2. 编写异常处理器(实现HandlerExceptionResolver)
  3. 配置异常处理器(跳转到提示页面)
    小tips:
  • 解决maven工程创建过慢,在创建时添加一个键值对 archetypeCatalog:internal

2020.06.17

自定义拦截器

过滤器:是servlet规范中的一部分,任何java web工程都可以使用。在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
拦截器:是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用。它是只会拦截访问的控制器方法,如果要访问的是jsp,html,css,image或者js是不会进行拦截的。
要自定义拦截器:需要实现HandlerInterceptor接口。

  1. 编写拦截器类,实现HandlerInterceptor接口(return ture为放行,false为拦截)
  2. 配置拦截器类。
<mvc:interceptors><mvc:interceptor>
要拦截的方法<mvc:mapping path="">
不要拦截的方法<mvc:exclude-mapping path="">
配置拦截器对象<bean class=""/>
</mvc:interceptor></mvc:interceptors>

preHandle:Controller方法处理之前
postHandle:Controller方法处理完之后
afterHandle:DispatcherServlet进行视图的渲染之后

你可能感兴趣的:(java,spring,java,spring,web)