在controller中有两种方式,获取前台页面传来的参数
页面表单:
<form action="user.do" method="post"> 用户名:<input type="text" name="name"/><br/> 年龄:<input type="text" name="age"/><br/> 生日:<input type="text" name="birth"/><br/> <input type="submit" value="添加"/> </form
第一种
/** * 1、直接使用形参获取前台传递的参数 * 要注意的是形参的名字必须和页面参数的名字一致 * @param model * @param name * @param age * @param birth * @return */ @RequestMapping(method=RequestMethod.POST) public String registerUser(Model model,String name,Integer age,Date birth){ model.addAttribute("message", "注册一个用户"); System.out.println("name:"+name + "age:"+age+"birth:"+birth); System.out.println("UserController.registerUser()"); return "/WEB-INF/account/userDetail.jsp"; }
第二种
/** * 2、使用对象接受前台传递的参数 * 要注意的是前台传递的参数的名称必须和对象的属性名称一直,如果不一致则可以使用@ModelAttribute("u")String uname指定 */ @RequestMapping(method=RequestMethod.POST) public String registerUser(Model model,User user){ model.addAttribute("message", "注册一个用户"); System.out.println("name:"+user.getName() + "age:"+user.getAge()+"birth:"+user.getBirth()); System.out.println("UserController.registerUser()"); return "/WEB-INF/account/userDetail.jsp"; }
SpringMVC不支持List参数,可以先绑定json数据,然后再把json转成List。
SpringMVC不支持Date参数类型转换,需要在DTO上加如下注解
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date publishBegin;
List<String> attributeValues = JSON.parseArray(searchDTO.getFilterQuery(), String.class);
action的@Controller的@RequestMapping不写,那么直接去找方法的@RequestMapping,但是方法的@RequestMapping不能为空
controller中获取web元素
当某个方法需要使用web对象时(request,response,session,application)可以使用如下方式:
除了application,其他的对象都可以直接设为方法的形参。spring会自动将对应的对象传递给对应的形参。
而application对象可以使用session对象获取。
当然也可以在方法中使用response对象重定向到其他的url,这时方法最后return的url则可以视作无效。
同样的也可以使用request对象转发到其他的url。
@RequestMapping(value="/web.do") public String getWebElement(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException, ServletException{ System.out.println("request:"+request.getParameter("pname")); request.setAttribute("message", "requestData"); session.setAttribute("message", "sessionData"); session.getServletContext().setAttribute("message", "applicationData"); //response.sendRedirect("http://localhost:8080/tiger/account/user.do?method=add"); //return null; //request.getRequestDispatcher("/WEB-INF/account/userDetail.jsp").forward(request, response); return "/WEB-INF/account/userDetail.jsp"; }
将controller中数据传递到jsp页面
1、可以在controller中获取request对象,然后将数据设置为request对象的属性,然后使用转发的方式进入jsp即可。
2、将方法的返回值改为ModelAndView,将数据存储在ModelAndView对象中:
new ModelAndView("/WEB-INF/account/userDetail.jsp","message",message)
其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。
要注意的是:数据默认被存放在request中。
//使用modelAndView对象将数据传递到前台。 @RequestMapping(value="/mad/showData_1.do") public ModelAndView showData_1(){ String message = "这个是要传递的数据"; //其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。 //在这里要注意的是 数据是默认被存放在request中的。 return new ModelAndView("/WEB-INF/account/userDetail.jsp","message",message); }
前台页面获取方式:
request:${requestScope.message}
可以在类的前面添加注解@SessionAttributes({"message","user"})
这个注解可以设置对应的model中参数也会在session中存储一份。该注解中的参数为一个集合,可以写多个,如上面的例子,其中message和user都是存储的数据的key.
示例程序:
@SessionAttributes({"message","user"}) //modelAndView中的对应的数据也会在session中存储一份
页面获取:
session:${sessionScope.message}
数据modelAndView返回一个集合
该处理方式和上面的处理方式一致,因为modelAndView接受的数据类型是Object的,集合也是一样的处理方式
//使用modelAndView对象将数据传递到前台。 //传递多个参数(不同类型的) @RequestMapping(value="/mad/showData_2.do") public ModelAndView showData_2(){ String message = "这个是要传递的数据"; UserDTO user = new UserDTO("张三", 12, new Date()); List<User> us= new ArrayList<User>(); us.add(new User("张三", 12, new Date())); us.add(new User("张四", 13, new Date())); us.add(new User("张五", 14, new Date())); ModelAndView mav = new ModelAndView("/WEB-INF/jsp/showData.jsp"); //将数据存入modelMap mav.addObject("message", message); mav.addObject(user);//默认为类名的首字母小写 mav.addObject("users", us); return mav; }
前台页面获取方式:
request:${requestScope.message }<br/>
<c:forEach items="${requestScope.users }" var="u">
${u.name }-${u.age }-${u.birth }<br/>
</c:forEach>
可以通过ModelAndView的mav.addObject("message", message);方法设置参数。
该方法中第一个参数为数据的key,第二个参数为数据对象。
也可以使用mad.addObject(user);方法
该方法中数据的参数为数据对象,数据的key为该对象的类的类名(其中首字母小写)。
当然也可以使用ModelMap传递多个数据到jsp中。
设置跳转方式为重定向或者转发
1、spring默认的跳转方式即为转发,当然转发也可以写作:return "forward:/WEB-INF/account/userDetail.jsp";
2、重定向必须写作:return "redirect:http://localhost:8080/tiger/account/user.do?method=userDetail&id=1";
视图解析器的配置和使用
1、在spring-servlet.xml中配置视图解析器
<!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 视图后缀,controller中的方法返回的url字符串会添加该后缀 --> <property name="suffix" value=".jsp"/> <!-- 视图前缀,controller中的方法返回的url字符串会添加该前缀 --> <property name="prefix" value="/WEB-INF/account/"/> </bean>
配置该解析器之后,那么controller中的返回的视图url就会被改写
如:return "userDetail"; 实际跳转的url为:/WEB-INF/account/userDetail.jsp
controller中方法的返回值类型
返回值除了可以返回String和ModelAndView外还有其他类型。
其他类型还包括:void、ModelMap、Map、Object、map、List、Set。一般建议使用String。
1、返回值类型为void 则只是纯粹的执行了方法中的程序,然后响应的url依然为请求的url
例如案例中请求为index.do 则响应的url为 index 在视图解析器解析之后得到的最终的url为/WEB-INF/account/index.jsp
示例:
//返回值为void @RequestMapping(value="/index.do",params="type=void") public void resultVoid(HttpServletRequest request){ request.setAttribute("void", "resultVoid"); }
2、返回值为modelMap时,响应的url和void一致。
只是存储在MpdelMap中的数据可以在jsp页面中取出。
示例:
//返回值为ModelMap @RequestMapping(value="index.do",params="type=modelMap") public ModelMap resultModelMap(ModelMap map){ map.put("msg", "这里是modleMap中的数据"); return map; }
3、返回值为Map时,和modelMap几乎完全一致。
//返回值为Map @RequestMapping(value="index.do",params="type=map") public Map resultMap(){ Map<String,String> map = new HashMap<String,String>(); map.put("msg", "这里是Map中的数据"); return map; }
4、返回值为List时,响应的url和void一致。
spring会将list对象存储在request中,而该对象的存储的key为:当list中存储为String类型数据时key为:stringList。当存储为User对象时 key为:userList。其他的类型的可以类比。
//返回值为List<String> @RequestMapping(value="index.do",params="type=list_string") public List resultList_String(){ List ls = new ArrayList(); ls.add("list1");ls.add("list2");ls.add("list3"); return ls; } //返回值为List<User> @RequestMapping(value="index.do",params="type=list_user") public List<User> resultList_User(){ List<User> ls = new ArrayList<User>(); ls.add(new User("张三")); ls.add(new User("张四")); return ls; }
5、返回值为Set时,和List除了没有顺序之外,其他都一致。
//返回值为Set<User> @RequestMapping(value="index.do",params="type=set_user") public Set<User> resultSet_User(){ Set<User> ls = new HashSet<User>(); ls.add(new User("张三")); ls.add(new User("张四")); return ls; }
6、返回值为Object时,响应的url和以上一致,spring也会将返回的对象存储在request中,该对象在request中的key为该对象类型的类名(首字母小写)
//返回值为User @RequestMapping(value="index.do",params="type=user") public User resultUser(){ return new User("张四"); }
所有的返回值类型页面获取方式为:
<h1>返回值类型</h1> <p> <h3>Void</h3> <a href="index.do?type=void">无返回值类型</a><br/> ${requestScope.void } </p> <p> <h3>ModelMap</h3> <a href="index.do?type=modelMap">返回ModelMap</a><br/> ${requestScope.msg } </p> <p> <h3>Map</h3> <a href="index.do?type=map">返回map</a><br/> ${requestScope.msg } </p> <p> <h3>List</h3> <a href="index.do?type=list_string">返回List<String></a><br/> ${requestScope.stringList } </p> <p> <h3>List</h3> <a href="index.do?type=list_user">返回List<User></a><br/> ${requestScope.userList } </p> <p> <h3>Set</h3> <a href="index.do?type=set_user">返回Set<User></a><br/> ${requestScope.userSet } </p> <p> <h3>User(Object)</h3> <a href="index.do?type=user">返回User(Object)</a><br/> ${requestScope.user } </p>
相关推荐
《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。"spring-mvc-showcase"项目是Spring官网提供的一个实战示例...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,开发者可以利用Model-View-Controller(模型-视图-控制器)架构模式来组织...
【Spring MVC 框架详解】 Spring MVC 是 Spring 框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的 Web 应用开发框架。Spring MVC 提供了丰富的功能,使得开发者可以快速、高效地构建高质量...
Spring MVC 提供了模型数据绑定和视图解析功能,使得模型数据可以方便地传递到视图进行渲染。 7. **ModelAndView**:这是 Spring MVC 中的一个重要类,用于存储模型数据和视图名。在控制器处理完请求后,可以通过...
Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...
Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring Web模块(spring-web-5.2.3.RELEASE.jar)主要负责提供Web相关的功能支持,包括HTTP...
在本教程中,我们将深入探讨如何使用Spring-MVC框架来开发一个简单的项目实例。Spring-MVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。它使得开发者可以将业务逻辑、数据访问...
**Spring MVC 框架简单实现** Spring MVC 是 Spring 框架的一部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)架构。在这个简易版框架中,我们将深入理解 Spring MVC 的核心概念和关键组件。 **1. ...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在"spring-mvc-lib"这个压缩包中,我们很可能找到了Spring MVC框架运行所必需的一些库文件。虽然...
6. **数据绑定**:Spring MVC提供了强大的数据绑定功能,可以从请求参数自动填充模型对象,或者将模型对象的属性值渲染到表单。例如,@RequestParam和@PathVariable注解用于从URL路径或请求参数中获取数据。 7. **...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。Maven则是一个项目管理工具,它可以帮助开发者管理项目的依赖、构建过程和生命周期。IDEA是...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个名为"spring-mvc.rar_spring mvc"的压缩包可能是为了帮助初学者理解和入门Spring MVC,解决他们在开发过程中可能遇到...
在本讨论中,我们将深入探讨两个核心组件——`spring-web.jar`和`spring-webmvc.jar`,它们在Spring MVC框架中扮演着关键角色。 首先,`spring-web.jar`是Spring框架的Web层组件,它提供了与Web相关的功能。这个库...
《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)架构的Web应用程序提供了强大的支持。"spring-mvc-showcase.zip" 文件包含了一个名为 "spring-mvc...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在 Maven 项目中,Spring MVC 的依赖通常通过 Maven 仓库来管理。...
Spring MVC通过ModelAndView类将模型数据传递给视图进行渲染。 4. **控制器(Controller)** 控制器处理HTTP请求,调用业务逻辑,并将结果转发给视图。Spring MVC通过@Controller注解定义控制器类,@...
《Spring MVC 框架深度解析与实践指南》 在当今的Java Web开发领域,Spring MVC作为Spring框架的重要组成部分,已经成为了构建MVC(Model-View-Controller)模式应用程序的主流选择。本教程将深入剖析Spring MVC的...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本项目 "spring-mvc-study" 中,我们可以看到一些核心的文件和...