SpringMVC
1.概念
	springmvc是一种web层mvc框架,它是spring的一个模块,拥有spring的特性。
	springmvc分离了控制器、模型对象、分派器以及处理程序对象的角色。
2.执行流程
    1)用户发送请求,被前端控制器(中央处理器)DipatcherServlet
         RequetMappderhandler(处理器映射器),解析映射路径 @RequestMapping
    2)反馈给前端控制器,---解析Controller ---里面方法(handler) 
    3)再次通过前端控制器---->RequestMapperAdpater:处理器适配器 调用里面的方法  
    4) 解析方法----底层原理: ModelAndView:模型视图组件--->设置视图 以及绑定数据 
       return "xx" ;
    5)告知前端控制器---->通过视图解析器---解析视图路径---
    6)响应给用户

3.三大组件
    DispatcherServlet:前端控制器 
    RequetMappderhandler(处理器映射器
    RequestMapperAdpater处理器适配器

配置springmvc视图解析器

<mvc:view-resolvers>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀和后缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</mvc:view-resolvers>
Springmvc接收前台请求参数
方式1: 路径携带参数
    url?参数名称1=参数值1&参数名称2=2
    注意事项: 当前方法形式参数名称必须和路径上的参数名称一致,否则获取不到
        public String getRequestFirst(Integer id){
            return " " ;
        }

方式2:直接HttpServletRequest对象获取参数 通过参数名称获取value
    路径携带参数
    url?参数名称1=参数值1&参数名称2=2
        public String secondRequest(HttpServletRequest request) {
            String id = request.getParameter("id");
            return " " ;
        }

方式3:前端路径携带参数  它和方法形参参数名称不一致
    使用springmvc提供的注解@RequetParam将路径上的参数绑定当形式参数名称
    url?参数名称1=参数值1&参数名称2=2
        public String thirdRequest(@RequestParam("sid") Integer id){
            return " " ;
        }

方式4:
    handler(在springmvc称为 "方法") ,方法形式参数直接接收一个实体
    路径携带参数
    url?参数名称(需要和实体的属性名称一致)=&参数名称2=...
    注意事项:实体类型的属性需要和路径携带参数的参数名称一致
        public String fourRequest(User user){
            return  " " ;
        }

方式5: 路径直接传参(并非路径携带参数)
    使用springMVC注解:@PathVariable("值")
    @RequestMapping("/sixReq/{id}/{username}/{address}") //结合RequestFul风格去写
        public String sixRequest( @PathVariable("id") Integer id){
            return " " ;
        }

方式6: 接收复杂数据 List集合
    tomcat8.0以上的版本不识别这种参数,出现400错误
    Springmvc不识别这种传参方式,只支持tomcat比较低版本  
    需要在tomcat解压目录中conf目录---该server.xml配置文件
         给port="8080" 后面配置三个属性
                     urlEcnoding="utf-8"
             路径上的特殊符号
                   relaxedPathChars="|{}[],%"
                   relaxedQueryChars="|{}[],%"

        public String  sevenRequest(UserList userList){
            return " " ;
        }

方式7: 接收数组方式 
    方法的形式参数名称需要和表单中的name属性一致
        public String getEightRequest(Integer[]  hobby){
            if(hobby!=null){
                for(Integer id:hobby){
                    System.out.println("id:"+id);
                }
            }
            return " " ;
        }

方式8: 使用json数据传参
    上面的方式:都是默认get提交
    接收前台提交的Json 数据,控制器具体的方法中需要将json数据封装到实体中
    必须在当前形式参数上---springmvc注解  @RequestBody
        //1)导入jar包:springmvc提供的jackson (三个包)
        //2)当前提交方式 Post提交
        @RequestMapping(value = "/getJsonParamter",method = RequestMethod.POST) //提交方式 post
        public String getRequestJsonParameter(@RequestBody User user){
            return " " ;
        }
springmvc处理响应的参数
方式1: 返回String: 通过视图解析器解析
	传统方式:借助底层servlet-api完成的
        public String firstResponse(HttpServletRequest request, HttpServletResponse response) {
            //1)通过requset对象接收前台参数
            //2)request本身域对象,里面存储数据
                request.setAttribute("name","name");
                return " " ;
        }

    
方式2: 返回值String
    Model:类似于 域对象 
    可以给当前具体的属性名称绑定内容 (Springmvc提供的Model)
        PageContext
        HttpServletRequet
        HttpSession  ( 钝化: 底层会向会向磁盘上文件中存储存储的内容,进行加密
                    活化:从磁盘上文件获取的内容 )
        ServletContext	setAttribute("属性名称",Object obj)
         
            public String secondResponse(Model model){
                model.addAttribute("name","name") ;
                return " " ;
            }
 
方式3:返回值String
    方法的形式参数: HttpSession 域对象,在一次会话中有效
        public String thirdResponse(HttpSession session){
            session.setAttribute("name","name") ; //底层钝化的过程
            return " " ;
        }

方式4:返回值是ModelAndView :视图模型组件
        public ModelAndView fourResponse(){
            //创建视图模型组件
            ModelAndView modelAndView = new ModelAndView() ;
            //设置模型数据
            modelAndView.addObject("money",13999) ;//相当于四个域对象 给里面绑定数据对应的内容
            //设置返回视图 交给前端控制器DispatcherServlet 借助于它来请求转发
            modelAndView.setViewName("hello");//参数为视图的路径,视图解析器解析前缀和后缀
            return  modelAndView ;
        }

方式5:返回json数据 给前端
    //springmvc注解
    @ResponseBody //将现在的user对象转换成json
        public User fiveResponse(){
            //模拟数据
            //封装User对象
            User user = new User() ;
            user.setId(1) ;
            return  user ;
        }
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