SSM学习之路——springMVC第二天_响应返回参数以及ajax

一、返回String类型参数

index.jsp中:

<a href="response/testString">testString</a>

responseController中:

@Controller
@RequestMapping("/response")
public class responseController {

    /**
     * 有返回String类型给前台接收
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("testString方法执行了...");
        User uuuuu = new User();
        uuuuu.setAge(16);
        uuuuu.setUsername("姓名");
        model.addAttribute(uuuuu);
        model.addAttribute("字符串");
        model.addAttribute(9547);
        model.addAttribute("串串");
        model.addAttribute(1234);
        return "success";
    }
}

success.jsp:
将request域中打印出来
在这里插入图片描述

我们一般是通过model.addAttribute(key,obj);这个形式,来向request域中存入一个键值对,这个我们都很容易操作,只要在request域中用对应的key将obj取出来即可。
发现它还有一个model.addAttribute(obj);的方法,于是我想到,如果不指定key,那么这个对象存进去了,该怎么取出来呢。

这段代码中,我们通过model对象向request域中存了一个User类对象,两个字符串,两个整数。
启动服务器实验后发现,我们可以在request域中发现这几个刚存进去的东西:
在这里插入图片描述
可以通过结果发现,默认的key均为该对象所属的类的首字母小写!,那么“字符串”和9547这两个去哪了呢?这是由于他们的key是默认相同了,所以后存入的那个把前面那个给覆盖掉了。
由此我们知道,在前台页面可以通过相应的key=string,key=integer来拿到存入的字符串和数字。当然这个只是一个实验,并不建议这么用,正常还是老老实实用key,value形式存,避免出错

二、使用转发和重定向

WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问。什么是客户端级别?什么是服务器级别呢?

转发:
服务器级别,浏览器的地址不会变,因为,客户端发送一个请求,服务器受理之后,发现要请求内容还要再去别的请求,那么转发就是服务器自己去处理完成。不麻烦客户端(浏览器)了,所以客户端上面的地址栏不会改变。

重定向:
就是客户端级别的。服务器收到请求后,发现还要去请求别的内容,但是服务器自己不想处理,那么就告诉客户端,你自己去处理吧,那么客户端就去请求那个别的内容了。所以客户端(浏览器)地址栏就会改变了。

转发和重定向有两种方式:
1、原生servlet:
注释内为转发和重定向的两句,注意重定向这里要使用request.getContextPath()来获取项目路径,后面再接webapp目录下的response.jsp页面

@RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("testVoid方法执行了...");
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        //response.sendRedirect(request.getContextPath()+"/response.jsp");
    }

2、springMVC方式:
这里为什么可以省去request.getContextPath()呢,因为这是springmvc框架为我们自动处理了,可以直接写webapp目录下所需要访问的页面即可。
注意这里的语法,前面的forward:和redirect:是固定写法。

@RequestMapping("/testDispatcherAndRedirect")
    public String testDispatcherAndRedirect(){
        System.out.println("testVoid方法执行了...");
        //使用转发
        //return "forward:/WEB-INF/pages/success.jsp";
        //使用重定向
        return "redirect:/response.jsp";
    }

可以看到springmvc给我们提供的这个方法比使用原生servlet的API好用。

三、返回ModelAndView类型

controller:

@RequestMapping("testModelAndView")
    public ModelAndView testModelAndView(){
        System.out.println("testModelAndView方法执行了...");
        ModelAndView mv = new ModelAndView();
        mv.addObject("username","哈哈哈");
        mv.setViewName("success");
        return mv;
    }

success.jsp页面代码和运行结果
在这里插入图片描述
说明使用ModelAndView,可以分为两部分,一个是Model类的作用,一个是View(指定页面)的作用,Model的作用就不再赘述,其中View就指的是之前我们通过return “success”;来调用视图解析器
在这里插入图片描述
来帮我们跳转是一样的,但是这里只写了一个success,能够成功跳转,说明也使用到了视图解析器,我们现在将视图解析器去掉,只写一个mv.setViewName("success");,无疑是不行的。因此在没有视图解析器的情况下,我们应当指定的是mv.setViewName("/WEB-INF/pages/success.jsp");这个完整的路径。

三、相应json数据

1、配置取消拦截静态资源
我们用jquery等的静态资源,由于我们之前在配置前端控制器DispatcherServlet的时候,将每一个请求都拦截,导致这个静态资源的请求也被拦截,所以我们要配置,告诉springmvc,这个资源不要去拦截。

在这里插入图片描述

2、编写前端发送ajax请求
在index.jsp中引入js文件

<script src="js/jquery-3.0.0.min.js"></script>
<script>
        $(function () {
            $("#btn").click(function () {
                $.ajax({
                    url:"response/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    dataType:"json",
                    data:'{"username":"哈哈哈","age":18}',
                    type:"post",
                    success:function (data) {
                        alert(JSON.stringify(data));
                        alert(data.username);
                        alert(data.age);
                    }
                });
            });
        });
</script>


<button id="btn" value="点击">按钮</button>

url:请求的controller地址
contentType:设置类型和字符编码
dataType:发送的数据类型
data:和dataType对应的该类型的数据,此处为json字符串
type:请求方式,此处为post方式
success:发送成功后做出的动作,此处用形参data来接收返回的数据,并转成json字符串,并通过弹窗来弹出该字符串和username以及age。
其中,alert(JSON.stringify(data));可以帮我们将Json对象转换为字符串。否则直接用data打印的话,只能打印出Object object。

controller里的方法:

@RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了");
        user.setUsername("嘻嘻嘻");
        return user;
    }

此处通过@RequestBody来接收ajax返回的Json字符串并将串中的各个键值对,springmvc帮我们将这些键值对封装到user对象中,并在返回类型User前加上@ResponseBody 来将返回的User类型的对象转换成Json字符串
这个操作,需要一组jar包来支持,由于是maven项目,只需要导入依赖的坐标即可

	<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>

运行结果:
**加粗样式**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值