美文网首页springmvc
SpringMVC教程之入门案例及常见问题

SpringMVC教程之入门案例及常见问题

作者: 大前端圈 | 来源:发表于2018-12-09 11:38 被阅读3次

    SpringMVC是spring的一大组件,来代替传统的servlet。首先要明白SpringMVC的调用过程。

    SpringMVC调用过程

    image.png

    1.客户发送request请求localhost:8090/SpringMVC/hello.action
    2.请求处理器映射器处理handler(找到匹配的Controller类)
    3.返回能够处理的那个Controller类
    4.请求处理器适配器执行handler(内部按照匹配规则执行)
    5.执行handler(Controller-service--dao)
    6.将处理结果进行返回,返回ModelAndView对象(model表示处理后的数据 View表示页面的逻辑名称hello)
    7.将ModelAndView对象返回给前端控制器
    8.请求视图解析器解析View对象(将页面的逻辑名称,拼接成一个完整的页面路径/WEB-INF/hello.jsp)
    9.将完整的页面路径再次返回值给前端控制器
    10.将model数据填充到页面中的Request域中

    Springmvc入门

    一、配置文件方式

    1导入相关jar包
    image.png
    2 web.xml配置前段控制器
       前端控制器实际上就是一个servlet,springMVC的前端控制器就是这个DispatcherServlet。他所在的位置如图:
    
    image.png

    在Web.Xml中配置这个servlet


    image.png

    这表示所有以”*.action”结尾的请求,都交给DispatcherServlet这个前端控制器,这个前端控制器不是一个class,同样我们可以通过简单的xml配置就可以让这个控制器以及其他的处理器映射器,视图解析器起作用。

    3. 配置springmvc的核心配置文件

    SpringMVC核心配置文件命名规则

    Servlet的name+“-servlet.xml”那么这里就是springmvc-servlet.xml


    image.png

    这个过程也是让处理器映射器起作用
    Spring的核心配置文件已经配置好了那个访问路径,需要用那个Controller,下面我们来实现controller

    4.实现controller
    image.png
    5. 配置视图解析器
    image.png

    经过这五步后就实现了简单的springmvc的入门。除了用配置文件的方式外Spring还提供了简单的通过注释来实现。

    二、注解方式实现

    前两步和配置文件相同,但在配置springmvc核心配置文件时。需要开启spring的注解,不用去新加一个bean来映射url和controller的关系。

    1 2同上
    3 开启springmvc的注解同时配置好视图解析器
    image.png
    4.实现controller
    image.png

    可以直接添加@RequestMapping来说明那个请求用哪个类或哪个方法来处理。

    5.注意

    @RequestMapping标注在类上表示这个url和子url都在这个类处理,可以用@RequestMapping来标注类和类中的方法

    比如:

    @RequestMapping(/user)
    public class Usercontroller{
        @RequestMapping(/users)//表示只有url=“/user/users”时交给这个方法来处理
        public String list(Model model){
            model.addAttribute(“user”,user);
            return “user/list”
    }
    }
    
    @RequestMapping(/user)
    public class Usercontroller{
        @RequestMapping(/users)//表示只有url=“/user/users”时交给这个方法来处理
        public String list(Model model){
            model.addAttribute(“user”,user);
            return “user/list”
    }
    }
    

    三、怎么获取页面参数

    一般情况下springmvc可以直接通过形参来获取传递过来的参数


    image.png

    前台传递可以直接get方式?后添加相应参数,或者页面中的name属性的值应该与接收方法的参数名称一致。,比如


    image.png

    四.怎么返回给页面参数

    返回参数需要用到Springmvc的model对象用法和map一样,key-value的形式

    前台获取也直接用map的方式获取。

    @RequestMapping(/user)
    public class Usercontroller{
        @RequestMapping(/users)//表示只有url=“/user/users”时交给这个方法来处理
        public String list(Model model){
            model.addAttribute(“user”,user);//添加返回参数到response域中
            return “user/list”
    }
    }
    

    五.几个常见问题

    1,解决中文乱码问题
    <!--解决中文乱码问题  -->
      <filter>
              <filter-name>characterEncoding</filter-name>
              <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
              <init-param>
                      <param-name>encoding</param-name>
                      <param-value>utf-8</param-value>
              </init-param>
      </filter>
      
      <filter-mapping>
              <filter-name>characterEncoding</filter-name>
              <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    转发和重定向
    1.转发:

    1.浏览器的地址不会发生改变

    2.转发能够携带参数

    forward:/toUser.action 转发的关键字不能错

    关键字 url

    2.重定向

    1.浏览器的地址发生改变

    2.重定向不负责传递参数

    redirect:/toUser.action

    关键字 url

    3.同名提交问题

    如果遇到同名提交问题,那么如果接收参数为String类型时,那么将会把用户提交的信息拼接成一个字符串,

    如果接收的参数为数组时,那么SpringMVC将会把同名提交自动的赋值到数组中。


    image.png
    4.对象封装参数

    如果参数个数较多时,可以使用对象进行封装,页面中的name属性的值应该和对象中的属性保持一致,并且set方法不能省略,否则不能正确注入

    image.png
    5.为对象的引用封装参数

    SpringMVC能够为对象的引用赋值

    1. name属性的值


      image.png
    2. set()不能省略

    如果想进行赋值,必须添加set方法

    页面中的name属性的值和参数名称不匹配
    其他属性值的用法

    @RequestParam(value="state",required=true,defaultValue="长不大的成年人")String sta

    Value:页面中的name属性值

    required:如果为true则表示必须传递该参数 false表示可以不传

    defaultValue:如果该值为null时,那么会添加默认值

    6.日期类型的转化

    如果想转化日期格式例如 2017-11-11 这时如果不做任何处理那么必然会报400错误 400表示 类型匹配错误

    解决方案:自定义日期格式


    image.png
    @InitBinder
    
    publicvoid InitBinder (ServletRequestDataBinder binder){
    
    binder.registerCustomEditor(
    
    java.util.Date.class,
    
    newCustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    
    }
    

    如果将上述代码配置到Controller中那么当前的controller任意的方法都能够实现日期格式的转化。

    如果其他的Controller也需要进行日期格式的转化,那么必须添加上述代码,这时造成了代码的重复。

    所以,日期转化工具通常情况下放到基本类中,别的类继承即可。

    相关文章

      网友评论

        本文标题:SpringMVC教程之入门案例及常见问题

        本文链接:https://www.haomeiwen.com/subject/xcmhhqtx.html