栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springMVC nodes

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springMVC nodes

springMVC:基于spring的一个框架,实际上就是spring的一个模块,专门做web开发的
理解为servlet的一个升级
springMVC能够创建对象,放到容器中(springMVC容器),springMVC容器中放的是控制器对象
@Controller创建控制器对象,把对象放在springMVC容器中,把创建的对象当作控制器使用,这个控制器对象能接受用户的请求,显示处理结果,就当做是一个servlet使用
@Contorller注解创建的是一个普通对象,不是servlet,springMVC赋予控制器对象一些额外的功能
springMVC中有一个对象是servlet:DispatherServlet:负责接受请求,之后DiapatherServlet把请求转发给Controller对象,最后是Controller对象处理

  1. 加入的依赖
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

        
            org.springframework
            spring-webmvc
            5.2.5.RELEASE
        
  1. springmvc.xml中声明组件扫描器
    

    

        

        

    
  1. web.xml中创建中央调度器




    
        springmvc
        org.springframework.web.servlet.DispatcherServlet

        

            contextConfigLocation

            classpath:springmvc.xml
        

        1
    
    
        springmvc

        *.do
    




  1. 创建普通Controller类
@Controller
public class MyController {
    

    
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();
        //添加数据,框架在请求的最后把数据放到request作用域,
        //request.setAttribute("msg","欢迎使用springmvc做web开发");
        modelAndView.addObject("msg","欢迎使用springMvc做web开发");
        modelAndView.addObject("fun","执行的是dpSome方法");

        //指定视图,指定视图的完整路径
        //框架对视图执行的forward操作,request.getRequestDiapather("/show.jsp").forward();
        modelAndView.setViewName("/show.jsp");
        
        //当配置了视图解析器,可以使用逻辑名称(文件名),指定视图
        //框架会使用视图解析器前缀+后缀 组成完整路径,就是字符串连接
        modelAndView.setViewName("show");

        return modelAndView;
    }
}

WEB_INF下的文件对用户是不开放的

普通类Controller的注解介绍

  1. 设置模块名称和请求方式
@RequestMapping("/test")
@Controller
public class MyController {
    
    @RequestMapping(value = "/some.do",method = RequestMethod.GET)
    public ModelAndView doSome(HttpServletRequest request,
                               HttpServletResponse response,
                               HttpSession session){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","欢迎使用springMvc做web开发");
        modelAndView.addObject("fun","执行的是dpSome方法");
        modelAndView.setViewName("show");
        return modelAndView;
    }
}
  1. 接受请求参数

HttpServletRequest
HttpServletResponse
HttpSession
用户提交的数据
-----逐个接收
-----对象接收

    
    @RequestMapping(value = "/some.do",method = RequestMethod.POST)
    public ModelAndView doSome(String name,Integer age){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("myname",name);
        modelAndView.addObject("myage",age);
        modelAndView.setViewName("show");
        return modelAndView;
    }
  1. 设置过滤器,解决post乱码问题
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter

        
            encoding
            utf-8
        

        
            forceRequestEncoding
            true
        

        
            forceResponseEncoding
            true
        
    
    
        characterEncodingFilter

        
    @RequestMapping(value = "/some.do",method = RequestMethod.POST)
    public ModelAndView doSome(@RequestParam("pname") String name,
                               @RequestParam("page") Integer age){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("myname",name);
        modelAndView.addObject("myage",age);
        modelAndView.setViewName("show");
        return modelAndView;
    }
  1. 对象接收参数
    
    @RequestMapping(value = "/some.do",method = RequestMethod.POST)
    public ModelAndView doSome(Student myStudent){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("myname",myStudent.getName());
        modelAndView.addObject("myage",myStudent.getAge());
        modelAndView.setViewName("show");
        return modelAndView;
    }
  1. 返回值ModelAndView

如果处理器方法处理完后,需要跳转到其他资源,且又要在跳转的资源间传递数据,此时处理器方法返回ModelAndView较好,需要在方法中添加ModelAndView对象,否则有的多余

  1. 返回值String
    String表示视图,可以逻辑名称,也可以是完整视图路径
    
    @RequestMapping(value = "/some.do",method = RequestMethod.POST)
    public String doSome(Student myStudent){

        System.out.println("doReturnView,name="+myStudent.getName()+"age="+myStudent.getAge());
        //show :逻辑视图名称,项目中配置了视图解析器
        //如果使用完整的视图路径,项目中不能使用视图解析器
        //框架对视图执行forward转发操作
        return "show";
    }
  1. 返回值是void(可以用于ajax )

不能表示数据,也不能表示视图
处理ajax时,可以使用void返回值,通过HttpServletRequest输出数据。响应ajax
ajax请求服务端返回的就是数据,和视图无关

//使用json和ajax
  1. 返回对象Object
    返回对象,是数据和对象无关,可以响应ajax请求

//springmvc处理器方法返回object,可以转为json输出到浏览器,响应ajax的内部原理

  1. 返回List对象
//跟返回对象的方式是一样的
  1. 返回Map(一般不用)
  2. 返回String数据
 

补充:web中有一个default配置,加载静态资源和未映射到其他servlet的请求

访问静态资源的问题
中央调度器的地址使用"/"

当项目中使用了"/",会代替tomcat中的default,tomcat不会自动加载静态资源和未映射到其他servlet的请求

  1. 第一种静态资源处理方式
    
    
  1. 第二种静态资源处理方式
     

3.多个拦截器的执行顺序
有先后顺序

4.拦截器和过滤器的区别

1.过滤器是servlet中的对象,拦截器是框架中的对象
2.过滤器是tomcat服务器创建的对象,拦截器是springmvc容器中创建的对象
3.过滤器有一个执行点,拦截器有3个执行点
4.过滤器实现filter接口,拦截器实现HandlerInterceptor接口
5.过滤器是在拦截器之前先执行的,只有通过post方法才会通过中央调度器
6.过滤器可以处理jsp,js,html等,拦截器主要是针对Controller对象,如果请求不能被DispatcherServlet接收,这个请求不会被拦截器接收

springmvc内部处理请求的流程

1.用户发起请求
2.DispatcherServlet接受请求,把请求转发给处理器映射器,
-------处理器映射器,是springmvc中的对象,框架把实现了HandlerMapper的类都叫做映射器
------处理器映射器的作用,根据请求从springmvc容器中获取处理器对象,getbean,把找到的对象放到一个叫做处理器执行链的类中保存
---------HandlerExcutionChain:类中保存着,处理器对象(controller)和羡慕中所有的拦截器list
3.DispatcherServlet把执行链中的对象交给处理器适配器对象,
------处理器适配器:springmvc中的对象,需要是实现HandlerAdapter接口
处理器适配器作用,执行处理器方法,(Controller.dosome()方法执行)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号