zoukankan      html  css  js  c++  java
  • springmvc不同方式控制器实现与参数传递

     

    添加spring相关包,笔者用最新包3.2.2,可以去官方下载最新包http://www.springsource.org/spring-community-download

    模块说明,注释在代码中,方便理解

    实例一:使用实现接口的方法实现控制器

    web.xml中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
     <servlet>
         <servlet-name>hello</servlet-name> <!-- 此处用的是hello,所以同目录下的想xml文件名应该为hello-servlet.xml -->
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
     
     
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    创建关联的hell-servlet.xml(/WEB-INF/目录下创建)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
           
           <!-- 配置控制器,请求路径/welcome.html,clas指定处理类 -->
           <bean name="/welcome.html" class="com.springmvc.controller.WelcomeController" />
           
           <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
                   <!-- 定义视图前缀格式 -->
                   <property name="prefix" value="/WEB-INF/jsp/" />
                   <!-- 定义视图后缀格式 -->
                   <property name="suffix" value=".jsp"/>
           </bean>
    </beans>

    编写控制器类WelcomeController.java

    package com.springmvc.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractController;
    
    /**
     *
     *  WelcomeController.java   
     *
     *  @version : 1.1
     *  
     *  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
     *    
     *  @since   : 1.0        创建时间:    2013-4-12  下午10:52:16
     *     
     *  TODO     : 
     *
     */
    public class WelcomeController extends AbstractController{
    
        @Override
        protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
                HttpServletResponse arg1) throws Exception {
            System.out.println("com.springmvc.controller.WelcomeController");
            //返回视图
            return new ModelAndView("welcome");
        }
        
    }

    访问路径:http://localhost:8080/项目名称/welcome.html

    实例二:使用Annotation实现控制器

    web.xml内容同上

    View Code
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
        <servlet>
            <servlet-name>user</servlet-name> <!-- 此处用的是user,所以同目录下的想xml文件名应该为user-servlet.xml -->
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>user</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    user-servlet.xml中的内容

    <?xml version="1.0" encoding="UTF-8"?>
    <beans  xmlns="http://www.springframework.org/schema/beans"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
        <!--
            指定使用注解方式配置,配置自动扫描的包名,
            base-package指定自己应用中控制器所在的包目录
            <context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有: 
            @Controller 声明Action组件
            @Service 声明Service组件
            @Service("myMovieLister") 
            @Repository 声明Dao组件
            @Component 泛指组件, 当不好归类时. 
            @RequestMapping("/menu") 请求映射 
            @Resource用于注入,( j2ee提供的 ) 默认按名称装配,
            @Resource(name="beanName") 
            @Autowired用于注入,(srping提供的) 默认按类型装配 
            @Transactional(rollbackFor={Exception.class}) 事务管理 
            @ResponseBody @Scope("prototype")设定bean的作用域
        -->
        <context:component-scan base-package="com.springmvc.demo.controller" />
        <!-- 默认的注解映射的支持 -->
        <mvc:annotation-driven />
    
        <!-- 配置视图解析器 -->
        <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 定义视图前缀格式 -->
            <property name="prefix" value="/WEB-INF/jsp/" />
            <!-- 定义视图后缀格式 -->
            <property name="suffix" value=".jsp" />
        </bean>
    </beans>

    UserController控制器中的内容

    package com.springmvc.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     *
     *  UserController.java   
     *
     *  @version : 1.1
     *  
     *  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
     *    
     *  @since   : 1.0        创建时间:    2013-4-13  上午12:58:05
     *     
     *  TODO     : 
     *
     */
    
    @Controller
    public class UserController {
    
        @RequestMapping(value={"/list"})
        public String listUser(){
            //value值不一定要跟方法名相同,value值是请求的url,让请求与对应的方法绑定
            System.out.println("执行list操作");
            return "list";    //创建视图页面
        }
        
        
        @RequestMapping("/insert")
        public String insert(){
            //可以不写value="/insert",上述表示方法也可以
            System.out.println("执行insert操作");
            return "insert";    //创建视图页面
        }
        
        @RequestMapping(value="delete")
        public String delete(){
            System.out.println("执行delete操作");
            return "delete";
        }
    }

    这样就可以实现一个控制器中执行相关的多个请求处理了.

    /WEB-INF/jsp/目录下分别有方法返回的视图页面list.jsp,insert.jspdelete.jsp页面

    针对list业务访问方式举例:http://localhost:8080/项目名称/insert

    针对delete业务访问方式举例:http://localhost:8080/项目名称/delete


    如何给控制器中传入参数

    只需要传入的参数的实参参数名跟形成方法中的形参名一致即可

        @RequestMapping(value="select")
        public String select(String username){
            System.out.println("执行查询操作:要查询的用户名为:" + username);
            return "select";
        }

    此时访问的时候可以用如下方式传入参数

    http://localhost:8080/myproject/select?username=dennisit
    这里
    username必须跟select方法的形参名一致才能保证数据传递成功,在后台打印如下结果:

    执行查询操作:要查询的用户名为:dennisit

    虽然这里有形参,但我们使用http://localhost:8080/myproject/select

    访问也是可以成功的,表示参数为null,可以通过后台打印看出

    执行查询操作:要查询的用户名为:null

     

     

    如何获取值展示到视图页面

    方案一(不推荐): 在参数中加入一个Map<String, String>值对,可以按照session的思想理解,使用方式类似

    @RequestMapping(value="select")
    public String select(String username,Map<String,Object> context){
        System.out.println("执行查询操作:要查询的用户名为:" + username);
        context.put("username", username);
        return "select";
    }

    访问路径:http://localhost:8080/myproject/select?username=dennisit

    WEB-INF/jsp/select.jsp中内容

      <body>
            执行了查询操作,查询的用户名为${ username }
      </body>

    程序运行结果:执行了查询操作,查询的用户名为dennisit 

    方案二(推荐):在参数中使用Model对象

    @RequestMapping(value="select")
    public String select(String username,Model model){
        System.out.println("执行查询操作:要查询的用户名为:" + username);
        model.addAttribute("username", username);
        return "select";
    }

    访问路径跟执行结果同上,只是用的传递参数的对象由Map集合编程Model对象,用法没有区别

    转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/04/13/3017910.html]

    在线交谈

    热爱生活,热爱Coding,敢于挑战,用于探索 ...
  • 相关阅读:
    菜鸟涂鸦作品展_No.29
    菜鸟涂鸦作品展_No.27
    菜鸟涂鸦作品展_No.26
    关注的前沿动态
    货币转换
    第二周总结
    老鼠
    71 打印沙漏
    学习总结0.0
    第五周作业
  • 原文地址:https://www.cnblogs.com/dennisit/p/3017910.html
Copyright © 2011-2022 走看看