Spring MVC控制层的返回类型--String类型与Bean类型

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。

时间: 2024-07-30 12:05:12

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

spring mvc控制框架的流程及原理1: 总概及源码分析

主要介绍spring mvc控制框架的流程及原理 Spring Web MVC处理请求的流程 具体执行步骤如下: 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分:图2-1中的1.2步骤: 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理:处理完毕后返回一个Model

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

Spring MVC全局异常后返回JSON异常数据 问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内容,如果是404请求不到资源或者500这类服务器的问题,可能会导致返回404和500异常页面,手机端的处理就非常麻烦,为了解决这个问题,就需要做全局的异常处理. 解决方案: (1)自定义或者使用spring自带的各种异常处理器 例如spring基于

spring mvc控制框架的流程及原理2: 例子说明

spring mvc运行步骤: 首先用户发送请求http://localhost:8080/hello——>web容器,web容器根据“/hello”路径映射到DispatcherServlet(url-pattern为/)进行处理: DispatcherServlet——>BeanNameUrlHandlerMapping进行请求到处理的映射,BeanNameUrlHandlerMapping将“/hello”路径直接映射到名字为“/hello”的Bean进行处理,即HelloWorldCo

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

前言 前文中讲到,使用@ResponseStatus注解,可以修饰一个异常类,在发生异常的时候返回指定的错误码和消息,在返回的 reason中包含中文的时候,就会出现中文乱码的问题 现象 reason中包含中文的时候,前端返回为乱码 /** * 自定义异常类 * * @author Administrator * */ @ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "没有权限") public class TestExce

Servlet编程基础概述-MVC控制层

要介绍Servlet有一大堆的文字,相信有的朋友像我一样讨厌看很多文字,我长话短说: 大家有没有总结过,我们用JavaBean编程是实现了把Java代码和JSP文件的HTML代码分开了,但是:我们在Java代码中不能使用JSP内置对象,也就是JavaBean不能使用request.response等对象来接收和传递页面信息,只能实现简单的静态功能. Servlet就是一个可以动态引用request.response...的Java类,和JAVABEAN一样运行在服务器端.我们称之为中间控制层(C

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

Spring MVC返回 json字符串的方式有很多种方法,这里介绍最简单,也是最常使用的两种方式 一.使用  PrintWriter printWriter  直接输出字符串到返回结果中    不需要任何xml文件配置 1 2 3 4 5 6 7 8 9 //返回给前台一个字符串  @RequestMapping(params = "method=getJson1")  public void getJson(@RequestParam("userid") Str

Spring MVC中 controller方法返回值

1.返回ModelAndView 定义ModelAndView对象并返回,对象中可添加model数据.指定view 2.返回String 1.表示返回逻辑视图名 model对象通过 model.addAttribute("xxx",model)进行设定 2.redirect重定向: redirect重定向特点:浏览器地址栏中的url会变化.修改提交的request数据无法传到重定向的地址.因为重定向后重新进行request(request无法共享) 3.forward页面转发: 通过f

ZendFramework-2.4 源代码 - 关于MVC - View层 - 控制器返回值

<?php class ReturnController extends AbstractActionController { public function returnAction() { // 返回方式一 :会被dipatch处理器Zend\Mvc\View\Http\CreateViewModelListener::createViewModelFromArray(...)的拦截处理 return array('key1' => 'key1value'); // == new View

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

在正文之前,说明下Filter的作用: 过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理.通俗点说法filter相当于加油站,request是条路,response是条路,目的地是servlet,这个加油站设在什么地方对什么数据操作可以由你来控制.备注:过滤器可以再请求和响应之前做一部分预处理,有效的过滤掉不需要的内容,而且过滤器可以被复用,节省了大量的复用代码,提高了java的代码执行效率 java的Controller层接收App的请求时,请求的参数是中文,服务器端接收到的是乱码