springMVC参数设置
Posted lw97-1014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMVC参数设置相关的知识,希望对你有一定的参考价值。
接收的参数为日期类型
在springmvc的controller控制层接收日期参数时,如果不加以设置,服务器开启后,进入不了页面中,会报错。这个错误就是日期在页面传入到springmvc的controller中的时候没有转化。就会引起错误
解决的方法是,在controller类中加一个方法,如下:
@InitBinder public void initBinder(ServletRequestDataBinder binder) //只要网页中传来的数据格式为yyyy-MM-dd 就会转化为Date类型 binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
这里必须要有注解,才能起到转化的作用。
controller进行数据的保存
在springmvc的controller中进行数据保存跟以前的servlet中保存数据是同一个原理,把数据保存到request、session中,当数据保存到request中的时候,有下面的方法:
写一个方法返回类型是ModelAndView,那么这种保存方式必须在方法里面重新new一个新的ModelAndView的类,然后调用里面的方法,实现保存和跳转的作用,如图:
@Controller public class MyController1 @RequestMapping("/list.do") public ModelAndView list() Users u=new Users(); u.setName("张三"); u.setAge(16); u.setSex("男"); u.setPhone(12332313); ModelAndView mv=new ModelAndView(); mv.setViewName("login"); mv.addObject("user", u); return mv;
我这里在项目里创建一个Users的实体类,然后给实体类赋值,将数据赋值给以这个实体类为数据类型的一个对象里,然后把这个对象保存到ModelAndView中,这个是以request方式保存的
mv.addObject("user", u);是以ModelAndView的方式添加对象的或者添加字符串的还有集合。
mv.setViewName("login");这个方法是页面的跳转到login这个页面中,将对象保存到里面然后随着请求转发将数据发送给页面中,从而页面就可以得到相应的数据了
以Model的方法保存,这个方法的返回值类型还是字符串类型的。
@RequestMapping("b") public String Model(Model model) UserBean bean = new UserBean(); bean.setName("admin"); bean.setPwd("admin"); model.addAttribute("admin", bean); return "login";
Model也是一种request的存储方式,在同一个请求中被调用里面的参数,
model.addAttribute("admin", bean);Model中添加的方法是addAttribute(),括号里面可以是文本,对象,集合。
还有使用Map的方法保存数据,返回的数据类型还是字符串类型
@RequestMapping("a") public String Map(Map<String, Object> Map) UserBean bean = new UserBean(); bean.setName("刘备"); bean.setPwd("张飞"); Map.put("admin", bean); return "login";
同上,唯一不同的就是,它添加数据的是put()的方法,它是map集合中特有的存放数据的方法
还有最原始的存储方式就是用request,那就得用HttpServletRequest 来调用request了,本人觉得还是最原始的方法用的舒服
@RequestMapping("a") public String request(HttpServletRequest request) UserBean bean = new UserBean(); bean.setName("张三"); bean.setPwd("123"); request.setAttribute("b", bean); return "login";
session的保存方式:
@RequestMapping("/a") public String session(HttpSession session) UserBean bean = new UserBean(); bean.setName("曹操"); bean.setPwd("周瑜"); session.setAttribute("b", bean); return "login";
request和session在controller中和在servlet中使用的方法都是一样的,之前的讲的除了session是保存在session中的,其余的都是保存在request中的,
如果想使用上面的几种方法保存到session中那么就使用注解了 ,在类外使用@SessionAttributes(names=key1,key2)这个方法。
controller中进行重定向调转
请求转发和重定向跳转的区别,1.第一个差别点,就是重定向是两次请求,转发是一次请求,因此转发的速度要快于重定向。2.第二个差别点也很明显,重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址,那么在springmvc的controller中想用重定向跳转页面,只需要在要跳转的页面前面加上redirect就ok了。
方式一:使用ModelAndView
return new ModelAndView("redirect:/login");
这样可以重定向到toList这个方法
方式二:返回String
return "redirect:/ login ";
静态资源的映射
从上面的图片可以看出web.xml的拦截条件是*.do 那么静态资源就不会拦截,我们想让静态资源被拦截,就要改成:
写成/是对所有的文件都进行了拦截,因为在controller中找不到静态资源的相应的servlet,所以图片什么效果就不会显示出来的,这个时候就需要在springmvc的配置文件中释放资源了
用springmvc完成ajax功能
创建一个jsp文件,里面引入jquery文件,然后里面写入ajax代码
ajax的实现有三种方式$.get(url,data,callback,type);其中url:服务器的路劲 data:请求参数 callback:回调函数 type: 响应数据的类型。(html,json)
$.post()和get一样 $.ajax(url:(服务器的路径),data:(请求参数),type:(响应的数据类型),success:(回调函数),Error:(错误),Async:(同步),datatype:(请求数据类型))
在以前学的servlet中响应文本的时候直接Out.print()响应过去,当响应的是对象的时候需要借助gson jar包。把Java对象转化为json对象,
但在controller中需要加入jackson的jar包,在响应的方法上加上@ResponseBody这个注解,就能把Java对象转化为json对象了
方法的返回值可以是对象的集合,字符串。
jsp页面
ajax操作,当加载页面的时候,从controller中响应数据到页面上,然后弹出来,测试一下。
当页面控制器响应一个中文的话,页面接收到会发现是乱码,解决的方法是:
@RequestMapping(value="Ajax",produces = "text/html;charset=UTF-8" ) @ResponseBody public String a(String name) System.out.println(name); return "张三";
在括号里面加上:produces = "text/html;charset=UTF-8",这些代码就解决了,还有就是在springmvc的配置文件中添加标签来修改源代码来从新设置响应的编码。
以上是关于springMVC参数设置的主要内容,如果未能解决你的问题,请参考以下文章
tomcat设置utf-8编码,springMVC后台接收参数反而乱码
springmvc+jsp中关于JQuery ajax提交的Content-Type参数设置application/json和application/x-www-form-urlencoded区别