189 8069 5689

SpringMVC学习---第二课-创新互联

SpringMVC学习---第二课
  • SpirngMVC注解式开发
    • 注解
    • 对请求提交方式的定义
    • 五种数据的提交方式
    • 请求参数中文乱码问题的解决
    • 处理器方法的返回值
    • SpringMVC的四种跳转方式
    • SpringMVC支持的默认参数类型
  • SpringMVC的拦截器
    • 拦截器说明
    • 拦截器的应用场景
    • 拦截器执行原理

在镇远等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站设计、成都外贸网站建设 网站设计制作按需定制设计,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,成都外贸网站制作,镇远网站建设费用合理。SpirngMVC注解式开发 注解

通过***@RequestMapping*** 注解可以定义处理器对于请求的映射规则。该注解可以注解在方法上,也可以注解在类上,但意义是不同的。value 属性值常以“/”开始。@RequestMapping 的 value 属性用于定义所匹配请求的 URI。

当@RequestMapping注解在类上时,说明是有着相同的公共请求路径

当@RequestMapping注解出现在方法上时,说明是对每个方法请求的路径

以下代码发送的请求分别是:/项目名/zar/hello 和 /项目名/zar/two

@Controller //这个是声明类是Controller,将类加入springmvc管理
@RequestMapping("/zar")  //声明相同的公共路径
public class HelloSpringMvc {//相当于一个控制器处理的方法
@RequestMapping("/hello")
public String one() {return "main";
}
@RequestMapping("/two")
public String two() {return "main";
}

一个@Controller 所注解的类中,可以定义多个处理器方法。当然,不同的处理器方法所匹配的 URI 是不同的。

对请求提交方式的定义

对于@RequestMapping,其有一个属性 method,用于对被注解方法所处理请求的提交

方式进行限制,即只有满足该 method 属性指定的提交方式的请求,才会执行该被注解方法。

Method 属性的取值为 RequestMethod 枚举常量。
常用的为 RequestMethod.GET 与RequestMethod.POST,分别表示提交方式的匹配规则为 GET 与 POST 提交。

@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String one() {return "main";
}

浏览器的常用请求方式有
在这里插入图片描述

只要指定了处理器方法匹配的请求提交方式为 POST,则相当于指定了请求发送的方式:要么使用表单请求,要么使用 AJAX 请求。其它请求方式被禁用。

若不指定 method 属性,则无论是 GET 还是 POST 提交方式,均可匹配。即对于请求的提交方式无要求。

五种数据的提交方式
  1. 单个数据注入

在方法中声明一个和表单提交的参数名称相同的参数,由框架按照名称直接注入。

在这里插入图片描述

  1. 对象封装注入

在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。

在这里插入图片描述

  1. 动态占位符提交(只限于超链接)

使用框架提供的一个注解@PathVariable,将请求url中的值作为参数进行提取,只能是超链接。

在这里插入图片描述

  1. 请求参数名称与形参名称不一致

请求与形参中的名字不对应,可以使用
@RequestParam(value=“name1”,required=true)String namea来进行参数名称绑定。
在这里插入图片描述

