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

springmvc介绍(spring springmvc)

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

springmvc介绍(spring springmvc)

SpringMVC Note
Authorychhh_

由于要准备考研,学习技术的速度只能放慢,妈的,spring + springmvc学了两个月,我真TM服了

初步理解

  • springMVC的作用

    对于Javaweb的控制,客户端即浏览器发送请求给Tomcat,对于Tomcat对数据的处理包含公有部分和特殊处理部分

    而springMVC【前端控制器】就是对公共部分处理的一次封装,即简化对公共部分的处理,提高代码的可重用性

    对于私有特性,在导入springMVC后即为 pojo ==> controller,将pojo放置在spring的容器中

    配置spring-mvc的xml文件,即配置组件扫描

  • 导入springMVC的依赖坐标

    
               org.springframework
               spring-webmvc
               5.0.5.RELEASE
    
    
  • 配置全局初始化参数

    对于全局初始化参数的配置分为

      key - value 型

      
      	key
          value
      
      

      servlet型

      
      	servletName
          servlet-all-path
          
          	attribute
              value
          
      
      
      	servlet-name
          path 
      
      
      

      listerner

      类比servlet配置方式相同

    在java后台中获取初始化context

    ServletContext context = this.getServletContext();
    // 再通过context对对象进行获取即可
    

    配置springMVC的转发servelet

    将配置好包扫描的SpringMVC文件加载到初始化的servlet中

    
            DispatcherServlet
            org.springframework.web.servlet.DispatcherServlet
            
                contextConfigLocation
                classpath:spring-mvc.xml
            
            1
    
    
    
    
            DispatcherServlet
            /
    
    
    组件解析

  • 在Controller中的路径注意事项

    @RequestMapping("/quick")
        public String save(){
            System.out.println("saving..");
            return "/sucess.jsp";  
            
    
        }
    

    对于Controller的的默认访问资源的方式为转发,因为默认省略的前缀参数为"forward:",若需要更改为重定向需要声明前缀为"redirect:",更换为跳转的访问方法

    只需要在xml中配置DispatcherServlet,其余的几大组件只需要在spring-mvc中配置即可

  • 注解参数

    ResultMapping
    value路径,默认填充参数未引号内,若需要多个路径,则必须添加该参数名
    method请求方式:RequestMethod.POST / RequestMethod.GET【只有指定的请求方式才可以进行访问】
    params限定请求条件,params={“username”} --> 请求中必须携带username的参数;params={“age”!20} --> age参数的值不能是20
    数据响应

  • 页面跳转

    通过字符串跳转

    此种方法通过返回的字符串和前后缀拼合进行跳转

    前缀和后缀均可以通过ViewResolver进行设置

    通过ModelAndView进行跳转

    返回ModelAndView对象

    需要将ModelAndView进行拆解开

      model:封装数据

      view:展示数据

        函数内构造ModelAndView对象

         	@RequestMapping("/testModel1")
            public ModelAndView getModel(){
                ModelAndView modelAndView = new ModelAndView();
                modelAndView.addObject("modelData","ych");
                modelAndView.setViewName("/sucess.jsp");
        
                return modelAndView;
            }
        

        由SpringMVC构造并传递ModelAndView

         	@RequestMapping("/testModel2")
            public ModelAndView getModel2(ModelAndView modelAndView){
                return modelAndView;
            }
        

        使用Model + 字符串跳转

         	@RequestMapping("/testModel3")
            public String rePlusMolde(Model model){
                model.addAttribute("modelData","66");
                return  "/sucess.jsp";
            }
        

        也可以在Controller中使用Request和Response即web端创造的对象进行数据响应

         	@RequestMapping("/testModel4")
            public void request(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
                request.setAttribute("modelData","oooooo");
                request.getRequestDispatcher("/sucess.jsp").forward(request,response);
            }
        
  • 回写数据

    直接返回字符串

    可以通过添加response的方式进行字符串的输出

    通过直接返回字符串形式,但是需要添加@ResponseBody注解

    	@RequestMapping("/testModel5")
        @ResponseBody
        public String reStr(){
            return "fuck";
        }
    

    对Json字符串的返回

    通过第三方插件工具将对象转换为JSON串即可,与传递普通字符串相同的方法进行传递

    返回对象的集合

    通过在函数中调用第三方工具进行json串的返回

    通过在spring-mvc中配置处理器适配器,将jksonConvert注入到原生的handlerAdapter中,从而在函数中返回对象即可直接返回json串

     
            
                
                    
                
            
        
    

    通过在配置文件中添加配置简化注入过程即通过简短的代码完成默认的jkson的注入工作

    
    
    	@RequestMapping("/testModel7")
        @ResponseBody
        public User getUser(){
            User user = new User();
            user.setName("8888");
            return user;
        }
    
    数据请求

  • 获得基本类型的参数

    在Controller方法中的参数和请求的参数若一致在,则springmvc会自动的进行解析

    	@RequestMapping("/testModel8")
        @ResponseBody
        public void getParam(String user){
            System.out.println(user);
        }
    
  • 获得POJO类型的参数

      可以通过获得字符串,在函数体中调用第三方工具将字符串转为对应的pojo对象

      传递的参数的参数名与pojo的参数名对应,则可以在方法的参数中直接传递对象,对象的get/set方法需添加完整

        	@RequestMapping("/testModel9")
          @ResponseBody
          public void getParam2(User user){
              System.out.println(user);
          }
      
  • 获得数组类型的参数

    只需数组的名称与请求参数的名称对应一致即可

    	@RequestMapping("/testModel10")
        @ResponseBody
        public void getArr(String name[]){
            System.out.println(Arrays.toString(name));
        }
    
  • 获得集合类型的参数

    如果发送的为普通类型的请求,则需要将集合请求封装在一个pojo对象内部,且对象的属性名需要与请求的名称相同,且需要设置get/set方法

    如果发送的是ajax请求,则可以直接获得同名的集合参数,但在Controller的方法中集合参数前需要添加RequestsBody参数

     	@RequestMapping("/testModel11")
        @ResponseBody
        public void getAjaxParams(@RequestBody List users){
            System.out.println(users);
        }
    
  • 对于开放资源的访问

    **问题引入:**对于使用了SpringMVC框架后对于某些静态资源的访问,无法获得,当SpringMVC不给予权限访问静态资源时,此次访问设定为失败的访问或找不到页面资源即404

    解决办法:

      当使用了SpringMVC框架后,需要对某些静态资源进行开放,即对某些请求不通过DispatcherServlert进行处理,而是通过默认的web访问方式进行开发

      在spring-mvc的配置文件中添加代码,对某些资源的请求进行开放

         
        

        此处代码即开放js目录下的静态资源,使得对于dispatcherservlet的请求可以直接成功

       
      

      此处代码为当springmvc找不到对应的资源区使用tomcat默认的适配器寻找静态资源,从而间接的请求成功

  • 解决数据乱码问题

    通过设置全局的filter进行过滤,从而所有的数据遵循utf-8的编码格式

    	
            CharacterEncodingFilter
            org.springframework.web.filter.CharacterEncodingFilter
            
                encoding
                UTF-8
            
        
        
            CharacterEncodingFilter
            /*
        
    
  • 请求参数绑定

    绑定对应的参数,使得即使请求名称和方法参数不同也可以进行映射

    方法:添加注解@RequestParam

    RequestParam
    value绑定请求参数
    required在指定请求发送时是否必须包括
    defaultValue在没有指定请求参数时,则使用默认值
     	@RequestMapping("/testModel12")
        @ResponseBody
        public void bindParam(@RequestParam(value = "username",required = false,defaultValue = "ych")String name){
            System.out.println(name);
        }
    
  • 获得具有Restful风格的参数

    Restful风格【url + 方法】

    方法名作用
    get请求参数
    post新建参数
    put更新参数
    delete删除参数

    在springmvc框架重使用占位符和**@PathVaraible解析占位符**进行使用

     	@RequestMapping("/testModel13/{name}")
        @ResponseBody
        public void resetfulParam(@PathVariable("name")String username){
            System.out.println(username);
    
        }
    
  • 自定义类型转换器

    对于有些格式需要进行转化再让后台进行处理,需要配置转换器

      编写实现转换器接口的实现类

      public class DateConverter implements Converter {
          @Override
          public Date convert(String s) {
              SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
              Date date = null;
              try {
                  date = format.parse(s);
              } catch (ParseException e) {
                  e.printStackTrace();
              }
              return date;
          }
      }
      
      

      将转换器放入工厂转换器中

      	
              
                  
                      
                  
              
          
      

      注册驱动

      
      

      测试

       	@RequestMapping("/testModel14")
          @ResponseBody
          public void converterTest(@RequestParam(value = "date",required = false) Date date){
              System.out.println(date);
          } 
      
  • 获得Servelt相关的API

    直接注入Servelt相关的参数于方法参数中

      HttpServletRequestHttpServletResponseHttpSession
  • 获取请求头信息

    通过Servelt相关的API进行获取

    通过添加注解@RequestHeader直接绑定到参数中

    	@RequestMapping("/testModel15")
        @ResponseBody
        public void getHeader(@RequestHeader("User-Agent")String user_agent){
            System.out.println(user_agent);
    
        }
    

    若需获得cookie需要绑定新的注解@cookievalue

     	@RequestMapping("/testModel16")
        @ResponseBody
        public void getcookie(@cookievalue("JSESSIONID")String jid){
            System.out.println(jid);
    
        }
    
    附录

  • 对于转发和重定向的几点区别
      转发只能在此服务器内进行转发,重定向可以跳转到任意一个服务器对于转发为一次的服务器请求,对于重定向为多次的服务器请求浏览器中转发的地址仍然为转发前的地址,而对于重定向,转发后为新地址
  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/773266.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

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

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