SpringMVC控制器与视图的数据交换

1,先创建spring的主配置文件(applicationContaxt.xml如果写在WEB-INF下,就不用配置context了,就是不用告诉它路径了,WEB-INF会自动加载的),由监听器负责加载 ,导入类库,添加spring支持

2,stru2的核心控制器就是咱自己写的Action  视图就是jsp  模型:数据访问层、业务逻辑层、实体类  StrutsPrepareAndExecuteFilter

3,SpringMVC:先在web.xml中配置核心控制器:添加servlet,DispatcherServlet类 需要加载SpringMVC自身配置文件   伪静态  *.html  叫后缀匹配

4,SpringMVC配置文件:在加载主配置文件下,自动加载springmvc配置文件。必须建在WEB-INF下,文件名{servletName}-servlet.xml一个都不能写错,  servletName是我在web.xml中自己起的名字,核心控制器负责加载

5,两个配置文件会产生两个IOC容器 applicationContaxt.xml是主容器;SpringMVC配置文件是子容器

可以把公共的bean配置在主容器中,子可以用主,但主不能用子

第一步,把controller配置成由spring管理的bean    @Controller("helloController")第二步,调用  @RequestMapping("/")    @RequestMapping("hello")

第一点不同:

//struts2中处理请求的方法,必须是公共的,返回字符串,无参的public String execute() throws Exception {
		//从session中获取当前添加机器故障的用户
		User user = (User)sessionMap.get("user");
		//为Problem添加用户
		problem.setUser(user);
		//调用service保存problem
		problemService.saveProblem(problem);

		return SUCCESS;
	}第二点不同:一个类中只能写一个方法,然后去struts.xml中配置命名空间    增删改查四个acction

<!-- 后台故障登记 -->    <package name="problem-add" namespace="/background/regist" extends="default">        <!-- 添加故障登记 -->        <action name="add" class="cn.bdqn.problem.action.problem.AddProblemAction" >        如果返回succuss结果,就执行result中的指令            <result type="redirectAction">                <param name="namespace">/background/reply</param>                <param name="actionName">list</param>                        </result>        </action>    </package>