  1. 使用HttpRequestServlet对象提取

在方法参数中声明一个request对象,使用request的getParameter()获取表单提交的数据,这样得到的数据还要手工进行数据类型的转换。

public String five(HttpServletRequest request){int age=new Integer(request.getParameter("stuage"));
String name=request.getParameter("stuname");
System.out.println(age+"*********"+name);
    return "main";
}
请求参数中文乱码问题的解决

对于前面所接收的请求参数,若含有中文,则会出现中文乱码问题。

Spring 对于请求参数中的中文乱码问题,给出了专门的字符集过滤器: CharacterEncodingFilter 类。

在 web.xml 中注册字符集过滤器,即可解决 Spring 的请求参数的中文乱码问题。不过,最好将该过滤器注册在其它过滤器之前。因为过滤器的执行是按照其注册顺序进行的。

encodeorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceRequestEncodingtrueforceResponseEncodingtrueencode/*
处理器方法的返回值
  1. 第一种:ModelAndView

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。
若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),则不需要返回这个

  1. 第二种:String

处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址。

配置视图解析器
在这里插入图片描述

  1. 第三种:无返回值void

对于处理器方法返回 void 的应用场景,应用在AJAX 响应处理。若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

  1. 第四种:返回对象类型

处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。返回对象,需要使用**@ResponseBody 注解**,将转换后的 JSON 数据放入到响应体中。
Ajax请求多用于Object返回值类型。
由于转换器底层使用了Jackson 转换方式将对象转换为JSON 数据,所以需要添加Jackson的相关依赖。

com.fasterxml.jackson.corejackson-databind2.9.8
SpringMVC的四种跳转方式

默认的跳转是请求转发,直接跳转到jsp页面展示

还可以使用框架提供的关键字redirect:,进行一个重定向操作 ,包括重定向页面和重定向action,

使用框架提供的关键字forward:,进行服务器内部转发操作,包括转发页面和转发action。

当使用redirect:和forward:关键字时,视图解析器中前缀后缀的拼接就无效了。

测试四种跳转方式,前端代码

请求转发页面(默认)
请求转发action
重定向页面
重定向action

测试四种跳转方式后端代码

@Controller
public class JumpAction {@RequestMapping("/one")
    public String one(){System.out.println("请求转发页面(默认)");
        //以前的访问方式        //request.getRequestDispatcher("/admin/main.jsp").forward(request,response);
        //地址栏的变化:  http://localhost:8080/one.action
        //return "main"; //默认的访问方式是自动拼接前缀和后缀进行跳转
        return "forward:/fore/user.jsp";
		//只要使用了forward:就可以屏蔽前缀和后缀的拼接,自己手工构建返回的全部路径+.jsp
    }


    @RequestMapping("/two")
    public String two(){System.out.println("请求转发action");
        //观察地址栏的变化:  http://localhost:8080/two.action
        return "forward:/other.action";   
        //不使用forward:,就会是这样的路径  /admin/other.action/.jsp
    }

    @RequestMapping("/three")
    public String three(){System.out.println("重定向页面");
        //观察地址栏的变化  http://localhost:8080/admin/main.jsp
        return "redirect:/admin/main.jsp";
        //只要使用了redirect:就可以屏蔽前缀和后缀的拼接
    }


    @RequestMapping("/four")
    public String four(){System.out.println("重定向action");
        //观察地址栏的变化  http://localhost:8080/other.action
        return "redirect:/other.action";
        //只要使用了redirect:就可以屏蔽前缀和后缀的拼接
    }
}
SpringMVC支持的默认参数类型

1. HttpServletRequest 对象
2. HttpServletResponse 对象
3. HttpSession 对象
4. Model/ModelMap 对象 
5. Map对象

SpringMVC的拦截器 拦截器说明

SpringMVC 中的 Interceptor 拦截器,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理。
其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前”。
当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。

拦截器的应用场景
  1. 日志记录:记录请求信息的日志
  2. 权限检查,如登录检查
  3. 性能检测:检测方法的执行时间
拦截器执行原理

preHandle():在请求被处理之前进行操作

该方法在处理器方法执行之前执行。其返回值为 boolean,若为 true,则紧接着会执行处理器方法,且会将 afterCompletion()方法放入到一个专门的方法栈中等待执行。

postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果

该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不会执行。由于该方法是在处理器方法执行完后执行,且该方法参数中包含 ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向。

afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源

当preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行的,此时对 ModelAndView 再操作也对响应无济于事。afterCompletion 最后执行的方法,清除资源,例如在 Controller 方法中加入数据等。

在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:SpringMVC学习---第二课-创新互联
文章位置:http://cdxtjz.cn/article/dhodhp.html

其他资讯