您的位置:首页 > 编程语言 > Java开发

SpringMVC 实例应用 -- 不同方式控制器实现与参数传递

2013-04-14 23:41 295 查看
添加spring相关包,笔者用最新包3.2.2,可以去官方下载最新包http://www.springsource.org/spring-community-download

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

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

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.jsp和delete.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对象,用法没有区别

[转载自:[/article/4929368.html]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