SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明。

一、测试项目的结构

说明:(jsp的名字没起好)

控制层:UserController.java --对用户的相关操作;

视图层:toFormTest.jsp--跳转至formTest.jsp

(这样跳转的原因:1.由于jsp文件夹在WEB-INF目录下,所以无法直接访问;2.在目标地址formTest.jsp中的表单采用了sf标签,需在控制层中初始化表单所绑定的bean对象,所以需先进入控制层(初始化目标地址表单所绑定的bean对象)然后在跳转至目标地址。)

formTest.jsp--添加User的jsp

formTestTarget.jsp--添加User后显示已添加的User信息

showUserTest.jsp--显示指定User的详细信息

二、控制层--UserController.java 的返回类型

A.返回值类型为String类型

1.控制层跳转至视图层

说明:点击toFormTest.jsp中的请求,执行UserController.java中的formTest方法,跳转至formTest.jsp。

toFormTest.jsp

<a href="user/formTest">formTest</a>

UserController.java

//跳转至http://localhost:8081/spring_user/user/formTest.jsp
@RequestMapping(value="/formTest",method=RequestMethod.GET)
public String formTest(Model model){
model.addAttribute(new User());
return "user/formTest";
}

小结:需要说明的是,跳转formTest.jsp后,地址栏中的显示地址是逻辑路径,如下:

http://localhost:8081/spring_user/user/formTest

2.控制层方法之间的跳转

说明:在formTest.jsp添加用户后,提交至UserController.java中的formTest方法,跳转至formTestTarget.jsp显示添加的User信息。需注意的是:formTest方法设置其返回地址为: return "user/formTestTarget";即可完成这一目的。但现在为了说明如何在控制层的方法之间跳转,所以注释掉。此外,在form表单中并未填写"action"信息(请求地址),但为何会跳转至UserController.java的formTest方法呢?这是因为在formTest.jsp的地址栏中显示的地址为:http://localhost:8081/spring_user/user/formTest,提交的地址自然是UserController.java的formTest方法。

formTest.jsp

<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
username:<sf:input path="username"/> <sf:errors path="username" /><br>
password:<sf:password path="password"/> <sf:errors path="password"/><br>
<input type="submit" value="添加用户"/><br>
</sf:form>

UserController.java

    //跳转至toFormTestTarget方法
@RequestMapping(value="/formTest",method=RequestMethod.POST)
public String formTest(Model model,@Validated User user, BindingResult br){
//如果有错误返回
if(br.hasErrors()){
return "user/formTest";
}
model.addAttribute(user);
// return "user/formTestTarget";//跳转至formTestTarget.jsp后页面地址栏中的地址:http://localhost:8081/spring_user/user/formTest--可以看出此跳转方式为请求转发
// return "redirect:/user/formTestTarget";//重定向至formTestTarget.jsp--无效[提交后的无效路径:http://localhost:8081/spring_user/user/formTestTarget]
return "redirect:/user/toFormTestTarget";//重定向至方法toFormTestTarget--能够跳转至formTestTarget.jsp,但无法将Model中的数据带至formTestTarget.jsp。
} //跳转至http://localhost:8081/spring_user/user/formTestTarget.jsp
@RequestMapping(value="/toFormTestTarget")
public String toFormTest(){
return "user/formTestTarget";
}

小结:formTest方法中的返回类型仍是String类型,但其目标地址已不再是跳转至视图层,而是从formTest方法跳转至toFormTest方法,这样使用redrect关键字完成了这一目的。

需注意的是,无法以重定向的方式从控制层跳转至视图层。

B.返回值类型为Bean类型

说明:在formTestTarget.jsp页面点击"showUser",请求UserController.java中的showUserTest方法,然后跳转至showUserTest.jsp显示用户的详细信息。

formTestTarget.jsp

username:${user.username }<br>
password:${user.password }<br>
<a href="showUserTest">showUser</a>

UserController.java

//跳转至http://localhost:8081/spring_user/user/showUserTest.jsp
@RequestMapping(value="/showUserTest",method=RequestMethod.GET)
public User showUserTest(Model model){
model.addAttribute("msg", "返回值为User类型");
return userService.findById(30);
}

