java ssh怎样配置不用一个一个去配置action 20
我ssh框架搭好可运行但是在controller层里的方法必须一个一个在struts.xml里配置action我看别人的都只要在controller里每个方法上面写一个v...
我ssh框架搭好可运行
但是在controller层里的方法必须一个一个在struts.xml里配置action
我看别人的都只要在controller里每个方法上面写一个value="xxx"
前台只要用xxx就能直接传到这个方法
而且方法结束return "aaa"就能直接跳转到aaa.jsp
请问这个怎么配置的,求具体方法 展开
但是在controller层里的方法必须一个一个在struts.xml里配置action
我看别人的都只要在controller里每个方法上面写一个value="xxx"
前台只要用xxx就能直接传到这个方法
而且方法结束return "aaa"就能直接跳转到aaa.jsp
请问这个怎么配置的,求具体方法 展开
3个回答
展开全部
使用注解。。。
@Controller
@RequestMapping(value="/message")
Spring MVC 在 Spring 2.5 发布中新添加了一种基于注解的 Controller 形式。借助于与 Spring 2.5 一同发布的容器内 <context:component-scan> 功能支持,基于注解的 Controller 几乎可以达到 XML 零配置,进而极大地提高我们的开发效率。 和其它 Controller 一样,基于注解的 Controller 同样有相应的 HandlerMapping,那就 是DefaultAnnotationHandlerMapping。同样,也有相应的 HandlerAdapter,那就是 AnnotationMethodHandlerAdapter。甚至,我们都可以不把 Controller 注册到容器里,那么肯定需要 一种机制来帮助我们完成这点,这就是 <context:component-scan>。开发基于注解的 Controller,我 们需要做以下准备工作: 1. 配置 <context:compnent-scan> :配置spring扫描哪些包中的注解类,主要扫描 @Component组件,以及细化后的@Repository、@Service、@Controller等
1. <context:component-scan base-package="org.maomao.springmvc.web" />
2. 配置 HandlerMapping : 定义了 DefaultAnnotationHandlerMapping,它就可以将请求来的 url 和被注解 了 @RequesMapping 的指进行匹配。
1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapp ing"></bean>
好了,有了以上几点准备工作,我们就可以开始基于注解的 Controller 之旅了。下面我们来一个一个注解 的来讲解。
@Controller :类级别上的注解。我们定义的类可以只是一个 javabean,不需要实现任何接口。标注了 @Controller,借助 <context:component-scan>,框架能自动识别到这就是一个 Controller
1. @Controller 2. public class MyController { 3. // ...... 4. }
@RequestMapping :@RequestMapping 可以出现在类级别上,也可以出现在方法上。如果出现在类级别上, 那请求的 url 为 类级别上的 @RequestMapping + 方法级别上的 @RequestMapping,否则直接取方法级上 的 @RequestMapping。类级别的 @RequestMapping 不是必需的。 备注:可以使用value属性来指定访问的URL,也可以通过param参数来访问,咱们看看下面的例子:
1. @Controller 2. @RequestMapping("/my") 3. public class MyController { 4. 5. /** 6. * 方法返回值String表示的是页面地址。 7. * 8. * 由于类级别上定义了 @RequestMapping,那么想匹配到这个方法来处理请求,url 必须为 /my/s
Spring MVC 注解 2015/1/20
maomao
omelist。 9. * 如果没有定义类级别上的 @RequestMapping,url 为 /somelist 即可。 10. * 同时,请求方法必须为 POST 11. */ 12. @RequestMapping(value="/somelist", method=RequestMethod.POST); 13. public String getSomeList() {...} 14. 15. }
1. /** 2. * 在方法级别使用 @RequestMapping 来限定请求处理的时候,可以指定两个属性。除了我们在上 面刚使用过的 3. * method 属性,还有一个 params 属性。使用 params 属性,可以达到与使用 4. * ParameterMethodNameResolver 作为 MethodResolver的 MultiActionController 类似的功能 。 5. * 6. * params 有两种表达形式,这里先说第一种:"parameterName=parameterValue" 7. * 8. * 请求方法为 GET 或 POST,且具有 hello 参数,且值为 world 的请求才能匹配到该方法,如: 9. * /my?hello=world 10. */ 11. @RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.P OST}) 12. public String helloworld() {...}
1. /** 2. * params 属性的另外一种表达形式为:"parameter" 3. * 4. * 请求方法为 GET,且具有请求参数 java 即匹配此方法,而不管 java 参数的值是什么,如: 5. * /my?java=anything 6. */ 7. @RequestMapping(params="java", method={RequestMethod.GET}) 8. public String java() {...}
@RequestParam :可以将请求参数映射到方法参数,将数据封装到集合和数组中的用法和struts2中类似,只要参 数名称按照约定就可以自动封装。
1. /** 2. * 注意,这里的方法有一个参数。若请求 url 为 /my/test,会匹配此方法。这里的方法的参数名为 u serId, 3. * 那么请求参数中一定有名为 userId 的参数,且值为整数。这也是默认的绑定行为,它是根据名称匹 配原则进行 4. * 的数据绑定。当请求中的参数名与方法名一致的时候,相应的参数值将被绑定到相应的方法参数上 。 5. * 6. * 如果没有传递 userId 参数,框架会传入 null。可是这里我们定义的是 primitive type,异常伺候! 若 7. * 要解决此问题,需要将 primitive type 定义成相应的 wrapper type 即可,这里使用 Integer 就行 了。 8. *
Spring MVC 注解 2015/1/20
maomao
9. * 如果传递了 userId 参数,但值不是整数,你叫 test 怎么办呢?这种情况下,框架借助 PropertyEd itor 10. * 数据类型转换失败,ExceptionResolver 会接手处理,请求是不会进入 test 方法的。 11. * 12. * 这种方式下,默认的绑定行为需要我们严格遵守命名一致性原则。如果我们对此不满,想自定义绑 定关系,可以求 13. * 助于 @RequestParam。 14. */ 15. @RequestMapping("/test") 16. public String test(int userId) { ... }
1. /** 2. * 当我们不想使用 userId 作为方法的参数名,即不想使用默认的数据绑定方式。如果我们要使用 id 作为方法 3. * 的参数,为了保证名称为 userId 的请求参数可以绑定到新的名称为 id 的方法参数上,我们就可以 使用 4. * @RequestParam 对这一参数进行标注。@RequestParam 只可以标注于方法参数上。 5. * 6. * 如果请求参数中有 age,和方法的参数名称一致,故 age 参数不需要 @RequestParam 标注。如 果没有传递 7. * age,我们又不想定义成 Integer,很显然框架会注入 null 值,报错是必然的。这是由于 @Reques tParam 8. * 的 required 属性决定的,默认就是 true。如果我们定义成 false, 9. * 即 @RequestParam(required=false) int age 10. * 这个时候定义成 int 型的 age,即便请求参数没有 age 参数,也是没问题的。 11. * 12. * 同时,这里还能绑定 Date 类型,User 对象类型等等。如 date=2011-01-01&userName=Tom &userAge=18 13. * 这里,User 类的属性需要为 userName 和 userAge,以免和 age,name 混淆。所以,Spring M VC 对对象 14. * 的数据绑定就没有 Struts2 做的那么好了,Strtus2 可以这样:user.age=18&user.name=Tom 15. */ 16. @RequestMapping("/test2") 17. public String test2(@RequestParam("userId") int id, int age, Date date, User user) { ... }
@PathVariable:将URL template中的参数映射到方法参数,类似rest风格的url
1. @Controller 2. @RequestMapping("/my") 3. public class MyController { 4. 5. /** 6. * @PathVariable 是 url 模板,需要和 @RequestMapping 配合起来使用,这是 Spring 3.0 之后引 入的。 7. * 8. * 在这个例子中,请求的 url 必须满足类似 /my/user/zhangsan/18 这样的格式才能匹配方法。url 模板里 9. * 的参数名和方法参数名的绑定规则和 @RequestParam 类似,这里就不再赘述了。 10. * 11. * @PathVariable 和 @RequestParam 的区别在于: 12. * @PathVariable 的 url:/my//user/zhangsan/18
Spring MVC 注解 2015/1/20
maomao
13. * @RequestParam 的 url:/my//user?nickname=zhangsan&age=18 14. */ 15. @RequestMapping("/user/{nickname}/{age}"); 16. public String getUserInfo(@PathVariable("nickname") String name, @PathVariable int age) {...}
17. }
了解了如何将URL映射到Controller的方法,以及如何将请求参数封装到指定的变量后,我们来到下一个 比较关心的话题,Dao返回的数据如何传递到view层呢,在Struts2或者Servlet中,我们是使用Value Stack或者request和session进行数据传递的,那么在spring MVC中是如何传递数据的的? 在请求的处理方法中传入ModelMap或者Model类型的参数是最常使用的一种方式
1. public String xxxxmethod(String someparam,ModelMap model,HttpSession session) 2. { 3. //省略方法处理逻辑若干 4. //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型 5. model.addAttribute("key",someparam); 6. session.setAttribute(key,value); //可以向session中放入值 7. ...... 8. //返回跳转地址 9. return "path:handleok"; 10. }
@SessionAttributes :将某个模型数据放到session作用域中,和@ModelAttribute 配合使用可以实 现将session中的值注入到方法参数中。
1. /** 2. * 3. * @SessionAttributes 只能应用在类型声明上。比如下面的类的声明中,只有属性名为 "the-attribut e" 的数 4. * 据才会纳入到 session 的管理。 5. * 6. * @SessionAttributes 允许以属性名名称或者类型两种方法,来表明将哪些数据通过 session 进行管 理。这里 7. * 我们使用的是指定属性名称的方式,但通过类型来指定也是可行的,如: 8. * @SessionAttributes(types=User.class) 9. */ 10. @Controller 11. @RequestMapping("/my") 12. @SessionAttributes("the-attribute") 13. public class MyController { 14. 15. @RequestMapping("/getUser") 16. public String getUser(int userId, Model model) { 17. /** 18. * 注意,这里将 User 对象添加到属性名为 "the-attribute" 上,所以 User 对象将纳入到 session 的 19. * 管理。如果这里添加的对象的属性名不是 "the-attribute",那么它只会作用于当前请求,而不会 纳入到 20. * session 的管理中。 21. */
Spring MVC 注解 2015/1/20
maomao
22. User user = userService.getUserById(userId); 23. model.addAtrribute("the-attribute", user); 24. return "userinfo"; 25. } 26. 27. /** 28. * 将模型里的 "the-attribute" 为 key 的对象绑定到 User 类上。 29. * 30. * 另外,这个方法还有两个参数,BindingResult 和 SessionStatus。由于这里有绑定数据的动作,我 们可以 31. * 根据 BindingResult 对象获得数据绑定结果以决定后继流程该如何处理。SessionStatus 在这里用 于处理 32. * 完请求后,清空 session 里的数据。 33. */ 34. @RequestMapping("/updateUser") 35. public String updateUser(@ModelAttribute("the-attribute") User user, 36. BindingResult result, SessionStatus status) { 37. 38. if (result.hasErrors) { 39. return "error"; 40. } 41. 42. userService.updateUser(user); 43. // 我们通过调用 status.setComplete() 方法,该 Controller 所有放在 session 级别的模型属性数据 44. // 将从 session 中清空 45. status.setComplete(); 46. return "redirect:getUser?userId=" + user.getId(); 47. } 48. }
被标注了 @RequestMapping 注解的请求方法的签名。使用 @RequestMapping 标注的 web 请求处理 方法的签名比较灵活,我们几乎可以声明并使用任何类型的方法参数。不过,以下几种类型的方法参数将 拥有更多语义,它们均来自框架内部(或者说 AnnotationMethodHandlerAdapter)所管理的对象引用: request/response/session org.springframework.web.context.request.WebRequest。当前处理方法中获得可用的 WebRequest 实例。 java.util.Locale。通过相应的 LocalResolver 所返回的对应当前 web 请求的 Locale。 java.io.InputStream/java.io.Reader。相当于 request.getInputStream() 或 request.getReader() 所获得的对象引用。 java.io.OutputStream/java.io.Writer。相当于 response.getOutputStream() 或 response.getWriter() 所获得的对象引用。 java.util.Map/org.springframework.ui.ModelMap。你现在可用对模型数据为所欲为了。 org.springframework.validation.Errors/org.springframework.validation.BindingResult。 用于对 Command 对象进行数据验证的 Errors 或者 BindingResult 对象。声明这两种类型的方法参 数有一个限制,它们的声明必须紧跟着 Command 对象的定义。其它类型的方法参数是没有任何顺
Spring MVC 注解 2015/1/20
maomao
序限制的。 org.springframework.web.bind.supportt.SessionStatus。SessionStatus 主要用于管理请求处 理之后 Session 的状态,比如清除 Session 中的指定的数据。
基于注解的 Controller 的请求处理方法返回类型可以有如下 4 种形式(当然,前面提到的 @ResponseBody 和 @ModelAttribute 并没下面所描述的返回类型,具体参见上面对各自注解的讲 解): org.springframework.web.servlet.ModelAndView。这个不用多说,视图信息和模型信息都能 通过它返回。 java.lang.String。该类型返回值代表逻辑视图名,模型数据需要以其它形式提供,比如为处理方法 声明一个 ModelMap 类型的参数。注意,如果返回 null,并不代表向客户端输出空页面(定向思维惹 的祸),这种情况下,框架会从请求路径中提取视图信息。如果返回 null 就是要表示方法内部已处理 完请求,也不需要通知页面,就是想仅仅返回空白页面,唉,我还没有想出来咋整。。。反正 writer.write("") 这样写可以,还得声明一个 Writer 类型的方法参数。 org.springframework.ui.ModelMap。ModelMap 类型返回值只包含了模型数据信息而没有视图 信息,框架将根据请求的路径来提取视图信息。 void。没有任何返回值,视图信息将从请求路径中提取,模型数据需要通过其它形式提供。
String 类型的返回值为 null, 还有返回类型为 ModelMap 和 void,从请求路径中如何提取视图信息呢? 框架将截取请求路径中的最后一个 / 后面的内容,并去掉后缀名,剩下来的内容就是视图名。如请求路径 为 /spring3/user/welcome,那么视图名是 welcome,/spring3/user/welcome.action 的视图名也是 welcome。
最后我们再来看一些能简化配置的注解: <mvc:annotation-driven /> 会做以下几件事: 1. 向 spring 容器中注册 DefaultAnnotationHandlerMapping。 2. 向 spring 容器中注册 AnnotationMethodHandlerAdapter。 3. 配置一些 messageconverter。
<context:annotation-config /> 会做以下几件事: 1. 向 spring 容器中注册 AutowiredAnnotationBeanPostProcessor。 2. 向 spring 容器中注册 CommonAnnotationBeanPostProcessor。 3. 向 spring 容器中注册 PersistenceAnnotationBeanPostProcessor。 4. 向 spring 容器中注册 RequiredAnnotationBeanPostProcessor。
<context:component-scan/>,不但启用了对类包进行扫描以实施注解驱动 Bean 定义的功能,同时 还启用了注解驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor)。因此当使
Spring MVC 注解 2015/1/20
maomao
用 <context:component-scan /> 后,除非需要使用PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor 两个 Processor 的功能(例如 JPA 等),否则就可以将 <context:annotation-config /> 移除了。
@Controller
@RequestMapping(value="/message")
Spring MVC 在 Spring 2.5 发布中新添加了一种基于注解的 Controller 形式。借助于与 Spring 2.5 一同发布的容器内 <context:component-scan> 功能支持,基于注解的 Controller 几乎可以达到 XML 零配置,进而极大地提高我们的开发效率。 和其它 Controller 一样,基于注解的 Controller 同样有相应的 HandlerMapping,那就 是DefaultAnnotationHandlerMapping。同样,也有相应的 HandlerAdapter,那就是 AnnotationMethodHandlerAdapter。甚至,我们都可以不把 Controller 注册到容器里,那么肯定需要 一种机制来帮助我们完成这点,这就是 <context:component-scan>。开发基于注解的 Controller,我 们需要做以下准备工作: 1. 配置 <context:compnent-scan> :配置spring扫描哪些包中的注解类,主要扫描 @Component组件,以及细化后的@Repository、@Service、@Controller等
1. <context:component-scan base-package="org.maomao.springmvc.web" />
2. 配置 HandlerMapping : 定义了 DefaultAnnotationHandlerMapping,它就可以将请求来的 url 和被注解 了 @RequesMapping 的指进行匹配。
1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapp ing"></bean>
好了,有了以上几点准备工作,我们就可以开始基于注解的 Controller 之旅了。下面我们来一个一个注解 的来讲解。
@Controller :类级别上的注解。我们定义的类可以只是一个 javabean,不需要实现任何接口。标注了 @Controller,借助 <context:component-scan>,框架能自动识别到这就是一个 Controller
1. @Controller 2. public class MyController { 3. // ...... 4. }
@RequestMapping :@RequestMapping 可以出现在类级别上,也可以出现在方法上。如果出现在类级别上, 那请求的 url 为 类级别上的 @RequestMapping + 方法级别上的 @RequestMapping,否则直接取方法级上 的 @RequestMapping。类级别的 @RequestMapping 不是必需的。 备注:可以使用value属性来指定访问的URL,也可以通过param参数来访问,咱们看看下面的例子:
1. @Controller 2. @RequestMapping("/my") 3. public class MyController { 4. 5. /** 6. * 方法返回值String表示的是页面地址。 7. * 8. * 由于类级别上定义了 @RequestMapping,那么想匹配到这个方法来处理请求,url 必须为 /my/s
Spring MVC 注解 2015/1/20
maomao
omelist。 9. * 如果没有定义类级别上的 @RequestMapping,url 为 /somelist 即可。 10. * 同时,请求方法必须为 POST 11. */ 12. @RequestMapping(value="/somelist", method=RequestMethod.POST); 13. public String getSomeList() {...} 14. 15. }
1. /** 2. * 在方法级别使用 @RequestMapping 来限定请求处理的时候,可以指定两个属性。除了我们在上 面刚使用过的 3. * method 属性,还有一个 params 属性。使用 params 属性,可以达到与使用 4. * ParameterMethodNameResolver 作为 MethodResolver的 MultiActionController 类似的功能 。 5. * 6. * params 有两种表达形式,这里先说第一种:"parameterName=parameterValue" 7. * 8. * 请求方法为 GET 或 POST,且具有 hello 参数,且值为 world 的请求才能匹配到该方法,如: 9. * /my?hello=world 10. */ 11. @RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.P OST}) 12. public String helloworld() {...}
1. /** 2. * params 属性的另外一种表达形式为:"parameter" 3. * 4. * 请求方法为 GET,且具有请求参数 java 即匹配此方法,而不管 java 参数的值是什么,如: 5. * /my?java=anything 6. */ 7. @RequestMapping(params="java", method={RequestMethod.GET}) 8. public String java() {...}
@RequestParam :可以将请求参数映射到方法参数,将数据封装到集合和数组中的用法和struts2中类似,只要参 数名称按照约定就可以自动封装。
1. /** 2. * 注意,这里的方法有一个参数。若请求 url 为 /my/test,会匹配此方法。这里的方法的参数名为 u serId, 3. * 那么请求参数中一定有名为 userId 的参数,且值为整数。这也是默认的绑定行为,它是根据名称匹 配原则进行 4. * 的数据绑定。当请求中的参数名与方法名一致的时候,相应的参数值将被绑定到相应的方法参数上 。 5. * 6. * 如果没有传递 userId 参数,框架会传入 null。可是这里我们定义的是 primitive type,异常伺候! 若 7. * 要解决此问题,需要将 primitive type 定义成相应的 wrapper type 即可,这里使用 Integer 就行 了。 8. *
Spring MVC 注解 2015/1/20
maomao
9. * 如果传递了 userId 参数,但值不是整数,你叫 test 怎么办呢?这种情况下,框架借助 PropertyEd itor 10. * 数据类型转换失败,ExceptionResolver 会接手处理,请求是不会进入 test 方法的。 11. * 12. * 这种方式下,默认的绑定行为需要我们严格遵守命名一致性原则。如果我们对此不满,想自定义绑 定关系,可以求 13. * 助于 @RequestParam。 14. */ 15. @RequestMapping("/test") 16. public String test(int userId) { ... }
1. /** 2. * 当我们不想使用 userId 作为方法的参数名,即不想使用默认的数据绑定方式。如果我们要使用 id 作为方法 3. * 的参数,为了保证名称为 userId 的请求参数可以绑定到新的名称为 id 的方法参数上,我们就可以 使用 4. * @RequestParam 对这一参数进行标注。@RequestParam 只可以标注于方法参数上。 5. * 6. * 如果请求参数中有 age,和方法的参数名称一致,故 age 参数不需要 @RequestParam 标注。如 果没有传递 7. * age,我们又不想定义成 Integer,很显然框架会注入 null 值,报错是必然的。这是由于 @Reques tParam 8. * 的 required 属性决定的,默认就是 true。如果我们定义成 false, 9. * 即 @RequestParam(required=false) int age 10. * 这个时候定义成 int 型的 age,即便请求参数没有 age 参数,也是没问题的。 11. * 12. * 同时,这里还能绑定 Date 类型,User 对象类型等等。如 date=2011-01-01&userName=Tom &userAge=18 13. * 这里,User 类的属性需要为 userName 和 userAge,以免和 age,name 混淆。所以,Spring M VC 对对象 14. * 的数据绑定就没有 Struts2 做的那么好了,Strtus2 可以这样:user.age=18&user.name=Tom 15. */ 16. @RequestMapping("/test2") 17. public String test2(@RequestParam("userId") int id, int age, Date date, User user) { ... }
@PathVariable:将URL template中的参数映射到方法参数,类似rest风格的url
1. @Controller 2. @RequestMapping("/my") 3. public class MyController { 4. 5. /** 6. * @PathVariable 是 url 模板,需要和 @RequestMapping 配合起来使用,这是 Spring 3.0 之后引 入的。 7. * 8. * 在这个例子中,请求的 url 必须满足类似 /my/user/zhangsan/18 这样的格式才能匹配方法。url 模板里 9. * 的参数名和方法参数名的绑定规则和 @RequestParam 类似,这里就不再赘述了。 10. * 11. * @PathVariable 和 @RequestParam 的区别在于: 12. * @PathVariable 的 url:/my//user/zhangsan/18
Spring MVC 注解 2015/1/20
maomao
13. * @RequestParam 的 url:/my//user?nickname=zhangsan&age=18 14. */ 15. @RequestMapping("/user/{nickname}/{age}"); 16. public String getUserInfo(@PathVariable("nickname") String name, @PathVariable int age) {...}
17. }
了解了如何将URL映射到Controller的方法,以及如何将请求参数封装到指定的变量后,我们来到下一个 比较关心的话题,Dao返回的数据如何传递到view层呢,在Struts2或者Servlet中,我们是使用Value Stack或者request和session进行数据传递的,那么在spring MVC中是如何传递数据的的? 在请求的处理方法中传入ModelMap或者Model类型的参数是最常使用的一种方式
1. public String xxxxmethod(String someparam,ModelMap model,HttpSession session) 2. { 3. //省略方法处理逻辑若干 4. //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型 5. model.addAttribute("key",someparam); 6. session.setAttribute(key,value); //可以向session中放入值 7. ...... 8. //返回跳转地址 9. return "path:handleok"; 10. }
@SessionAttributes :将某个模型数据放到session作用域中,和@ModelAttribute 配合使用可以实 现将session中的值注入到方法参数中。
1. /** 2. * 3. * @SessionAttributes 只能应用在类型声明上。比如下面的类的声明中,只有属性名为 "the-attribut e" 的数 4. * 据才会纳入到 session 的管理。 5. * 6. * @SessionAttributes 允许以属性名名称或者类型两种方法,来表明将哪些数据通过 session 进行管 理。这里 7. * 我们使用的是指定属性名称的方式,但通过类型来指定也是可行的,如: 8. * @SessionAttributes(types=User.class) 9. */ 10. @Controller 11. @RequestMapping("/my") 12. @SessionAttributes("the-attribute") 13. public class MyController { 14. 15. @RequestMapping("/getUser") 16. public String getUser(int userId, Model model) { 17. /** 18. * 注意,这里将 User 对象添加到属性名为 "the-attribute" 上,所以 User 对象将纳入到 session 的 19. * 管理。如果这里添加的对象的属性名不是 "the-attribute",那么它只会作用于当前请求,而不会 纳入到 20. * session 的管理中。 21. */
Spring MVC 注解 2015/1/20
maomao
22. User user = userService.getUserById(userId); 23. model.addAtrribute("the-attribute", user); 24. return "userinfo"; 25. } 26. 27. /** 28. * 将模型里的 "the-attribute" 为 key 的对象绑定到 User 类上。 29. * 30. * 另外,这个方法还有两个参数,BindingResult 和 SessionStatus。由于这里有绑定数据的动作,我 们可以 31. * 根据 BindingResult 对象获得数据绑定结果以决定后继流程该如何处理。SessionStatus 在这里用 于处理 32. * 完请求后,清空 session 里的数据。 33. */ 34. @RequestMapping("/updateUser") 35. public String updateUser(@ModelAttribute("the-attribute") User user, 36. BindingResult result, SessionStatus status) { 37. 38. if (result.hasErrors) { 39. return "error"; 40. } 41. 42. userService.updateUser(user); 43. // 我们通过调用 status.setComplete() 方法,该 Controller 所有放在 session 级别的模型属性数据 44. // 将从 session 中清空 45. status.setComplete(); 46. return "redirect:getUser?userId=" + user.getId(); 47. } 48. }
被标注了 @RequestMapping 注解的请求方法的签名。使用 @RequestMapping 标注的 web 请求处理 方法的签名比较灵活,我们几乎可以声明并使用任何类型的方法参数。不过,以下几种类型的方法参数将 拥有更多语义,它们均来自框架内部(或者说 AnnotationMethodHandlerAdapter)所管理的对象引用: request/response/session org.springframework.web.context.request.WebRequest。当前处理方法中获得可用的 WebRequest 实例。 java.util.Locale。通过相应的 LocalResolver 所返回的对应当前 web 请求的 Locale。 java.io.InputStream/java.io.Reader。相当于 request.getInputStream() 或 request.getReader() 所获得的对象引用。 java.io.OutputStream/java.io.Writer。相当于 response.getOutputStream() 或 response.getWriter() 所获得的对象引用。 java.util.Map/org.springframework.ui.ModelMap。你现在可用对模型数据为所欲为了。 org.springframework.validation.Errors/org.springframework.validation.BindingResult。 用于对 Command 对象进行数据验证的 Errors 或者 BindingResult 对象。声明这两种类型的方法参 数有一个限制,它们的声明必须紧跟着 Command 对象的定义。其它类型的方法参数是没有任何顺
Spring MVC 注解 2015/1/20
maomao
序限制的。 org.springframework.web.bind.supportt.SessionStatus。SessionStatus 主要用于管理请求处 理之后 Session 的状态,比如清除 Session 中的指定的数据。
基于注解的 Controller 的请求处理方法返回类型可以有如下 4 种形式(当然,前面提到的 @ResponseBody 和 @ModelAttribute 并没下面所描述的返回类型,具体参见上面对各自注解的讲 解): org.springframework.web.servlet.ModelAndView。这个不用多说,视图信息和模型信息都能 通过它返回。 java.lang.String。该类型返回值代表逻辑视图名,模型数据需要以其它形式提供,比如为处理方法 声明一个 ModelMap 类型的参数。注意,如果返回 null,并不代表向客户端输出空页面(定向思维惹 的祸),这种情况下,框架会从请求路径中提取视图信息。如果返回 null 就是要表示方法内部已处理 完请求,也不需要通知页面,就是想仅仅返回空白页面,唉,我还没有想出来咋整。。。反正 writer.write("") 这样写可以,还得声明一个 Writer 类型的方法参数。 org.springframework.ui.ModelMap。ModelMap 类型返回值只包含了模型数据信息而没有视图 信息,框架将根据请求的路径来提取视图信息。 void。没有任何返回值,视图信息将从请求路径中提取,模型数据需要通过其它形式提供。
String 类型的返回值为 null, 还有返回类型为 ModelMap 和 void,从请求路径中如何提取视图信息呢? 框架将截取请求路径中的最后一个 / 后面的内容,并去掉后缀名,剩下来的内容就是视图名。如请求路径 为 /spring3/user/welcome,那么视图名是 welcome,/spring3/user/welcome.action 的视图名也是 welcome。
最后我们再来看一些能简化配置的注解: <mvc:annotation-driven /> 会做以下几件事: 1. 向 spring 容器中注册 DefaultAnnotationHandlerMapping。 2. 向 spring 容器中注册 AnnotationMethodHandlerAdapter。 3. 配置一些 messageconverter。
<context:annotation-config /> 会做以下几件事: 1. 向 spring 容器中注册 AutowiredAnnotationBeanPostProcessor。 2. 向 spring 容器中注册 CommonAnnotationBeanPostProcessor。 3. 向 spring 容器中注册 PersistenceAnnotationBeanPostProcessor。 4. 向 spring 容器中注册 RequiredAnnotationBeanPostProcessor。
<context:component-scan/>,不但启用了对类包进行扫描以实施注解驱动 Bean 定义的功能,同时 还启用了注解驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor)。因此当使
Spring MVC 注解 2015/1/20
maomao
用 <context:component-scan /> 后,除非需要使用PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor 两个 Processor 的功能(例如 JPA 等),否则就可以将 <context:annotation-config /> 移除了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接注解就行了,你不用struts就好,你把控制权给spring 就可以直接写一个value=xxx就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struts2不都是这样的么。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询