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

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也需要进行日期格式的转化,那么必须添加上述代码,这时造成了代码的重复。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,306评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,182评论 11 349
  • 风把围巾带来暖了行人的脖子 雪的影子在天空徘徊赶走了南去的雁子 太阳像男中音的歌喉磁性通透却燃不起场子 只有你眼里...
    王浅文阅读 479评论 12 18
  • 大家好!我叫周俊余 来自广州 我的三个标签是 1.易效能践行者 2.象棋和搏击爱好者 3.终身学习者 依稀记得20...
    周俊余阅读 107评论 0 0