//springMVC可以返回多种类型的结果,方法可以有参数,十分灵活//controller必须添加到ioc容器中,变成spring中的bean---->加注解//一个类可以添加多个方法,一个方法就是一个url路径//
第三点不同:一律先走控制器,由控制器处理请求,再调用视图显示而避免浏览器直接调用视图。在WEB-INF下新建一个目录view,因为在webroot下可以直接访问action,WEB-INF是不能被浏览器直接访问的,必须得先走控制器,再走jsp页面struts2:jsp写在webroot下,MyBatis:jsp写在WEB-INT下  
package cn.bdqn.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller("helloController")
@RequestMapping("/")//写/代表hellocontroller中的方法都是在webroot下访问的
public class HelloController {
	//http://localhost:8080/MVC/hello.html
	@RequestMapping("hello")//通过hello这个名字进行访问
	public String hello() {
		return "hello";   //   返回字符串叫返回视图名称
	}一、从控制器向视图传递数据1.通过返回ModelAndView对象向视图传递数据------每次向页面传不同的内容
public ModelAndView hello1() {        ModelAndView mav=new ModelAndView("hello");        mav=mav.addObject("Message","HelloWorld!");//这么一写,就自动存在请求作用域中                return mav;    }2.通过传入HttpServletRequest对象直接操作请求作用域------每次向页面传不同的内容//也可以直接存到请求作用域中,不用通过ModelAndView对象了    public String hello(HttpServletRequest request) {//由于spring比较灵活,只需要把对象当参数放进去方法中,就会自动成对象了        request.setAttribute("Message","HelloWorld!");        return "hello";    }3.通过在Controller的方法上添加@ModelAttribute注解  将方法的返回值加入模型
public HelloController() {//Controller默认只创建一个对象,因为spring默认是singlton。        System.out.println("调用了HelloController无参构造方法");    }    //每次请求固定的传递的数据,可以定义Controller类的get方法,比如不管访问哪儿,都固定的向页面传递你访问网站的标题,每次向页面传相同的内容    @ModelAttribute("title")//会先被SpringMVC调用, 把方法的返回值添加到模型中(也就意味着添加到请求作用域中)    public String getTitle(){        return "SpringMVC教程";    }

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"    p:prefix="/WEB-INF/view/"    p:suffix=".jsp"

/>

二、从视图向控制器提交数据
1.通过控制器的方法参数接收表单数据

@RequestMapping(value="login",method=RequestMethod.GET)
	public String showLogin(){

		return "login";
	}
	/**但是现在有个问题,显示和提交的路径一致,啥时候执行第一个(以get请求),啥时候执行第二个(以post请求)*/
	//表单提交  不需要定义另外的提交路径,还让他提交回login.html。是默认的   表单字段少可以采用这种方式接受
	@RequestMapping(value="login",method=RequestMethod.POST)
	public String doLogin(String loginName,String password){
		System.out.println("登录名:"+loginName);
		System.out.println("密码:"+password);
		return "hello";
	}

2.通过Java对象封装表单提交的数据

//建议不用实体类接受请求,建议单独定义一个表单类
	@RequestMapping(value="login",method=RequestMethod.POST)
	public String doLogin2(LoginForm loginForm){
		System.out.println("登录名:"+loginForm.getLoginName());
		System.out.println("密码:"+loginForm.getPassword());
		return "hello";
	}

struts2中,是把接收数据的属性声明在类中,springMVC是通过方法的参数
时间: 2024-09-28 21:43:59

SpringMVC控制器与视图的数据交换的相关文章

从控制器到视图的数据传递

一.ViewData 1.ViewData是一种字典集合数据(即键值对类型),是“视图基类”和“控制器基类”的属性 2.常见用法是在控制器中写入数据,在视图中读取数据 3.ViewData的values可以存放任意数据类型的数据,因此使用时需要强制类型转换 二.ViewBag动态对象 1.ViewBag是dynamic类型对象,同样也是“视图基类”和“控制器基类”的属性 2.ViewBag使用更加灵活方便(可以直接使用,编写的时候不会进行错误检查,但是运行的时候没有就会报错) 3.ViewBag

Asp.Net Mvc 控制器与视图的数据传递

数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看..        下面分别讲解asp.net mvc框架中有三种数据传递方式,分别是:ViewData,TempData,Model         ViewData:只能在一个动作方法中设置,在相关视图页面读取,说得再白一点就是只能在一个页面中使用.         例 在Act ion方法中设置:ViewData["

ASP.NET MVC 之控制器与视图之间的数据传递

今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, 如何在控制器中获取,处理这些数据. ASP.NET MVC 中所有控制器都继承Controller类,而Controller又继承自ControllerBase,而ControllerBase下又包含ViewData以及TempData视图数据字典. 一,使用ViewData传递数据 ViewDat

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据. 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 - (BOOL)application:(UIApplication

Spring_定义SpringMVC控制器

美丽的蓝图,落在懒汉手里,也不过是一页废纸. 在SpringMVC中,控制器只是方法上添加了@RequestMapping注解的类,这个注解声明了他们所要处理的请求. @Controller注解用来声明控制器,它基于@Component注解,它的目地就是辅助实现组件扫描. package chapter5.practice3; import java.util.ArrayList;import java.util.HashMap;import java.util.Map; import org.

关于SpringMVC映射模型视图的几点小事

一.SpringMVC概述 SpringMVC为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一. SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无需实现任何接口. 支持RESTFUL风格的URL. 采用了松散耦合可插拔组件结构,更具灵活性和扩展性. 二.使用@RequestMapping映射请求 1.使用@RequestMapping映射请求 SpringMVC使用@RequestMapping注解为控制器指定可以出来那些URL请求. 在

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据 在本章中,我们将新建一个MoviesController 控制器,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. 在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错. 在解决方法资源管理器的Controllers文件夹右键,选择"添加">"新建搭建基架项": 在"添加支架"对话框,选择 包含视图的MVC 5控制器(使用 En),然后单击

ASP.NET MVC5(二):控制器、视图与模型

前言 本篇博文主要介绍ASP.NET MVC中的三个核心元素:控制器.视图与模型,以下思维导图描述了本文的主要内容. 控制器 控制器简介 在介绍控制器之前,简单的介绍一下MVC工作原理:URL告知路由机制该使用哪个控制器(Controller),调用该控制器中的哪个方法(Action),并为该方法提供需要的参数.控制器响应用户的输入,在响应时修改模型(Model),并决定使用哪个视图(View),并对该视图进行渲染.注意:MVC模式提供的是方法调用结果,而不是动态生成的页面. 以上内容对于初学者