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;
    }
.通过传入HttpServletRequest对象直接操作请求作用域------每次向页面传不同的内容
//也可以直接存到请求作用域中,不用通过ModelAndView对象了
    public String hello(HttpServletRequest request) {//由于spring比较灵活,只需要把对象当参数放进去方法中,就会自动成对象了
        request.setAttribute("Message","HelloWorld!");
        return "hello";
    }
.通过在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是通过方法的参数

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

  1. MVC中从控制器到视图的数据传递方法汇总

    1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...

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

    数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看..        下面 ...

  3. 【部分】Asp.Net Mvc 控制器与视图的数据传递

    原文:https://www.cnblogs.com/lsgsanxiao/p/5105639.html 数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业 ...

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

    今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...

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

    iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...

  6. MVC基础篇—控制器与视图数据的传递

    Viewdata,Viewbag,Tempdata 1  Vewdata:简单来说就是数据字典,通过键值对的形式来存放数据.举例如下: //后台控制器代码: public ActionResult V ...

  7. NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息

    NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息.也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读.Netflo ...

  8. Cocoa编程中视图控制器与视图类详解

    iPhone编程规则是:一个窗口,多个视图.UIView是iPhone屏幕上很多控件的基础类.每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView ...

  9. SpringMVC中的视图和视图解析器

    对于控制器的目标方法,无论其返回值是String.View.ModelMap或是ModelAndView,SpringMVC都会在内部将它们封装为一个ModelAndView对象进行返回.  Spri ...

随机推荐

  1. HSV色彩空间

    HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间.色相的取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度的取值范围是0%~100 ...

  2. Total Commander 常用快捷键(并附快捷键大全)

    Total Commander 常用快捷键 喜欢用Total Commander的人,都会记住它的一些快捷键,这会给你的操作带来很大的方便,以下是经常会用到的快捷键,大家可以记住一些自己用得最多的操作 ...

  3. 四个查找命令find,locate,whereis,which的区别

    find最强大,但是检索硬盘,比较慢: whereis只能查二进制文件.说明文档,源文件等: locate能查所有文件,但跟whereis一样都是查数据库里的内容,速度快,但有延时: which 只能 ...

  4. asp.net identity 2.2.0 中角色启用和基本使用(五)

    建立控制器UsersAdminController 第一步:在controllers文件夹上点右键>添加>控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:UsersAdminC ...

  5. uglifyjs压缩批处理

    uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感. uglifyjs压缩批处理我们不可能每次都打开cm ...

  6. ajax for in eval()知识点的应用

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Spark在Yarn上运行Wordcount程序

    前提条件 1.CDH安装spark服务 2.下载IntelliJ IDEA编写WorkCount程序 3.上传到spark集群执行 一.下载IntellJ IDEA编写Java程序 1.下载IDEA ...

  8. php--数组函数array

    1.array_combine array_combine是一种函数,通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值.如果其中一个数组为空,或者两个数组的元素个数不同,则 ...

  9. 纯CSS实现tooltip提示框,CSS箭头及形状之续篇--给整个tooltip提示框加个边框

    在前面一篇中我们介绍了纯CSS实现tooltip提示框,通俗的讲也就是CSS箭头及形状 不过注意一点是,他始终是一个元素,只是通过CSS实现的,今天我们要说的是给这个“tooltip提示框”整体加一个 ...

  10. paramiko模块,线程,进程

    关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...