SpringMVC学习Day02

1常用注解

1.1 @RequestParam:

把请求中指定名称的参数给控制器中的形参赋值。修饰前端传回的值,如果于控制器方法不同也可以接收。属性:required:用于设置是否为必须穿的值(默认为是) ;name/value:设置参数名称。
jsp:

<a href="/anno/testRequestParam?name=hhhh"></a>

controller:

  @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name = "name") String username){
        System.out.println(username);
        return "success";
    }

1.2@RequestBody:

用于获取请求体的内容,不适应于get请求。属性:required:是否必须有请求体(默认为是),如果为false时get请求获取为null,否则报错。
jsp:

    <form action="anno/testRequestBody" method="post">
            用户名<input type="text" name="username" >
            <input type="submit" value="提交">
        </form>

controller:

    /**
     * 获取请求体内容
     * @param body
     * @return
     */
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }

1.3@PathVariable

用于绑定url中的占位符的。属性:value:指定url占位符名称;required:是否为必须。
jsp:

 <a href="/anno/testPathVariable/10"></a>

controller:

   /**
     * PathVariable注解
     * @return
     */
    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable(name = "id") String id){
        System.out.println(id);
        return "success";
    }

1.4@RequestHeader(一般用不到)

获取请求头。属性:name/value:提供请求头名称;required:是否必须。

1.5@CookieValue

把指定的Cookie名称的值传入控制器方法参数。value:指定cookie的名称;required:是否必须。

1.6ModelAttribute

出现在方法上:表示当前方法会在控制器的方法执行之前执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
出现在参数上:获取指定的数据给参数赋值。
属性:value:获取数据的key。
应用场景:当表单提交数据是不完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

1.7SessionAttribute

用于多次执行控制器方法之间的参数共享。属性:value:用于指定存入的属性名称;type:用于指定存入的数据类型。

2响应数据和结果试图

2.1返回字符串:

返回字符串可以指定逻辑试图的名称。
提交jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="responseDemo/responseString">返回字符串</a>
</body>
</html>

控制器返回字符串指定的jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>执行成功。</h3>
    ${user.age}
    ${user.password}
    ${user.username}
</body>
</html>

controller:

    @RequestMapping("/responseString")
    public String requestString(Model model){
        System.out.println("返回字符串方法执行了。");
//        模拟从数据库查询User对象
        User user = new User();
        user.setAge(1);
        user.setPassword("123");
        user.setUsername("jm");

        model.addAttribute("user",user);
        return "success";
    }

2.2返回为空(void):

跟Servlet的用法一模一样。

    /**
     * 返回void
     */
    @RequestMapping("/responseVoid")
    public void responseVoid(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
        System.out.println("返回空的方法执行了。");
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
//        请求转发
        request.getRequestDispatcher("index.jsp").forward(request,response);

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

//        直接响应
        response.getWriter().println("Hello");
    }

2.3返回是ModelAndView对象

它是Spring框架提供的对象,用来调整JSP视图。用法就相当于返回String的,只不过是使用的对象不同。

    @RequestMapping("/responseModelAndView")
    public ModelAndView responseModelAndView(){
//        创建ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        System.out.println("responseModelAndView返回的执行");
        User user = new User();
        user.setAge(1);
        user.setPassword("123");
        user.setUsername("jm");

//        把user对象存入modelAndView对象中
        modelAndView.addObject("user",user);

//        视图解析器(相当于返回String类型的方法返回的那个值)
        modelAndView.setViewName("success");
        return modelAndView;
    }

2.4请求转发和重定向

使用关键字进行请求转发和重定向:

  	/**
     * 转发和重定向
     * @return
     */
    public String responseForwardOrRedirect(){
        System.out.println("responseForwardOrRedirect执行");
//        请求转发固定写法:forward:...
        return "forward:/WEB-INF/pages/success.jsp";

//        重定向
//        return "redirect:index.jsp";
    }

2.5响应JSON数据

如果使用前后端分离,则返回的都是Json格式。
导入依赖:


    <!--JavaBean对象和Json转换Jar-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

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

ajax请求:

    <button id="btn">发送Ajax请求返回Json</button>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.2/dist/jquery.min.js"></script>
    <script>
        $(function () {
            $("#btn").click(function () {
            //   发送Ajax请求
                $.ajax({
                    //请求路径
                    url:"responseDemo/responseAjax",
                    // 请求内容类型
                    contentType:"application/json;charset=UTF-8",
                    //json数据
                    data:'{"username":"Tom","password":"word","age":12}',
                    //返回类型
                    dataType:"json",
                    //请求方式
                    type:"post",
                    success:function (data) {
                    //    data是服务器端响应的数据
                        alert(data.username);
                        alert(data.age);
                        alert(data.password);
                    }
                })
            })
        })
    </script>

如果使用本地jQuery文件反应失败,在springmvc.xml文件中添加:

    <!--配置前端控制器中的那些静态资源不拦截-->
    <mvc:resources mapping="/js/**" location="/js/**"></mvc:resources>

controller:

   /**
     * 异步请求返回Json
     */
    @RequestMapping("/responseAjax")
    public @ResponseBody User responseAjax(@RequestBody User user){
        System.out.println("responseAjax执行了。。");
//        后台将Json字符串封装到user对象中
        System.out.println(user.toString());
//        响应到前端
        user.setUsername("Work");
//        响应
        return user;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值