SpringMVC响应
·~简单就好 人气:0数据处理及跳转
1.结果跳转方式
①.ModelAndView
设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="/html/" /> <property name="suffix" value=".html" /> <property name="templateMode" value="HTML5"/> </bean>
对应的controller类:
/** * 返回ModelAndView对象的方式 * @return */ @RequestMapping("/save3") public ModelAndView save3(){ System.out.println("执行了..."); // 创建mv对象 ModelAndView mv = new ModelAndView(); // 把一些数据,存储到mv对象中 mv.addObject("msg","用户名或者密码已经存在"); // 设置逻辑视图的名称 mv.setViewName("suc"); return mv; }
②.ServletAPI:请求转发和重定向
通过设置ServletAPI , 不需要视图解析器 .
1、通过HttpServletResponse进行输出
2、通过HttpServletResponse实现重定向
3、通过HttpServletResponse实现请求转发
(1)请求转发
1、是服务器端的行为
2、请求地址不发生改变,用户从始至终都是同一个请求
3、request数据在servlet共享,因为从始至终都是同一个请求
4、通过setAttribute进行数据传递,getAttribute进行数据接收
(2)重定向
1.服务器端指导,客服端行为的行为
2.两次request请求
3.用户浏览器访问的地址栏也会发生变化
4.重定向可以解决跨域问题
跨域:我们当前访问的地址不是我们项目中的地址
/** * 请求转发: * @param request * @param response * @throws IOException * @throws ServletException */ @RequestMapping("/test1") public void test1(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { System.out.println("test1=" + request.getParameter("name")); request.setAttribute("msg", "你好"); //request.getRequestDispatcher("/dept/test2").forward(request,response); request.getRequestDispatcher("/html/suc.html").forward(request, response); } /** * 重定向: * @param request * @param response * @throws IOException */ @RequestMapping("t3") public void test3(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("我是test3"); //response.sendRedirect("/SpringMVCTest/dept/t4"); response.sendRedirect("/SpringMVCTest/html/suc.html"); }
2.ResponseBody响应json数据
1、导入关键jar导入依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
2、标签配置不过滤静态资源
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
- location元素表示webapp目录下的包下的所有文件
- mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!--设置静态资源不过滤--> <mvc:resources mapping="/css/**" location="/css/"/> <!--样式--> <mvc:resources mapping="/images/**" location="/images/"/> <!--图片--> <mvc:resources mapping="/js/**" location="/js/"/> <!--javascript-->
controller层代码示例:user对象转换成json对象传输给前端
/** * 异步的数据交互 * 重定向 * @return */ @RequestMapping("/save6") public @ResponseBody User save6(User user){ System.out.println(user); // 模拟,调用业务层代码 user.setUsername("hello"); user.setAge(100); // 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print() return user; }
加载全部内容