SpringMVC的请求和相应

本文详细介绍了SpringMVC的数据响应方式,包括页面跳转和回写数据,如返回字符串、ModelAndView对象、回写JSON等。同时讲解了SpringMVC的请求处理,包括不同类型的请求参数绑定,并提到了静态资源访问和Restful风格请求的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hidden adj.隐藏的

SpringMVC数据响应

数据相应方式:
1.页面跳转
1.1直接返回字符串
1.2通过ModelAndView对象返回
2.回写数据
2.1返回字符串
2.2返回对象或集合

1.页面跳转-返回字符串形式

@RequestMapping(value="/quick1")
public String save1(){
 //转发:forward:/jsp/sucess.jsp
 //重定向:redirect:/jsp/success.jsp
	return"forward:/jsp/success.jsp";
}

2.页面跳转-ModelAndView自己new ModelAndView

@ResquestMapping(value="/quick2")
public ModelAdnView save2(){
	ModelAndView modelAndView = new ModelAndView();
	//设置视图名称
	modelAndView.setViewName("success");
	//设置数据模型
	modelAndView.addObject("username","itcast");
	return modelAndView;
}

EL表达式在web3.0前默认没有开启,可在jsp中增加设置<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>,或直接使用web3.0版本,默认开启。
3.页面跳转-在形参上传入参数(ModelAndView/Model)

@RequestMapping(value="/quick3")
public ModelAndView save3(ModelAndView modelAndView){
        modelAndView.addObject("username","itheima");
        modelAndView.setViewName("success");
        return modelAndView;
}

@RequestMapping(value="/quick4")
public String save4(Model model){
        model.addAttribute("username","博学谷");
        return "success";
}

4.页面跳转-传参HttpServletRequest 使用原生的HttpServletRequest对象

@RequestMapping(value="/quick5")
public String save5(HttpServletRequest request){
        request.setAttribute("username","酷丁鱼");
        return "success";
}

5.回写数据-直接回写字符串
5.1 传参HttpServletResponse

@RequestMapping(value="/quick6")
public void save6(HttpServletResponse response) throws IOException {
        response.getWriter().print("hello itcast");
}

5.2直接写回字符串

@RequestMapping(value="/quick7")
@ResponseBody  //告知SpringMVC框架 不进行视图跳转 直接进行数据响应
public String save7() throws IOException {
   return "hello itheima";
}

6 回写json类型字符串
6.1自己手动拼接json类型字符串

@RequestMapping(value="/quick8")
@ResponseBody
public String save8() throws IOException {
  	return "{\"username\":\"zhangsan\",\"age\":18}";
}

6.2使用json转换工具jackson 导入需要的jar包

@RequestMapping(value="/quick9")
@ResponseBody
public String save9() throws IOException {
        User user = new User();
        user.setUsername("lisi");
        user.setAge(30);
        //使用json的转换工具将对象转换成json格式字符串在返回
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);

        return json;
}

7.回写数据-返回对象或集合
通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,因此需要在spring-mvc.xml中进行如下配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>

7.1 自动封装为对象

public User save10() throws IOException {
        User user = new User();
        user.setUsername("lisi2");
        user.setAge(32);
        return user;
}

7.2封装集合

@RequestMapping(value="/quick11")
@ResponseBody
    //期望SpringMVC自动将User转换成json格式的字符串
public List<User> save11() throws IOException {

        List<User> list = new ArrayList<>();

        User user = new User();
        user.setUsername("lisi2");
        user.setAge(32);

        User user1 = new User();
        user1.setUsername("lisi3");
        user1.setAge(66);

        list.add(user);
        list.add(user1);

        return list;
}

mvc:annotation-driven/:
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。使用<mvc:annotation-driven />自动加载 RequestMapping、HandlerMapping(处理映射器)和RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在Spring-xml.xml配置文件中使用<mvc:annotation-driven />替代注解处理器和适配器的配置。同时使用<mvc:annotation-driven />默认底层就会集成jackson进行对象或集合的json格式字符串的转换

SpringMVC的请求

客户端请求参数的格式是:name=value&name=value……
可获取的请求参数类型
1.基本类型参数
2.POJO类型参数
3.数组类型参数
4.集合类型参数

1.获得请求参数-获得基本数据类型参数
Controller中的业务方法的参数名称要与请求参数的名称一致,参数值会自动映射。并可以自动转换类型

