美文网首页
案例上手 Spring全家桶 学习笔记

案例上手 Spring全家桶 学习笔记

作者: Mossand | 来源:发表于2020-04-03 14:49 被阅读0次

Spring 的两大核心机制是 IoC(控制反转)和 AOP(面向切面编程),这两大核心机制也是 Java 设计模式的典型代表,其中 IoC 是工厂模式,AOP 是代理模式。

在 spring.xml 中,通过 ref 属性将其他 bean 赋给当前 bean 对象,这种方式叫做依赖注入(DI),是 Spring 非常重要的机制,DI 是将不同对象进行关联的一种方式,是 IoC 的具体实现方式,通常 DI 和 IoC 是紧密结合在一起的,因此一般说的 IoC 包括 DI。

集合属性通过 list 标签和 ref 标签完成注入,ref 的 bean 属性指向需要注入的 bean 对象。

IoC 中可以给类添加的注解有 4 种:@Controller、@Service、@Repository、@Component。在实际开发中,我们使用 @Controller、@Service、@Repository 分别表示 Controller 层、Service 层、DAO 层。

springmvc工作流程
(1)客户端请求被 DispatcherServlet(前端控制器)接收。
(2)根据 Handler Mapping 映射到 Handler。
(3)生成 Handler 和 HandlerInterceptor(如果有则生成)。
(4)Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给 DispatcherServlet。
(5)DispatcherServlet 通过 HandlerAdapter 调用 Handler 的方法做业务逻辑处理。
(6)返回一个 ModelAndView 对象给 DispatcherServlet。
(7)DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析成物理视图 View。
(8)ViewResolver 返回一个 View 给 DispatcherServlet。
(9)DispatcherServlet 根据 View 进行视图渲染(将模型数据填充到视图中)。
(10)DispatcherServlet 将渲染后的视图响应给客户端。


springmvc工作流程.png

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务方法进行映射,在控制器的类定义处以及方法定义处都可添加 @RequestMapping,在类定义处添加 @RequestMapping 注解,相当于多了一层访问路径。

@RequestMapping(value="/postTest",method=RequestMethod.POST)
public String postTest()

参数绑定,给参数列表添加 @RequestParam 注解。

@RequestMapping(value="paramsBind")
public String paramsBind(@RequestParam("name") String name,@RequestParam("id") int id)

Spring MVC 也支持 RESTful 风格的 URL 参数获取,将参数列表的注解改为 @PathVariable("name") 即可。

@RequestMapping(value="rest/{name}")
public String restTest(@PathVariable("name") String name)

Spring MVC 通过@CookieValue可以直接在业务方法中获取 Cookie 的值。

@RequestMapping("/cookieTest")
public String getCookie(@CookieValue(value="JSESSIONID") String sessionId)

Spring MVC 会根据请求参数名和 POJO 属性名进行匹配,自动为该对象填充属性值,并且支持属性级联。

Spring MVC 解决中文乱码很简单,在 web.xml 中添加过滤器即可。

<filter>  
    <filter-name>encodingFilter</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>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>

Spring MVC 默认以转发的形式响应 JSP,也可以手动进行修改,重定向:

@RequestMapping("redirectTest")
public String redirectTest(){
    return "redirect:/index.jsp";
}

转发:

@RequestMapping("forwardTest")
public String forwardTest(){
    return "forward:/index.jsp";
}

@ResponseBody 注解
将业务方法返回的对象,通过 HttpMessageConverter 接口转为指定格式的数据,JSON、XML等,直接返回字符串到客户端,不需要返回 jsp 页面。

处理 @ResponseBody 中文乱码:在 springmvc.xml 中配置消息转换器。

<mvc:annotation-driven >
    <!-- 消息转换器 -->
    <mvc:message-converters register-defaults="true">
      <bean class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
      </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

@RequestBody 注解
读取 HTTP 请求参数,通过 Spring MVC 提供的 HttpMessageConverter 接口将读取的参数转为 JSON、XML 格式的数据,绑定到业务方法的形参。

阿里的FastJson 的优势在于如果属性为空就不会将其转化为 JSON,数据会简洁很多。
如何使用 FastJson
(1)在 pom.xml 中添加 FastJson 依赖。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.61</version>
</dependency>

(2)在 springmvc.xml 中配置 FastJson。

<mvc:annotation-driven >
     <!-- 消息转换器 -->
     <mvc:message-converters register-defaults="true">
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
         <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
       </bean>
       <!-- 阿里 fastjson -->
       <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/>
     </mvc:message-converters>
</mvc:annotation-driven>

相关文章

网友评论

      本文标题:案例上手 Spring全家桶 学习笔记

      本文链接:https://www.haomeiwen.com/subject/ptihphtx.html