请教spring mvc 注解配置3如何通过URL快速定位使用注解的controller类

链接:/blog/1297746 (附源码)
链接:/blog/983801
链接:/xguo/p/3163519.html
链接:/blog/947191
链接:http://blog.csdn.net/FansUnion/article/details/
链接:/blog/1547197(附源码)
Spring3.0对异常的处理通过HandlerExceptionResolver来实现。HandlerExceptionResolver有4个实现类DefaultHandlerExceptionResolver、AnnotationMethodExceptionResolver、ResponseStatusExceptionResolver、SimpleMappingExceptionResolver。
Spring3.0对异常的处理主要可通过这两种方式:一种是使用HandlerExceptionResolver接口;一种是在@Controller处理器内部使用@ExceptionHandler注解。使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver;使用第二种方式可以在Controller内部实现更个性化异常处理方式。
---方式一:HandlerExceptionResolver接口,复写resolveException()方法
springmvc通过HandlerExceptionResolver处理程序的异常,该接口仅有一个方法ModelAndView
resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)。我们可复写该方法实现全局异常的处理。
当发生异常时,springmvc会调用resolveException()方法,并返回一个ModelAndView对象。如果该方法返回了null,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回一个ModelAndView对象,最后转到ModelAndView对应的视图作为一个异常报告页面!
* 基于HandlerExceptionResolver接口的异常处理类
* 这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签:
&context:component-scan base-package=&test.*& /&
* 或者使用在配置文件通过&bean/&节点配置:
&bean id=&exceptionResolver& class=&test.CustomExceptionHandler &/&
@Component
public class CustomExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if(exception instanceof IOException){
return new ModelAndView(&ioexp&);
}else if(exception instanceof SQLException){
return new ModelAndView(&sqlexp&);
---区分ajax请求和普通http请求进行异常处理返回:
* 说明:当在系统应用中出现普通异常时,根据是系统异常还是应用异常,跳到相应的界面,
* 当ajax异常时,在ajax的error中可直接获得异常。普通的异常我们都配置好了界面,系统会自动跳转。
public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// Expose ModelAndView for chosen error view.
String viewName = determineViewName(ex, request);
if (viewName != null) {// JSP格式返回
if (!(request.getHeader(&accept&).indexOf(&application/json&) & -1 || (request
.getHeader(&X-Requested-With&)!= null && request
.getHeader(&X-Requested-With&).indexOf(&XMLHttpRequest&) & -1))) {
// 如果不是异步请求
// Apply HTTP status code for error views, if specified.
// Only apply it if we&re processing a top-level request.
Integer statusCode = determineStatusCode(request, viewName);
if (statusCode != null) {
applyStatusCodeIfPossible(request, response, statusCode);
return getModelAndView(viewName, ex, request);
} else {// JSON格式返回
PrintWriter writer = response.getWriter();
writer.write(ex.getMessage());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
---方式二:@ExceptionHandler
AnnotationMethodExceptionResolver:springmvc也默认配置了AnnotationMethodExceptionResolver,它允许通过@ExceptionHandler指定处理特定异常的方法。@ExceptionHandler:处理同一个类内触发的局部异常(如果要让其处理多个需拦截异常的处理器,则可另其他类继承此类!)
@Controller
//可以被其他处理器继承
public class MyExceptionFilter {
//该处理器类中的所有方法抛出的异常都可由此方法捕获并处理
//该注解也可制定多个异常类,如@ExceptionHandler(value={IOException.class,SQLException.class})
@ExceptionHandler(Exception.class)
public String handleException(Exception e, HttpServletRequest req) {
System.out.println(&exception name: & + e.getClass().toString());//异常名
System.out.println(&exception cause: & + e.getCause());
System.out.println(&exception msg: & + e.getLocalizedMessage());
//e.printStackTrace();
StackTraceElement[] ste = e.getStackTrace();
StringBuffer sb_e = new StringBuffer();
for(int j=0;j&ste.j++){
if(ste[j].toString().contains(&xxxx&)) {
sb_e.append(ste[j].toString()+&,
System.out.println(&Exception detail: &);//异常详细信息
System.out.println(sb_e.toString());
StringBuffer sbUrl = new StringBuffer();//拼url
System.out.println(&request method: &+req.getMethod());//get,post
System.out.println(&request encode: & + req.getCharacterEncoding());//编码
System.out.println(&request mapping: &+req.getRequestURL().toString());//请求url方法
sbUrl.append(req.getRequestURL().toString());
Enumeration en = req.getParameterNames();//请求参数-值
for(int i=0; en.hasMoreElements(); i++){
String arg = en.nextElement().toString();
sbUrl.append(&?&);
sbUrl.append(&&&);
sbUrl.append(arg + &=& + req.getParameterValues(arg)[0]);
System.out.println(&request url: & + sbUrl.toString());
if(ex instanceof BusinessException) {
return &error-business&;
}else if(ex instanceof ParameterException) {
return &error-parameter&;
return &error&;
return &forward:error.jsp&;
---方式三:SimpleMappingExceptionResolver
SimpleMappingExceptionResolver:可对全局异常进行统一处理。
&bean class=&org.springframework.web.servlet.handler.SimpleMappingExceptionResolver&&
&!--设置日志输出级别,不定义则默认不输出警告等错误日志信息。链接:/blog/875830 --&
&property name=&warnLogCategory& value=&WARN& /&
&!-- 默认错误页面,就是不在exceptionMappings指定范围内 --&
&property name=&defaultErrorView& value=&error&&&/property&
&!-- 定义需要特殊处理的异常,如当发生IOException异常时跳转到error/ioexp视图--&
&property name=&exceptionMappings&&&span style=&font-family: Arial, Helvetica, sans-&&&!—key为异常类,可以是全路径,错误页面或Controller路径!会自动跳转到对应url --&&/span&
&prop key=&IOException&&redirect:/login&/prop&
&prop key=&java.sql.SQLException&&error/sqlexp&/prop&
&/property&
---方式四:&error-page&
DefaultHandlerExceptionResolver:Springmvc默认装配了DefaultHandlerExceptionResolver,它会将springmvc的异常转换成对应的响应状态码(500,404等)。对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。
我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在web.xml中通过&error-page&(Websphere/Weblogic)或者&error-code&(Tomcat)节点配置特定异常情况的显示页面。(springmvc)操作如下:
1.在web.xml中配置响应状态码对应的页面,如:
&error-page&
&error-code&500&/error-code&
&location&/WEB-INF/pages/error/500.jsp&/location&
&/error-page&
&!-- 未捕获的错误,同样可指定其它异常类,或自定义异常类 --&
&error-page&
&exception-type&java.lang.Exception&/exception-type&
&location&/uncaughtException&/location&
&/error-page&
2. applicationContext.xml中配置
&!-- 错误路径和错误页面,注意指定viewResolver --&
&mvc:view-controller path=&/404& view-name=&404&/&
&mvc:view-controller path=&/500& view-name=&500&/&
&mvc:view-controller path=&/uncaughtException& view-name=&uncaughtException&/&
附:.hk/search?newwindow=1&safe=strict&espv=210&es_sm=93&q=error+page%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8&revid=&sa=X&ei=ORwOU7K_INKbiQeTjIG4BA&ved=0CIcBENUCKAE&biw=1440&bih=737
---方式五:Spring3.2新注解@ControllerAdvice
链接:/blog/1866350
@ControllerAdvice,是spring3.2提供的新注解。会把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法(全局的)
有一次发现springmvc3.2.x的@ControllerAdvice注解不起作用,参考链接/linux/spring3_2_mvc__ControllerAdvice_buqizuoyong_5786240.html加上@EnableWebMvc后就可以了。但是,后来又发现会导致这个原因是因为项目的springmvc配置文件中没有配置&mvc:annotation-driven /&,于是将其配置上。但是配置上&mvc:annotation-driven /&后问题就来了,启动的时候就报异常,看了下原因,感觉是@EnableWebMvc注解导致的,于是将该注解删除掉,果然就正常启动了。不过,至于其中的原理还是理解不深刻,不知道内部是怎么调用的,只是发现当配置上&mvc:annotation-driven /&的时候不应该用@EnableWebMvc修饰@ControllerAdvice。(待研究)附链接:/blog/1738599。/?p=196。
测试后发现,当全局异常和局部异常都存在时,全局异常处理会被局部异常处理覆盖。
* 全局异常
//@EnableWebMvc
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception re, HttpServletRequest request) {
System.out.println(&error.......&);
return &forward:error.jsp&;
相关 [spring mvc 异常处理] 推荐:
- 编程语言 - ITeye博客
链接:/blog/1297746 (附源码). 链接:/blog/983801 . 链接:/xguo/p/3163519.html . 链接:/blog/947191 . 链接:http://blog.csdn.net/FansUnion/article/details/. 链接:/blog/1547197(附源码).
Spring3.0对异常的处理通过HandlerExceptionResolver来实现.
- 互联网 - ITeye博客
源:/blog/1547197. 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理. 每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 下面将介绍使用Spring MVC统一处理异常的解决和实现过程. Spring MVC处理异常有3种方式:. (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;.
- CSDN博客架构设计推荐文章
Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比《
Struts1和Struts2》,这篇将对比下Struts2和SpringMVC的异同,下面数据基本来源于网络,本人是搜集整理所得,供大家参考. 一个项目使用什么样的技术,决定的因素很多,我所能想到的有:对系统的性能、开发的效率、团队学习的成本、业务场景等,下面尽量从这几个方面入手,来分析比较下他们之间存在的优劣. 首先说
性能方面,通过一些测试人员的测试,对Jsp、Struts1、Struts2、SpringMVC的结论如下表:. 采用单例Action模式,且本身的封装相比struts2简单,性能稳定高效.
- CSDN博客推荐文章
springmvc 框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总控制,它负责截获请求并将其分派给相应的处理器处理. SpringMVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理以及表单标签绑定等内容. SpringMVC是主要基于MODEL2实现的技术框架,Model2是经典的MVC(model、view、control)模型在web应用中的变体,这个改变主要源于HTTP协议的无状态性. Model2的目的和MVC一样,也是利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果,提高系统的灵活性,复用性和可维护性.
- 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据. 我定义了下面这个类来表示报文格式:. /**
* 统一的 HTTP 响应格式. &br/&
* code 为 &ok& 表示业务调用成功,否则是失败的错误码,如果有多个则以逗号分隔. &br/&
* data 是业务数据,如果失败了则是 null.
- Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误. 跟使用Struts框架相比,这些错误要出现得更频繁一些. 我猜想这可能是它在可用性和灵活性之间做出的权衡. 不仅如此,Spring的文档中全是例子但缺少解释. 为了填充这一空白,本文准备深入阐述三个大家常犯的错误. 在Servlet上下文定义文件中声明bean. 我们都知道,Spring使用的是ContextLoaderListener来加载Spring的应用上下文(application context).
- 企业架构 - ITeye博客
大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了. Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是:
http://www.springsource.org/download
(本文使用是的Spring 3.0.5版本). Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构. 但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降. Struts2的多层拦截器、多实例action性能都很好.
- 企业架构 - ITeye博客
Spring MVC Controller单例陷阱. 标签:Spring mvc. 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明. Spring MVC Controller默认是单例的:. 1、这个不用废话了,单例不用每次都new,当然快了. 2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例.
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了.
因此,只要controller中不定义属性,那么单例完全是安全的. * @author leizhimin 14-4-9 上午10:55.
- ITeye博客
大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了. Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是:
http://www.springsource.org/download
(本文使用是的Spring 3.0.5版本). Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构. 但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降. Struts2的多层拦截器、多实例action性能都很好.
- ITeye博客
要写在DispatcherServlet的前面, 让 defaultServlet先拦截,这个就不会进入Spring了,我想性能是最好的吧. Tomcat, Jetty, JBoss, and GlassFish
默认 Servlet的名字 -- &default&. Google App Engine 默认 Servlet的名字 -- &_ah_default&. Resin 默认 Servlet的名字 -- &resin-file&. WebLogic 默认 Servlet的名字
-- &FileServlet&.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。spring mvc 基于注解 配置默认 handlermapping - 积累 - ITeye技术网站
博客分类:
spring mvc 是类似于 Struts 的框架。他们都有一个最主要的功能就是URL路由。URL路由能将请求与响应请求处理逻辑的类(在Struts中即是action,在spring mvc 中即是 controller )映射起来。抛开其他的功能,spring mvc 要比 Struts 在URL路由功能上灵活很多。比如要实现 RESTful,如果用 Struts ,需要安装 一些插件,而且插件也常常限制的很死。但是如果用 spring mvc ,那就驾轻就熟。
下面具体看一下spring mvc
在 spring 2.5 以后,可以利用注解写进行路由映射,简单,直观。
配置 web.xml
&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd"&
&!-- Processes application requests --&
&servlet-name&appServlet&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring-servlet-context.xml&/param-value&
&/init-param&
&load-on-startup&0&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&appServlet&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&/web-app&
spring 的配置文件 spring-servlet-context.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&
&context:component-scan base-package="com.myPackage"/&
&mvc:annotation-driven/&
&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/pages/" /&
&property name="suffix" value=".jsp" /&
package com.myPackage.
@Controller
public class FooController{
* 响应 /foo 请求,并返回 bar.jsp 做为渲染页面 (不一定非是jsp,只不过以上配置的是jsp)
@RequestMappting("/foo")
public String foo(){
//process logic
return "bar";
以上即 spring mvc 一个简单的配置。mvc:annotation-driven 即告诉 spring mvc 使用注解的方式进行URL路由配置。controller 类上加上 @Controller 告诉 spring mvc 此类是 controller,同时方法上的 @RequestMapping 注解告诉 spring mvc 这里有一个请求映射到这个方法。
前面都是最基本的配置,但有一个缺点就是还不能响应静态页面的请求。 比如 webroot 下有 一个 bar.html 页面,但 webroot/bar.html 是请求不到 bar.html 的。因为目前为止,还没有对 bar.html 的路由映射。
要能请求静态页面,或者资源(如css,js,图片等),需要做如下配置
&mvc:resources mapping="/**" location="/" /&
但是上面的配置还是有问题的,如果有一个 foo.html 的页面,请求是 webroot/foo.html,但是会发现会被路由到 /foo.* ,然后程序交给了 foo() 方法,没能得到 foo.html 页面。原因是使用 mvc:annotation-driven 做配置,spring mvc 会默认使用 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter ,而 DefaultAnnotationHandlerMapping 会默认对 @RequestMapping 上的路由做三个映射,如 @RequestMapping("/foo") 会被做 /foo 、/foo.* 和 /foo/ 这样三个映射。mvc:resources 默认使用 SimpleUrlHandlerMapping, 做映射,但由于 SimpleUrlHandlerMapping 的优先级(order)没有 DefaultAnnotationHandlerMapping 高。 所以本来应该是 foo.html 静态资源响应,被映射为了 /foo.* 。@RequestMapping 的三次映射可以通过 DefaultAnnotationHandlerMapping#setUseDefaultSuffixPattern(false) 取消。XxxxHandlerMapping 可以通过 order 属性改变。
所以总结以上设置,可以这样正确的配置 spring-servlet-context.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&
&context:component-scan base-package="com.myPackage"/&
&mvc:resources mapping="/**" location="/" order="1"/&
&bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&
&property name="order" value="0"/&
&property name="useDefaultSuffixPattern" value="false"/&
&bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/&
&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/pages/" /&
&property name="suffix" value=".jsp" /&
或者这样配置
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&
&context:component-scan base-package="com.myPackage"/&
&mvc:resources mapping="/**/*.html" location="/" order="0"/&
&mvc:resources mapping="/**" location="/" order="2"/&
&bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&
&property name="order" value="1"/&
&property name="useDefaultSuffixPattern" value="true"/&
&bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/&
&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/pages/" /&
&property name="suffix" value=".jsp" /&
浏览: 57175 次
来自: 西安
可以用~!!
嗯分析的不错。我们也是采用类似LengthFieldBased ...
成功集成了guice容器,多谢!
kevinhrw 写道你这样写,MYSQL是怎么实现的?hib ...
你这样写,MYSQL是怎么实现的?hibernate会在MYS ...spring mvc3提高生产力之——利用annotation使前后台数据交互更透明 - 季节更替 - ITeye技术网站
博客分类:
这周花了点时间弄了一下spring mvc3,打算整理一个cheatsheet出来,方便后来者快速上手。
服务端数据到客户端
返回页面,Controller中方法返回String,String对应的是view的位置,如果需要携带数据通过model(相当于一个Map)传递到view, view中使用jstl的EL表达式来绑定model带来的数据。@RequestMapping(value="/getPojoView", method=RequestMethod.GET)
public String getPojoView(Model model){
Pojo pojo = new Pojo();
pojo.setPojoName("testName");
pojo.setPojoValue("testValue");
model.addAttribute(pojo);
return"sample/pojoView";
返回Json对象,利用@ResponseBody来实现。@RequestMapping(value="/getPojoJson", method=RequestMethod.GET)
@ResponseBody Pojo getPojoJson(){
Pojo pojo = new Pojo();
pojo.setPojoName("testName");
pojo.setPojoValue("testValue");
注:spring mvc自动将java对象转化成了json对象传回了客户端,返回对象可以是Pojo也可以是List
直接操作Response自己实现想要的效果。@RequestMapping(value="/getCustomResponse", method=RequestMethod.GET)
public void getCustomResponse(HttpServletResponse response){
//操作response...
注:response为spring根据方法的type类型注入的
客户端数据到服务端
通过URL传回参数:
&script type="text/javascript"src="jquery-1.4.min.js"&&/script&
&h1&button与链接效果一致&/h1&
&a href="simple?name=text&age=28"&simple&/a&&button onclick="simple()"&simple&/button&&br/&
&script type="text/javascript"&
function simple(){
$.getJSON("simple",{"name":"nameJsonTest","age":"100"},function(){});
&a href="list?names[]=aaaa&names[]=bbbb"&list&/a&&button onclick="list()"&list&/button&&br/&
&script type="text/javascript"&
function list(){
$.getJSON("list",{"names":["name1","name2","name3"]},function(){});
&a href="pojo?pojo[pojoName]=hahaha&pojo[pojoValue]=kkkkkk"&pojo&/a&&button onclick="pojo()"&pojo&/button&&br/&
&script type="text/javascript"&
function pojo(){
$.getJSON("pojo",{"pojo":{"pojoName":"testName","pojoValue":"testValue"}},function(){});
&a href="rest/10/2"&rest&/a&&button onclick="rest()"&rest&/button&&br/&
&script type="text/javascript"&
function rest(){
var pageSize = 20;
var pageNo = 3;
$.getJSON("rest/"+pageSize+"/"+pageNo,{},function(){});
controller
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.PathV
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestP
@Controller
@RequestMapping(value="/urlparam")
public class UrlParamController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String index(){
return"urlparam/index";
@RequestMapping(value="/simple", method=RequestMethod.GET)
public void simple(@RequestParam String name, @RequestParam Integer age){
System.out.println("name:"+name);
System.out.println("age:"+age);
//list内不能放POJO对象
@RequestMapping(value="/list", method=RequestMethod.GET)
public void list(@RequestParam("names[]") String[] names){
//也可以用List&String& names来接收
for(String name : names){
System.out.println("name:"+name);
//单URL目前还不支持POJO对象,只能支持键值对,希望spring以后有所改善
@RequestMapping(value="/pojo", method=RequestMethod.GET)
public void pojo(@RequestParam("pojo[pojoName]") String name, @RequestParam("pojo[pojoValue]") String value){
System.out.println("name:"+name);
System.out.println("value:"+value);
@RequestMapping(value="/rest/{pageSize}/{pageNo}", method=RequestMethod.GET)
public void rest(@PathVariable Integer pageSize, @PathVariable Integer pageNo){
System.out.println("pageSize:"+pageSize);
System.out.println("pageNo:"+pageNo);
通过POST表单传回参数:
方式同与url的是一致的,需要将method=RequestMethod.POST,不过有中文的话一般都用post来避免转码。一般ajax的时候用$.post而不能使用jQuery插件json的$.postJSON。下面会讲到。
通过使用jQuery插件json的$.postJSON传回参数:$.postJSON返回的是:application/json,$.post返回的是:
application/x-www-form-urlencodedspring会将postJSON传回的json字符串转换成对象再将对象丢给带有@RequestBody的形参。 由于json字符串直接转换为对象,所以@RequestBody只能接收一个对象还需要属性一一对应,不能多传参数。此方式可以传POJO,也可以传List&POJO&。
$.postJSON('url', {"name":"testName","age":"28"},function(){});
class Pojo{
//get,set...
@RequestMapping(value="pojo", method=RequestMethod.POST)
publicvoid sentPojo(@RequestBody Pojo pojo){
System.out.println(pojo.getPojoName());
System.out.println(pojo.getPojoValue());
注:目前对于一对象,附带几个简单参数的解决办法是将简单参数通过为REST的url路径参数来传送。
直接拿到Request来操作:@RequestMapping(value="/", method=RequestMethod.GET)
public String withRequest(HttpServletRequest request){
//操作request...
return"someview";
以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。
小结:spring mvc3充分利用了annotation的好处将参数传递过程中的转换全部变为了透明,这样省去了程序员对参数进行一些无聊的转换,这肯定能提高不少效率。另一方面想说的是spring的@RequestBody还可以做的更好,如果能允许多个对象同时传送,那这个东西就十分好了。
浏览 11980
论坛回复 /
(23 / 17023)
引用以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。LZ,@RequestBody和@RequestParam可以同时声明,你看我下面的代码。经过测试,这可以做得到的。
@RequestMapping(method=RequestMethod.POST, params="del")
@ResponseBody
public ArticleSort deleteArticleSort(@RequestBody ArticleSort articleSort, @RequestParam("cascade") boolean isCascade) throws DefaultViewNoFoundException{
[img]/upload/picture/pic/eedc6-0dd8-3535-90aa-f974d659c37a.png[/img]是不可以的吧,你在client是怎样请求的呢?
以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。LZ,@RequestBody和@RequestParam可以同时声明,你看我下面的代码。经过测试,这可以做得到的。
@RequestMapping(method=RequestMethod.POST, params="del")
@ResponseBody
public ArticleSort deleteArticleSort(@RequestBody ArticleSort articleSort, @RequestParam("cascade") boolean isCascade) throws DefaultViewNoFoundException{
[img]/upload/picture/pic/eedc6-0dd8-3535-90aa-f974d659c37a.png[/img]
springmvc的确非常不错,运行速度快,开发速度更快,不过在标签方面需要向前辈学习,springmvc的标签不是很丰富,希望能够继续完善。
可以看看开源项目bbossgroups中的mvc框架,功能和spring mvc 3差不多,配套的标签体系也非常完善,持久层套件的功能也不亚于spring jdbc,呵呵,bboss aop对quartz任务调度、cxf webservice的支持、组件异步调用功能的支持也比spring要强大很多哦,呵呵,详情可看看bbossgroups项目的官方博客:
也可以直接看ppt介绍。
bbossgroups源码工程()
mvc框架的demo war包()
简单mvc eclipse开发工程,开箱即用()
bbossgroups 培训ppt()
我真无语,入门级的啊
可以像struts2一样自动类型转换吗?为什么我试不出,入门级,你说下?怎么实现
对象 department, 成员变量 id,name,departmentparent(同样是department对象)
一对一的关系。
页面上&input type="text" id="name" name="name" /&
&&&&&&&& &input type="text" id="department.departmentparent.name" name="department.departmentparent.name" /&
后台接受对象为 department,
你能传递 department.departmentparent。里面有值???
你试过吗??
顶楼主下,能否把那个配置文件贴出来看看
我本来想弄个开源项目,把spring mvc的一些常见需求的实践方式整合一下,比如楼上说:multiview resolver, 乱码的问题,json多对象传递的问题,表单验证数据回显的问题,比较复杂的跳转需求等等,很多都是一些常见的问题
不过对于刚使用的人来说或多或少会浪费自己的时间来弄这些东西
如果把这些东西做成一个项目,再出一个已经解决问题的列表,大家根据问题列表马上找到自己想要实现的效果,我觉得还是有一定的价值的
大家如果比较急的话可以去看下spring官方提供的例子:
https://src.springframework.org/svn/spring-samples
它下面有个mvc-ajax
楼主 我如何在 getPojoView 中直接跳转到 getPojoJson中
比如说:
我写了个login
我login成功之后 进入index.
index里面有我的离线消息..
所以在进这个页面时 我需要先给页面放入离线消息
所以 我写了一个 index 的 method=RequestMethod.GET 给页面赋值
问题我现在的做法是...
response.sendRedirect(request.getContextPath() + "/result/" + personInfoId);
我不想在login中加入index的数据
而login只管登陆 不管给index赋值
楼主如何做啊
我不明白你为什么不把personID放session里,再根据personID来取info
如果非要login来做跳转,你可以考虑将login当成一个proxy,如:http://...login?url=http://infopage
这样login只做放sessionid,然后根据你给定的链接来跳转
icanfly 写道mycybyb 写道如此繁杂的注解实在是耗费脑细胞啊
楼上这位兄台,可否说说struts2的xml配置死的脑细胞如何?可否说说struts2的annotation配置死的脑细胞如何?
为什么呢?我也不用struts2啊。我用自己的MVC框架,零配置的。
那需要遵守你的规则吧...
需要按照你框架的约定走吧...
记住那些对于你来说 不是耗费脑细胞..
对于你以外的人呢?
mycybyb 写道如此繁杂的注解实在是耗费脑细胞啊
楼上这位兄台,可否说说struts2的xml配置死的脑细胞如何?可否说说struts2的annotation配置死的脑细胞如何?
为什么呢?我也不用struts2啊。我用自己的MVC框架,零配置的。
如此繁杂的注解实在是耗费脑细胞啊
楼上这位兄台,可否说说struts2的xml配置死的脑细胞如何?可否说说struts2的annotation配置死的脑细胞如何?
& 上一页 1
浏览: 44445 次
来自: 北京
&div class=&quote_title ...
&div class=&quote_title ...
谢谢谢谢~~~~
&div class=&quote_title ...
public boolean preHandle(Ht ...

我要回帖

更多关于 spring mvc 注解大全 的文章

 

随机推荐