`

MVC-3(annotation)

阅读更多

1: 例子

@Controller                   //<——①
@RequestMapping("/forum.do")
public class BbtForumController {

    @Autowired
    private BbtForumService bbtForumService;

    @RequestMapping //<——②
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }
}

 

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    <!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
    <context:component-scan base-package="com.baobaotao.web"/>

    <!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.
        AnnotationMethodHandlerAdapter"/>

    <!--  ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
</beans>

2:概述

@Controller
public class BbtForumController {
    @Autowired
    private BbtForumService bbtForumService;

    @RequestMapping("/listAllBoard.do") // <—— ①
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }

    @RequestMapping("/listBoardTopic.do") // <—— ②
    public String listBoardTopic(int topicId) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("call listBoardTopic method.");
        return "listTopic";
    }
}

@Controller
@RequestMapping("/bbtForum.do")  // <—— ① 指定控制器对应URL请求
public class BbtForumController {

    @Autowired
    private BbtForumService bbtForumService;

    // <—— ② 如果URL请求中包括"method=listAllBoard"的参数,由本方法进行处理
    @RequestMapping(params = "method=listAllBoard")
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }

    // <—— ③ 如果URL请求中包括"method=listBoardTopic"的参数,由本方法进行处理
    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(int topicId) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("call listBoardTopic method.");
        return "listTopic";
    }
}

@Controller
@RequestMapping("/bbtForum.do") 
public class BbtForumController {

    @RequestMapping(params = "method=createTopic",method = RequestMethod.POST)
    public String createTopic(){
        System.out.println("call createTopic method.");
        return "createTopic";
    }
}

参数自动邦定

    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(int topicId,User user) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("topicId:"+topicId);
        System.out.println("user:"+user);
        System.out.println("call listBoardTopic method.");
        return "listTopic";
    }
参数通过注解邦定

@Controller
@RequestMapping("/bbtForum.do")
public class BbtForumController {

    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(@RequestParam("id") int topicId,User user) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("topicId:"+topicId);
        System.out.println("user:"+user);
        System.out.println("call listBoardTopic method.");
        return "listTopic";
    }

}

使用ModelMap(作用域同HttpServletRequest)

@RequestMapping(params = "method=listBoardTopic")
public String listBoardTopic(@RequestParam("id")int topicId,
User user,ModelMap model) {
     bbtForumService.getBoardTopics(topicId);
     System.out.println("topicId:" + topicId);
     System.out.println("user:" + user);
     //① 将user对象以currUser为键放入到model中
     model.addAttribute("currUser",user);
     return "listTopic";
}

将ModelMap参数放入Session中

@Controller
@RequestMapping("/bbtForum.do")
@SessionAttributes("currUser") //①将ModelMap中属性名为currUser的属性
//放到Session属性列表中,以便这个属性可以跨请求访问
public class BbtForumController {

    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(@RequestParam("id")int topicId, User user,
ModelMap model) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("topicId:" + topicId);
        System.out.println("user:" + user);
        model.addAttribute("currUser",user); //②向ModelMap中添加一个属性
        return "listTopic";
    }

}
SessionAttributes 注解介绍

@SessionAttributes("currUser")

@SessionAttributes({“attr1”,”attr2”})

@SessionAttributes(types = User.class)

@SessionAttributes(types = {User.class,Dept.class})

@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})

ModelMap里面的属性邦定到方法入参

@Controller
@RequestMapping("/bbtForum.do")
@SessionAttributes("currUser") //①让ModelMap的currUser属性拥有session级作用域
public class BbtForumController {

    @Autowired
private BbtForumService bbtForumService;

    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(@RequestParam("id")int topicId, User user,
ModelMap model) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("topicId:" + topicId);
        System.out.println("user:" + user);
        model.addAttribute("currUser",user); //②向ModelMap中添加一个属性
        return "listTopic";
    }


    @RequestMapping(params = "method=listAllBoard")
   //③将ModelMap中的
public String listAllBoard(@ModelAttribute("currUser") User user) {
//currUser属性绑定到user入参中。
        bbtForumService.getAllBoard();
        System.out.println("user:"+user);
        return "listBoard";
    }
}

3:属性编辑器

全局

public class MyBindingInitializer implements WebBindingInitializer {

    public void initBinder(WebDataBinder binder, WebRequest request) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class,
            new CustomDateEditor(dateFormat, false));
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));
    }

}

Controller内部

@Controller
public class MyFormController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }
    …
}

4:准备数据

 @Controller
@RequestMapping("/bbtForum.do")
public class BbtForumController {

    @Autowired
    private BbtForumService bbtForumService;

    @ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性(每次请求到来时,首先执行)
    public List<String> populateItems() {
        List<String> lists = new ArrayList<String>();
        lists.add("item1");
        lists.add("item2");
        return lists;
    }

    @RequestMapping(params = "method=listAllBoard")
    public String listAllBoard(@ModelAttribute("currUser")User user, ModelMap model) {
        bbtForumService.getAllBoard();
        //<——②在此访问模型中的items属性
        System.out.println("model.items:" + ((List<String>)model.get("items")).size());
        return "listBoard";
    }
}

分享到:
评论

相关推荐

    spring-mvc-4.2.xsd.zip

    这个文件包含了所有在Spring MVC 4.2版本中可以使用的XML配置元素和属性,例如`&lt;mvc:annotation-driven&gt;`、`&lt;bean&gt;`、`&lt;context:component-scan&gt;`等。这些配置元素允许开发者声明式地配置控制器、视图解析器、转换...

    拦截器与冲突解决

    - **排除默认拦截器**:如果`&lt;mvc:annotation-driven /&gt;`包含默认拦截器,可以考虑使用`&lt;mvc:default-servlet-handler&gt;`或`&lt;mvc:annotation-driven enable-matrix-variables="false" /&gt;`来禁用它们。 - **调整拦截器...

    SpringMVC源码总结(二)mvc:mvc:annotation-driven背后的那些事

    在Spring MVC框架中,`mvc:annotation-driven`是Spring MVC配置中的一个重要元素,它使得我们的应用能够支持基于注解的控制器、数据绑定、格式化转换器和服务端验证等功能。这篇博客将深入探讨`mvc:annotation-...

    SpringMVC源码总结(三)mvc:annotation-driven和mvc:message-converters简单介绍

    在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...

    spring-3-mvc-hello-world-example-annotation

    在本地运行该项目$ git clone https://github.com/mkyong/spring3-mvc-maven-annotation-hello-world$ mvn jetty:run 访问http://localhost:8080/spring3 ### 3。 将此项目导入Eclipse IDE $ mvn eclipse:eclipse ...

    ssh整合----annotation

    **3. 构建Hibernate** 对于Hibernate部分,我们需要配置数据库连接,使用DB Browser创建数据库连接,并引入Hibernate的jar包。通过Hibernate的注解,我们可以直接在实体类上声明数据库字段,简化了传统的XML配置。...

    Spring MVC--2.入门程序

    &lt;mvc:annotation-driven/&gt; &lt;property name="prefix" value="/WEB-INF/views/"/&gt; ``` 现在,你可以开始编写控制器类,比如`HelloController.java`,使用`@Controller`注解标识该类为Spring MVC的控制器: ...

    Spring3.X @MVC - (一)重要的配置文件

    2. **`&lt;mvc:annotation-driven&gt;`**: 此元素启用Spring MVC对注解的处理,使得我们可以在控制器类的方法上使用像@RequestMapping这样的注解来处理HTTP请求。它还提供了数据绑定、转换服务、验证等特性。 3. **`...

    Spring MVC Annotation验证的方法

    Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...

    spring—mvc -json

    &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters&gt; &lt;/mvc:message-converters&gt; &lt;/mvc:annotation-driven&gt; ``` 5. 测试:现在,当客户端向 `/person` URL发起GET请求时,Spring MVC会将`getPerson`方法返回...

    Spring MVC--6.RESTful SpringMVC CRUD

    在`web.xml`或Spring Boot的配置中,我们需要配置`&lt;mvc:annotation-driven&gt;`元素,或者在Spring Boot中通过`@EnableWebMvc`注解。 在`springmvc_2`这个压缩包文件中,可能包含了相关的代码示例、配置文件或其他辅助...

    Spring-MVC-3.0.rar_Java spring mvc_spring mvc_spring ppt

    1. **Annotation-based Configuration**:引入了注解配置,如@Controller、@RequestMapping等,使得配置更简洁、更直观。 2. **ModelAndView的替代**:可以使用@ModelAttribute注解直接在方法参数中注入模型数据,...

    7-Spring-mvc-ajax支持1

    首先,`&lt;mvc:annotation-driven/&gt;`在Spring配置文件中是一个重要的元素,它告诉Spring启用注解驱动,自动注册一些关键的Bean,如`RequestMappingHandlerMapping`和`RequestMappingHandlerAdapter`。`...

    (代码)SpringMVC第12讲:<mvc:annotation-driven/>

    首先,`&lt;mvc:annotation-driven/&gt;`的作用是自动配置Spring MVC,启用对处理方法注解的支持,如`@RequestMapping`、`@RequestParam`、`@ModelAttribute`等。通过这个元素,我们可以避免编写大量的XML配置,转而采用...

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar

    spring_MVC源码

    51. &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt; 52. &lt;tx:annotation-driven mode="aspectj"/&gt; 53. 54. &lt;aop:aspectj-autoproxy/&gt; 55.&lt;/beans&gt; hibernate.properties数据库连接...

    SpringMVC-annotation

    在"SpringMVC-annotation"这个主题中,我们将深入探讨如何利用注解来实现SpringMVC的配置,从而极大地减少XML配置文件的工作量。 在传统的SpringMVC应用中,我们需要在`web.xml`中配置DispatcherServlet,并在...

    SSH2-Annotation.rar_annotation ssh2_ssh2_ssh2 annotation

    3. **Struts2框架**:Struts2是一个基于MVC设计模式的Web应用框架,用于处理用户请求并返回响应。本项目中,Struts2的配置也采用了注解,如@Controller、@Action等,使得控制器类的定义更为灵活,不再需要编写`...

    SpringMVC-Annotation

    在传统的SpringMVC中,我们需要在XML配置文件中声明DispatcherServlet、视图解析器、模型-视图-控制器(MVC)组件等。但在现代Spring项目中,我们倾向于使用注解来减少XML配置。例如,`@Controller`用于标记一个类...

    Spring MVC internationalization annotation example

    Spring MVC internationalization annotation example 这个是annotation 方式的国际化 访问http://localhost:8080/login.htm

Global site tag (gtag.js) - Google Analytics