Sping MVC的配置
来源:互联网 发布:三代身份证 知乎 编辑:程序博客网 时间:2024/03/29 02:10
最近开始用Spring MVC做项目,而且越来越喜欢Spring MVC,特别是简易的配置,与Spring注入的完美结合,还有对JSON数据的完美转换,弄的我爱不释手!
具体的配置我就不想说了,网上资料太多,没必要细谈。
首先:注入配置。如果没用到SpringMVC的话,注入主要写很多配置,而且根据注入类型的不同,注入配置也不一样。比如set注入方式,我们首先需要在applicationContext.xml中配置这样的注入:
<bean id="userManage" name="userManage" scope="request" class="com.fly.user.beans.UserManagerBean"> <property name="userservice" ref="userservice"></property> </bean> <bean id="userservice" class="com.fly.user.service.impl.UserServiceImpl"> <property name="userdao" ref="userdao"/> </bean> <bean id="userdao" class="com.fly.user.dao.impl.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
而如果用到了构造函数注入方式:
<bean id="forecastBean" name="forecastcurve" scope="application" class="com.fly.user.beans.UserManagerBean"> <constructor-arg index="0" name="userservice" ref="userservice"/> </bean>
相信大家对这个很熟悉,但是在Spring MVC下,一切配置都是浮云啊!因为只要简单的几句话就解决了,首先在applicationContext.xml下配置
<context:component-scan base-package="com.fly.user.dao,com.fly.user.service" />当然你也可以写成如下形式,正则匹配嘛,只要整个包都可以自动扫描进去了。
<context:component-scan base-package="com.fly.*.dao,com.fly.*.service" />然后你需要在dispatcher-servlet.xml中配置controller类的注入配置,当然是同样简单
<context:component-scan base-package="com.fly.*.controller" />到了这步注入配置就完成了。想不到吧!然后你需要注解(@Autowired)类中的set注入方法,例如:
public class UserLoginController { private IUserService userservice; public IUserService getUserservice() { return userservice; } @Autowired public void setUserservice(IUserService userservice) { this.userservice = userservice; }}当然所有daoimpl与serviceimpl都要这样注解。
其次:数据的前后台交互。一般交互都是json数据转换的形式。特别是跟jquery easyui,extjs等js框架结合的时候,相当的方便。
//用户登录检查 @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public Map<String,Object> loginCheck(HttpServletRequest request) { Map<String,Object> map = new Map<String,Object>(); String username = request.getParameter("name").trim(); System.out.println(username); String password = request.getParameter("userpasswd").trim(); User loginUser = userservice.loginCheck(username, Md5Encryption.getMd5Code(password)); if (null != loginUser) { int logintime = loginflag.getLogintime(); loginUser.setLogintime(++logintime); userservice.updateUser(loginUser); map.put("user",loginUser); map.put("success",true); map.put("msg","登陆成功!"); } else { map.put("success",false); map.put("msg","登陆失败!"); } return map; }其中
@RequestMapping(value = "/login", method = RequestMethod.POST)表明了页面传入的路径,例如(/login.do),提交方式post,整个主要是在form中或者ajax提交中定义的。
@ResponseBody表明整个方法输出的内容是会传入到页面的。如果去掉这句话,页面需要返回一个String或者Model类型进行页面之间的跳转。比如返回的是一个String类型"/user/index",页面就会根据dispatcher-servlet.xml中配置的ViewResolver:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean>来进行页面的跳转,跳转到user/index.jsp页面。
针对@ResponserBody,对于controller返回的类型没有具体要求,因为强大的spring MVC内部的MappingJacksonHttpMessageConverter方法很好的把数据转换成json数据,然后可以直接在页面直接调用。
而JSON转换配置在dispatcher-servlet.xml中,需要在注册的AnnotationMethodHandlerAdapter中添加:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <!-- 配置一下对json数据的转换 --> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> </bean>
如果想对页面编码进行转换,也可以在MappingJacksonHttpMessageConverter中配置编码
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <!-- 配置一下对json数据的转换 --> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean>
除了上面针对性的配置以外,我们再说一下<mvc:annotation-driven />。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。如果配置了<mvc:annotation-driven />,就不需要在配置json的数据转换了。<mvc:annotation-driven />并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
这里谈一下,我在项目中遇到一个超无语的事情。开始我是用<mvc:annotation-driven />注册注解的。在后台传值的问题上没有错误,可是后来我要增加拦截器,是手动配置AnnotationMethodHandlerAdapter的,这个时候前台却不能正常显示数据了,可是我能打印出前台的数据内容。后来我才发现,前台ajax接收数据的时候,一定要指定为dataType:"json"。而用默认的<mvc:annotation-driven />却不需要。蛋疼吧!
Spring3 MVC的数据转换做的那是相当牛,举个例子
如果前台ajax传入的数据是$.ajax({url:"xxx.do",data:{page:1,rows:2}})
后台方法的参数只要写成(int page, int rows)。如下:
@RequestMapping(value = "/XXX", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> getSdayForm(int page, int rows) {...}
或者写成(Data d),如下:
@RequestMapping(value = "/XXX", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> getSdayForm(Data d) {...}
Data类只要封装成如下格式:
class Data{int page;int rows;...}
根本不需要写成int page = Integer.parseInt(request.getParameter("page"));这真的太强大!
- Sping MVC的配置
- Sping MVC的配置
- sping mvc
- sping mvc
- sping mvc
- Sping-MVC
- sping mvc
- Sping中Quartz的配置
- Sping中Quartz的配置
- Sping MVC中@MatrixVariable的使用
- sping mvc注解的两个问题处理
- Sping的Xml配置命名空间
- Sping中Bean配置的深入探讨
- 基于XML配置的Sping AOP详解
- sping mvc mail
- Sping MVC 入门
- 9Sping MVC注解
- Sping MVC知识点总结
- WebService部署
- 通过ant脚本编译打包android工程
- Jasper错误
- 第一篇
- maven3实战之安装目录分析
- Sping MVC的配置
- n&(n-1)的功能
- php出现Warning: file_put_contents,failed to open stream
- maven3实战之设置HTTP代理
- 智能家居方案定制开发
- C++读写文件
- maven3实战之maven安装最佳实践
- android系统如何自适应屏幕大小
- Android开发中的MVC模式理解