结果跳转方法
ModelAndView
设置ModelAndView对象 ,根据view的名称 ,和视图解析器跳到指定的页面。
页面:{视图解析器前缀} + viewName +{视图解析器后缀}
1 | <!-- 视图解析器 --> |
对应的controller类
1 | public class ControllerTest1 implements Controller { |
ServletAPI
通过设置ServletAPI ,不需要视图解析器。
1、通过HttpServletResponse进行输出
2、通过HttpServletResponse实现重定向
3、通过HttpServletResponse实现转发
1 |
|
SpringMVC
无需视图解析器
通过SpringMVC来实现转发和重定向 。
测试前,需要将视图解析器注释掉
1 |
|
有视图解析器
通过SpringMVC来实现转发和重定向
重定向,不需要视图解析器,本质就是重新请求一个新地方嘛 ,所以注意路径问题。SpringMVC的默认是转发。
可以重定向到另外一个请求实现 。
1 |
|
数据处理
处理提交数据
1、提交的域名称和处理方法的参数名一致
提交数据: http://localhost:8080/hello?name=asher
处理方法:
1 |
|
后台输出:asher
2、提交的域名称和处理方法的参数名不一致
提交数据: http://localhost:8080/hello?username=asher
处理方法:
1 | //@RequestParam("username") : username提交的域的名称 . |
后台输出:asher
3、提交的是一个对象
要求提交的表单域和对象的属性名一致 , 参数使用对象即可.
1、实体类
1 | public class User { |
2、提交数据: http://localhost:8080/mvc04/user?name=asher&id=1&age=15
3、处理方法:
1 |
|
后台输出:User { id=1, name=’asher’, age=15 }
说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。
数据显示到前端
第一种 : 通过ModelAndView
前面一直使用的方式。
1 | public class ControllerTest1 implements Controller { |
第二种 : 通过ModelMap
ModelMap
1 |
|
第三种 : 通过Model
Model
1 |
|
对比
对于新手而言,简单理解使用区别如下:
Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;
ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
乱码问题
测试步骤:
1、我们可以在首页编写一个提交的表单
1 | <form action="/e/t" method="post"> |
2、后台编写对应的处理类
1 |
|
3、输入中文测试,发现乱码
不得不说,乱码问题是在我们开发中十分常见的问题,也是让我们程序猿比较头大的问题!
以前乱码问题通过过滤器解决, 而SpringMVC给我们提供了一个过滤器, 可以在web.xml中配置 .
修改了xml文件需要重启服务器!(配置环境也是很重要的,有可能是因为环境问题导致,乱码问题一定要先排除环境问题)
1 | <filter> |
运行结果:
但是我们发现,有些极端情况下,这个过滤器对get的支持不好 。这里先排除环境问题
处理方法:
1、修改tomcat配置文件:设置编码!’utf-8’
1 | <Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1" |
2、使用自定义过滤器(源码来自网上大神)
1 | import javax.servlet.*; |
一般情况下,SpringMVC的默认乱码处理已经够用了
然后在web.xml中配置这个过滤器。
1 | <filter> |
注意点:
- 配置filter的时候
<url-pattern>/*</url-pattern>
- 乱码问题,需要平时多注意,在尽可能能设置编码的地方,都设置为统一编码 UTF-8。
- 调试时候要及时清理缓存,乱码问题修复后有可能因为缓存问题导致不能正常显示。