zoukankan      html  css  js  c++  java
  • springmvc小结(上)

    1.springmvc的整体结构以及流程

    ①.前端控制器:只需要在web.xml文件中配置即可

          作用:接受请求,处理响应结果,转发器,中央处理器

    ②.处理器映射器:根据请求的url找到相应的Handler

    ③.处理器适配器:调用处理器Handler/controller的方法

    ④.处理器Handler(Controller)后端控制器,接受用户请求的数据,调用业务方法处理请求

    ⑤.视图解析器ViewResolver:视图解析,把逻辑视图转换为真正的物理视图

    ⑥.视图View:把数据展现给用户

     2.默认的注解

    在不进行配置的的时候有默认配置的在此文件中,默认进行配置。

    # Default implementation classes for DispatcherServlet's strategy interfaces.
    # Used as fallback when no matching beans are found in the DispatcherServlet context.
    # Not meant to be customized by application developers.
    org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
    org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
    org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,
         org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
    org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,
         org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,
         org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
    org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,
         org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,
         org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
    org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
    org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
    org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
    在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。
     
    在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。
     
    在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。
     
    在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

     3.<mvc:annotation-driven>

     默认是:基于注解映射器和基于注解的适配器

     支持类型转换ConversionService

    @NumberFormat,DateTimeFormate

    @Validdate,JSR303校验

    @RequestBody,@ResponseBody

     4.@RequestMapping

    用来处理请求地址(URL)映射的注解,可以在类或者方法上面

    如果在类上就代表所有的请求方法URL都必须有类上的URL地址作为父路径

    属性:

    ①.value和path一样,指定请求的URL

         method:指定请求的不同方式:GET,POST,PUT,DELETE....

    ②.指定请求和响应的MedlaType

      consumes:指定请求内容格式:Content-Type=application/json

      produces:指定响应内容格式:application/json;charset=UTF-8

    ③.

      params:指定request中必须包含某些参数值,包含方法处理

      handlers:指定request中必须包含指定的header,包含才能处理

    同时还可以窄化请求映射:即把其写在类上面

    @RequestMapping("/user")
    public class  user{
        @RequestMapping("/login")
        public String login(){
        ...
        }
    }

    5.前端控制器url-pattern

    前端控制器的配置:

    ①. * .扩展名,比如*.action,不会导致静态的资源文件被拦截的问题。但是不支持RESTFULL风格的编码
    
    ②. /  支持RESTFull风格,但是会导致静态的资源文件被拦截
    
    ③./* ,错误的方式,可以请求到Controller方法,但是跳转到JSP时会被拦截,JSP不能正常显示
    ②. /  支持RESTFull风格,但是会导致静态的资源文件被拦截
    因为在tomcat文件中处理静态文件资源的servlet叫default,二default的映射路径就是    /.
     
    启动项目的时候:
        1.启动Tomcat加载web.xml文件     /
        2.启动i项目时候 加载web.xml文件   /
     
    项目中的web.xml文件覆盖了 Tomcat中的web.xml配置文件映射规则

    解决方法:

    1.在项目总的web.xml文件

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern> *.jsp</url-pattern>
    <servlet-mapping>
    
    ...
    jsp
    png

    2.使用mvc中的标签

    在springmvc.xml文件中

    <!--处理默认的静态资源的文件请求 -->
    <mvc:default-servlet-handler/>
    将mvc上下文中定义一个DefaultServletHttpRequestHandler,对所有的前端控制器的请求组筛选和盘查,
    如果发现没有经过映射请求,就交给Tomcat的默认servlet来处理

    3.资源映射

    <!--资源映射 -->
    <mvc:resources  location=""   mapping=“”     />
    自己来处理静态的资源,而且还多了很多的功能
    方法2.是交给Servlet来处理

    6.请求和响应

     1.响应处理:

    ①.返回为void

         @RequestMapping("/test1")
         public void test1(HttpServletRequest  req,HttpServletResponse resp) throws ServletException,  IOException{
               
               //请求转发
               req.getRequestDispatcher("").forward(req, resp);
               
               //请求的重定向
               resp.sendRedirect("");
               
               //设置共享数据
               req.setAttribute("", "");
               
               //输出json
               resp.setContentType("text/json;charset=utf-8");
               resp.getWriter().append("");
         }
    //返回为void文件下载
         @RequestMapping("/test2")
         public void test2(OutputStream out) throws IOException{
               Files.copy(Paths.get("D:/Photo/bg.jpg"), out);
         }

    ②.返回ModelAndView

     @RequestMapping("/test3")
         public ModelAndView test3(){
               ModelAndView mv = new ModelAndView();
               mv.setViewName("/WEB-INF/views/test.jsp");
               
               //设置共享的数据的key和value
               mv.addObject("msg", "test3....");
               //设置共享数据的value,此时会把value类型的首字母小写作为key   key=string
               mv.addObject("只有值的共享数据");
               return mv;
               
         }
    ③.返回String
        //返回String
         //需要结合Model进行结合使用
         @RequestMapping("/test4")
         public String test4(Model model){
               
               model.addAttribute("msg", "return string");
               
               return "test";
         }

    2.请求跳转

    ①.请求转发

    原理:req.getRequestDispatcher("").forward(req, resp);
         //请求转发
         //浏览器的地址不变还可以共享数据
         @RequestMapping("/test5")
         public String test5(Model model){
               
               model.addAttribute("msg", "请求转发");
               
               return "forward:/index.jsp";
         }

    ②.URL重定向

    地址栏改变,数据不能共享

    //重定向
         @RequestMapping("/test6")
         public String test6(Model model){
               
               model.addAttribute("msg", "请求重定向");
               
               return "redirect:/index.jsp";
         }
    请求转发和重定向:
    区别:
    转发:地址栏不变,可共享数据
    重定向:地址 改变,不能共享数据
    访问资源的时候前面带上   /   表示绝对路径  从根路径去寻找资源
    访问资源的时候不带    /    表示相对路径, 从上一级上下文进行寻找资源 
     
    ③.传统开发中,重定向的时候,进行两次的不同请求,所以不能进行数据的共享
    假设要求重定向还要共享数据

    note: Flash属性,只能使用从contrlooer 重定向到controller,不能到jsp

     3.请求参数处理

     ①.数组

         //数组的形式
         //接受一个参数有多个值得情况
         @RequestMapping("/test4")
         public void test4(Long [] ids){
               System.out.println(Arrays.asList(ids));
         }

     ②.pojo

         @RequestMapping("/test4")
         public void test4(User user){
               System.out.println(Arrays.asList(user));
         }
  • 相关阅读:
    STM32 CubeMX 学习:004-PWM
    MyBase 7.1 可用的 Markdown 配置表
    STM32 CubeMX 学习:003-定时器
    STM32 CubeMX 学习:002-外部中断的使用
    Kubernetes资源对象之RS
    Kubernetes资源对象之Deployment
    Kubernetes基础资源对象之service
    Kubernetes资源对象之RC
    Kubernetes基础资源对象之Pod
    libev
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/9973930.html
Copyright © 2011-2022 走看看