zoukankan      html  css  js  c++  java
  • SpringMVC入门系列(2)-SpringMVC处理请求流程

    SpringMVC处理请求流程

    SpringMVC处理请求的流程

    image-20210701135857599
    • 发起some.do请求
    • tomcat (web.xml--url-pattern知道。*.do的请求给DispatcherServlet)
    • DispatcherServlet. (根据springmvc.xml配置知道some.do---doSone() )
    • DispatcherServlet把some.do转发给MyController中的doSome()方法
    • 框架执行dosome()把得到ModelAndView进行处理,转发到show.jsp

    SpringMVC执行过程

    1. tomcat启动,创建容器的过程通过load-on-start标签指定的1,创建Disaptcherservlet对象,DisaptcherServlet它的父类是继承HttpServlet的,它是一个serlvet,在被创建时,会执行init ()方法在init ()方法中
    //创建容器,读取配置文件
    WebApplicationContext ctx=new ClassPathxmlApplicationContext (" springmvc.xml");
    //把容器对象放入到ServletContext中
    getServletContext().setAttribute (key, ctx) :
    

    上面创建容器作用:创建@Controller 注解所在的类的对象,创建MyController对象,这个对象放入到springmvc的容 器中,容 器是hap,类似map.put ("myController ,MyController对象)

    1. 请求的处理过程
      1)执行servlet的service()
    proteoted void service (HttpServletRequest request, HttpServletRe sponse response)
    proteoted vold doservice (HttpservletRequst request, HttpservletResponse re sponse)
    Dispatcherservlet. doDispatch(request,response) {
        调用MyController的.doSome()方法;
    }
    

    配置视图解析器

    1. 当我们访问http://localhost:8080/ch0_hello_springmvc_war/的时候,可以仅仅希望通过点击跳转到some.do页面
    image-20210701142725970 image-20210701142947374
    1. show.jsp放在webapp下,该目录下用户都可以访问该页面
    image-20210701143130592
    1. 将show.jsp移动到WEB-INFview下,因为在WEB-INF下的jsp页面用户都没有权限进行访问
    image-20210701143916507
    1. 按照路径访问该地址http://localhost:8080/ch0_hello_springmvc_war/WEB-INF/view/show.jsp发现是404页面
    image-20210701144020482
    1. MyController中修改视图的位置
        @RequestMapping(value = "/some.do")
        public ModelAndView doSome(){
            //处理some.do请求了。相 当于service调用处理完成
            ModelAndView mv=new ModelAndView();
            //添加数据,框架在请求的最后把数据放入到request作用域。
            //request . setAttribute("msg" , "欢迎使用springmvc做web开发");
            mv.addObject("msg","欢迎使用springmvc做web开发!");
            mv.addObject("fun","指定的是doSome方法");
            //指定视图,指定视图的完整路径
            //框架对视图执行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
            mv.setViewName("WEB-INF/view/show.jsp");
            return mv;
        }
    
    1. 测试正常情况下可以访问的到
    image-20210701144651595 image-20210701144713768
    1. 我们发现视图的路径比较长,而且比较冗余,我们可以在springmvc.xml配置相应的视图解析器
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!--前缀:视图文件的路径-->
                <property name="prefix" value="WEB-INF/view/"></property>
                <!--后缀:视图文件的扩展名-->
                <property name="suffix" value=".jsp"></property>
            </bean>
    
    1. 修改MyController中绑定的视图
    @RequestMapping(value = "/some.do")
        public ModelAndView doSome(){
            //处理some.do请求了。相 当于service调用处理完成
            ModelAndView mv=new ModelAndView();
            //添加数据,框架在请求的最后把数据放入到request作用域。
            //request . setAttribute("msg" , "欢迎使用springmvc做web开发");
            mv.addObject("msg","欢迎使用springmvc做web开发!");
            mv.addObject("fun","指定的是doSome方法");
            //指定视图,指定视图的完整路径
            //框架对视图执行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
            mv.setViewName("show");
            return mv;
        }
    
    1. 实际的效果
    image-20210701154348918 image-20210701154424685
    1. 一个controller中可以有多个方法处理不同的请求,其中一个方法也可以处理多种请求
  • 相关阅读:
    CentOS7使用firewalld打开关闭防火墙与端口
    SELinux: Could not downgrade policy file
    CentOS 安装 semanage 命令
    漏洞: RHSA2017:3075: wget security update
    CentOS7增加或修改SSH端口号
    gnl's not lao 道德经 英文版
    当代 IT 大牛排行榜
    当代 IT 大牛排行榜
    2008 年个人回忆与总结
    Patch2 for NetBeans IDE 6.5 Now Available
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14959457.html
Copyright © 2011-2022 走看看