小结:showUserTest方法的返回类型是一个User类型,并未指明一个地址,此时sringMVC会默认返回“请求的逻辑路径相映射的物理路径”:formTestTarget.jsp中的请求地址为user目录下的showUserTest,此时它是UserController.java中的一个方法,但执行完该方法后,由于没有返回类型为User,所以Spring会默认返回user目录下的showUserTest.jsp。

Spring MVC控制层的返回类型--String类型与Bean类型的更多相关文章

  1. Spring MVC控制层传递对象后在JSP页面中的取值方法

    List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...

  2. Spring mvc Json 的正确返回姿势

    我们经常都需要封装统一JSON格式 例如以下形式 { “data”:“输出的数据”, “code”:“响应代码”, “msg”:“响应信息” } /** * Created by linli on 2 ...

  3. 关于Spring MVC Controller 层的单元测试

    关于Spring MVC Controller 层的单元测试 测试准备工作: 1.搭建测试Web环境 2.注入Controller 类 3.编写测试数据 测试数据的文件名一定要与测试类的文件名相同,比 ...

  4. Spring MVC全局异常后返回JSON异常数据

    问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内 ...

  5. spring mvc @ResponseStatus 注解 注释返回中文乱码的问题

    前言 前文中讲到,使用@ResponseStatus注解,可以修饰一个异常类,在发生异常的时候返回指定的错误码和消息,在返回的 reason中包含中文的时候,就会出现中文乱码的问题 现象 reason ...

  6. spring -mvc service层调用工具类配置

    在service层时调用工具类时服务返回工具类对象为空 在此工具类上加上@Component注解就可以了 @Component:把普通pojo实例化到spring容器中,相当于配置文件中的 <b ...

  7. 160506、Spring mvc新手入门(11)-返回json 字符串的其他方式

    Spring MVC返回 json字符串的方式有很多种方法,这里介绍最简单,也是最常使用的两种方式 一.使用  PrintWriter printWriter  直接输出字符串到返回结果中    不需 ...

  8. Spring MVC中 controller方法返回值

    1.返回ModelAndView 定义ModelAndView对象并返回,对象中可添加model数据.指定view 2.返回String 1.表示返回逻辑视图名 model对象通过 model.add ...

  9. Spring+MVC Controller层接收App端请求的中文参数乱码问题。

    在正文之前,说明下Filter的作用: 过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理.通俗点说法filter相当于加油站,request是条路,response是条路,目的地是serv ...

随机推荐

  1. 有趣的hello word

    程序一 #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #def ...

  2. 博客迁到CSDN

    之前一直是博客园和CSDN博客同步更新 现在不在博客园继续写博客,十一国庆节假后只用CSDN博客了.祝各位访客国庆节快乐! CSDN博客地址: http://blog.csdn.net/it_liuc ...

  3. ios开发:OC对象的内存分析

    最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开 ...

  4. JQuery AJAX的嵌套使用

    <script type="text/javascript"> $(function () { $.post("Ajax/HideHandler.ashx&q ...

  5. dorado listener属性

    每一个控件都有一个listener属性,可以用来定位一个服务定位表达式,通过这个表达式, 它最终可以映射为spring里面一个javaBean的一个java方法 例如设置DynaView1.view. ...

  6. java学习笔记_GUI(2)

    import javax.swing.*; import java.awt.event.*; class Gui implements ActionListener{ JButton button = ...

  7. CSS实现不固定宽度和高度的自动居中

    有时候我们需要实现下面这种效果: 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大高度不让你剧中 嘎嘎,撑大 ...

  8. NoSQL专家王涛访谈:为什么我们还要做一个NoSQL?

    ChinaUnix:各位网友大家好,今天有幸请到王涛先生到CU做客,与大家交流一些工作经验.首先请王涛先介绍一下自己. 王涛:大家好,我是王涛.过去八年里我一直在IBM多伦多实验室从事DB2引擎研发的 ...

  9. 使用PHP获取汉字的拼音(全部与首字母)

    <?php /** * 取汉字拼音 * edit by www.jbxue.com */ class GetPingYing { private $pylist = array( 'a'=> ...

  10. MySQL的varchar定义长度到底是字节还是字符

    相信这个问题也会困扰不少人,尤其是使用过其它数据库(如Oracle)的人,之前我也没有太在意这个问题,再加上一些书籍和网上的文章讲的不够细致,又没测试过,导致我一直理解错误.下面通过实例来解释,在开始 ...