概念

程序运行时,在处理器执行之前,处理器适配器把请求参数信息绑定到处理器的方法形参上。

默认支持的数据类型

  • HttpServletRequest

  • HttpServletResponse

  • HttpSession

  • Model 相当于ModelAndView中的Model

    @RequestMapping(“first”)
    public String first(Model model){

    model.addAttribute("msg","");
    return "hello";

    }

支持简单的java数据类型

程序示例

@RequestMapping("/second")
public String second(int id,String name){
    System.err.println(id);
    System.err.println(name);
    return "hello";
}

注意传递的参数名要和方法形参一致,否则结果为空,顺序可以不一致。 解决办法:@RequestParam

  • value:指定绑定的参数名称

  • required:默认为true,即url传递参数不可缺少。

  • defaultValue:没有接收到值时的默认值

    @RequestMapping(“/second”)
    public String second(int id,@RequestParam(value = “username”,required=false,defaultValue = “”) String name){

    System.err.println(id);
    System.err.println(name);
    return "hello";

    }

pojo对象类型

User类

public class User {
    private Integer id;
    private String username;
    private String password;

处理器

登录页

注意红色标示部分的name要和pojo类的属性名称一致。

乱码过滤器

在web.xml中配置

   <!--乱码过滤器-->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

集合类型

index.jsp

<form action="${pageContext.request.contextPath}/three/fourth.action">
      <input type="checkbox" name="ids" value="1"/>1.
      <input type="checkbox" name="ids" value="2"/>2.
      <input type="checkbox" name="ids" value="3"/>3.
      <input type="submit" value="提交"/>
</form>
注意name和处理器方法的形参名一致。

处理器

@RequestMapping("/fourth")
    public void fourth(Integer[] ids){
        System.err.println(ids);
}

json

<form action="">
    用户名:<input type="text" id="username"/><br/>
    密码:<input type="text" id="pwd"/>
    <input type="button" value="提交" onclick="login()"/>
</form>


<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
    function login() {
        var username=$("#username").val();
        var pwd=$("#pwd").val();
        //ajax请求方法
        var jsonData={username:username,password:pwd};
        $.ajax({
            url:'${pageContext.request.contextPath}/login',
            type:'post',
            data:jsonData,
            dataType:'json',//返回数据类型指定为json
            success:function(result){//请求成功后回调,result为响应的数据信息
                alert(result.data);
            }
        })
    }
</script>

@Responsebody 注解表示把响应的类型(比如字符串)转化为指定的格式,大多为json格式,把该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用; 在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。例如,异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。

@Controller
public class FourController {
    @RequestMapping("/login")
    @ResponseBody 
    public String login(User user){
        JSONObject jsonObject=new JSONObject();
        if("kim".equals(user.getUsername())){
            jsonObject.put("data","登陆成功");
        }else{
            jsonObject.put("data","登陆失败");
        }
        return jsonObject.toJSONString();
    }
}

请求静态资源404

配置静态资源的 访问映射,不会被前端控制器拦截。 mapping=” /js/* *”:表示js目录下和js子包目录下的所有资源。

<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>

json对象转json字符串

var jsonStr=JSON.stringify(data);

前台向后台传递json字符串

需要在前台ajax里加一句“contentType:’application/json’”

function login2() {
    var username=$("#username").val();
    var pwd=$("#pwd").val();
    //ajax请求方法
    var jsonData={username:username,password:pwd};
    $.ajax({
        url:"${pageContext.request.contextPath}/login2",
        type:"post",
        data:JSON.stringify(jsonData),//转为json字符串
        contentType:'application/json',
        dataType:"json",//返回数据类型指定为json
        success:function(result){//请求成功后回调,result为响应的数据信息
            alert(result.data);
        }
    })
}

处理器端接收json字符串,@RequestBody的作用就是将请求中的内容转为指定的格式,如json格式。

/接收json字符串
@RequestMapping("/login2")
@ResponseBody 
public String login2(@RequestBody User user){
    JSONObject jsonObject=new JSONObject();
    if("kim".equals(user.getUsername())){
        jsonObject.put("data","登陆成功了");
        System.err.println("success了");
    }else{
        jsonObject.put("data","登陆失败");
    }
    return jsonObject.toJSONString();
}

json字符串转json对象

var jsonObject=JSON.parse(jsonStr);