美文网首页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