@RequestMapping(value="/quick11")
    @ResponseBody
    public void save11(String username,int age) throws IOException {
        System.out.println(username);
        System.out.println(age);
    }

2.获取请求参数-获得POJO类型参数:Controller中的业务方法的POJO参数的属性的setXXX的XXX名与请求参数的name一致,参数值会自动映射匹配。在POJO类

@RequestMapping(value="/quick12")
    @ResponseBody
    public void save12(User user) throws IOException {
        System.out.println(user);
    }

3.获得请求参数-获得数组类型参数:Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

@RequestMapping(value="/quick13")
@ResponseBody
public void save13(String[] strs) throws IOException {
    System.out.println(Arrays.asList(strs));
}

4.获得请求参数-获取集合类型参数
4.1表数据提交 获得集合参数时,要将集合参数包装到一个POJO中才可以。 POJO类需要存在(不写了)

<form action="${pageContext.request.contextPath}/user/quick14" method="post">
        <%--表明是第一个User对象的username age--%>
        <input type="text" name="userList[0].username"><br/>
        <input type="text" name="userList[0].age"><br/>
        <input type="text" name="userList[1].username"><br/>
        <input type="text" name="userList[1].age"><br/>
        <input type="submit" value="提交">
    </form>
@RequestMapping(value="/quick14")
    @ResponseBody
    public void save14(VO vo) throws IOException {
        System.out.println(vo);
    }

4.2 ajax类型提交 当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装

<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
    <script>
        var u = new Array();
        userList.push({username:"zhangsan",age:18});
        userList.push({username:"lisi",age:28});

        $.ajax({
            type:"POST",
            url:"${pageContext.request.contextPath}/user/quick15",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8"
        });

    </script>
@RequestMapping(value="/quick15")
@ResponseBody
public void save15(@RequestBody List<User> userList) throws IOException {
        System.out.println(userList);
}

乱入1:静态资源访问开启:
SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,所以访问不到jquery,可以通过一下两种方法指定放行静态资源
1.在spring-mvc.xml中配置指定的放行文件 <mvc:resources mapping="/js/**“location=”/js/"/>
2.使用mvc:default-servlet-handler/`标签

5.获取请求参数-参数绑定注解@RequestParam。当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定

@RequestMapping(value="/quick16")
@ResponseBody
public void save16(@RequestParam(value="name",required = false,defaultValue = "itcast") String username) throws IOException {
  System.out.println(username);
}

乱入2:Restful风格
常规请求路径写法:http://localhost/user/quick17?id=1
RestFul风格请求路径写法:http://localhost/user/quick17/1
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的,HTTP 协议里面四个表示操作方式的动词如下:
GET:用于获取资源
POST:用于新建资源
PUT:用于更新资源
DELETE:用于删除资源
例如:
/user/1 GET : 得到 id = 1 的 user
/user DELETE: 删除user
/user PUT: 更新user
/user POST: 新增 user
上述url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
hiddenHttpMethodFilter Restful只支持Post(新建、增加)和get获取方式,如果使用delete或者put(修改)方式 需要配置HiddenHttpMethodFilter。

<!-- 隐藏域filter -->
<filter>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
@DeleteMapping(value="/quick17")
    @ResponseBody
    public void save20(String username) throws IOException {
        System.out.println("RestFul.....DELETE");
        System.out.println(username);
    }

    //请求参数方式七:RestFul风格 - PutMapping    //更新
    @PutMapping(value="/quick17")
    @ResponseBody
    public void save19(String username) throws IOException {
        System.out.println("RestFul.....PUT");
        System.out.println(username);
    }

    //请求参数方式七:RestFul风格 - PostMapping    //增加
    @PostMapping(value="/quick17")
    @ResponseBody
    public void save18(String username) throws IOException {
        System.out.println("RestFul.....POST");
        System.out.println(username);
    }

    
    //@GetMapping(value="/quick17/{name}")    获取
    //@PostMapping(value="/quick18")          增加
    //@PutMapping(value="/quick17")           更新
    //@DeleteMapping(value="/quick17")        删除

	//请求参数方式七:RestFul风格-requestmapping / getmapping     获取
    // localhost:8080/user/quick17/zhangsan
    @RequestMapping(value="/quick17/{name}") //可以通过method控制请求方式
    @ResponseBody
    public void save17(@PathVariable(value="name") String username) throws IOException {
        System.out.println("RestFul.....GET");
        System.out.println(username);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值