springMVC_day02(获取返回值)

一.获取返回值

1.返回字符串

isELIgnored="false" 
${user.username}
    ${user.password}

 

 /**
     * 返回String
     * @param model
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("testString方法执行了...");
        // 模拟从数据库中查询出User对象
        User user = new User();
        user.setUsername("美美");
        user.setPassword("123");
        user.setAge(30);
        // model对象
        model.addAttribute("user",user);
        return "success";
    }

 

2.void类型

/**
     * 是void
     * 请求转发一次请求,不用编写项目的名称
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("testVoid方法执行了...");
        // 编写请求转发的程序
        // request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

        // 重定向
        // response.sendRedirect(request.getContextPath()+"/index.jsp");

        // 设置中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        // 直接会进行响应
        response.getWriter().print("你好");

        return;
    }

 

*默认状况下,访问user/tsetVoid.jspcss

*两种解决办法:(1)新建WEB-INF/pages/setVoid.jsphtml

        (2)获取原生API,编写底层转发代码前端

 

* 请求转发一次请求,不用编写项目的名称 request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);java

*重定向是两次跳转,须要完整的项目名字response.sendRedirect(request.getContextPath()+"/index.jsp");jquery

*直接相应(须要设置编写乱码)web

3.ModelAndView

*与model功能同样,写法不一样ajax

*springMVC提供的一个类spring

*两个方法数据库

 // 把user对象存储到mv对象中,也会把user对象存入到request对象  mv.addObject("user",user);
// 跳转到哪一个页面 mv.setViewName("success");
配合视图解析器,跳转到WIN-INF/pages/success.jsp
/**
     * 返回ModelAndView
     * @return
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        // 建立ModelAndView对象
        ModelAndView mv = new ModelAndView();
        System.out.println("testModelAndView方法执行了...");
        // 模拟从数据库中查询出User对象
        User user = new User();
        user.setUsername("小凤");
        user.setPassword("456");
        user.setAge(30);

        // 把user对象存储到mv对象中,也会把user对象存入到request对象
        mv.addObject("user",user);

        // 跳转到哪一个页面
        mv.setViewName("success");

        return mv;
    }

 

4.关键字表示转发或者重定向(不使用视图解析器)

*该模式下没法使用视图解析器json

*返回字符串

*本身写对路径

*在这里重定向,不须要写项目名(虚拟路径),框架底层帮你加上了

/**
     * 使用关键字的方式进行转发或者重定向
     * @return
     */
    @RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect方法执行了...");

        // 请求的转发
         return "forward:/WEB-INF/pages/success.jsp";

        // 重定向
        return "redirect:/index.jsp";根目录下的jsp,不须要项目名称
    }

 

5.使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端。

*前端控制器设置拦截全部请求

<!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>拦截全部请求
  </servlet-mapping>

 

*告诉dispatchServlet静态资源不拦截(js/jquery.min.js

<!--前端控制器,哪些静态资源不拦截-->
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

 

 <script>
        // 页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
                // alert("hello btn");
                // 发送ajax请求
                $.ajax({
                    // 编写json格式,设置属性和值
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":30}',json格式键值对
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        // data服务器端响应的json的数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);
                    }
                });

            });
        });

 

*dataType:服务器返回类型值

type:默认get

/**
     * 模拟异步请求响应
     */
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了...");
        // 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        // 作响应,模拟查询数据库
        user.setUsername("haha");
        user.setAge(40);
        // 作响应
        return user;
    }

 

*@RequestBody User user客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中

*做响应直接return @ResponseBody User

*要求key与javaBean的属性名同样

*须要导入相应jar包(json字符串与javaBean转换)

<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>
相关文章
相关标签/搜索