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:[email protected]">发送邮件</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:[email protected]">发送邮件</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]

在线交谈

你可能感兴趣的:(springMVC)