springMvc

    xiaoxiao2021-03-26  24

    springMvc作用:

             a) 接收请求中的参数

             b) 将处理好的数据返回给页面

    参数绑定(就是从请求中接收参数):

             a) 默认支持的类型:request, response, session, model

                       可以在接收参数时加上也可以去掉, 看自己需要

             b) 简单类型: string,double,integer, long, boolean等

                       要求: 要求页面上input框的name属性值必须等于接收时的变量名称

             c) pojo类型:

                       要求: 要求页面上input框的name属性值必须等于pojo中的属性名称

             d) QueryVo:

                       要求: 页面上input框的name属性值必须等于vo中的属性.属性.属性....

             e) converter转换器:

                       可以转换类型, 对于像字符串转日期这样springMvc不能进行自动类型转换的,我们可以

    自己写.

     

    高级参数绑定(从请求中接收参数)

             1. 数组:

                     

                       要求:要求页面上input框的name属性值必须等于pojo中的属性名称

             2. list:

                     

                       要求: 页面上input框的name属性值必须

                                等于vo中的itemsList+[索引下标]+.list中泛型的属性名称

     

    @RequestMapping用法:

             1. 用在方法上:@RequestMapping标记url到请求方法的映射

             2. 用在类上: 窄化请求映射

             3. 限制请求方式的类型: 如果限制的请求类型, 而访问的类型不匹配会报405错误

                       @RequestMapping(value="/list",method=RequestMethod.POST)

                       publicModelAndView list123() throws Exception{

     

    controller方法返回值:

             1. ModelAndView :可以将返回给页面的数据放入model中, 通过view来指定页面的路径

             2. String :(推荐使用)

                       a) 返回普通字符串就认为是页面的路径, 可以借助默认支持的参数Model将数据返回给页面

                       b) 请求转发: 浏览器中url不发生改变,request域中的数据可以带到转发后的方法中

                                springMvc中请求转发, 返回以forward:字符串开头后面跟转发的url路径

                                request.setAttribute("id",items.getId());

                                model.addAttribute("id",items.getId());

                                return"forward:toEdit.action";

     

                       c) 重定向: 浏览器中url发生改变, request域中的数据不可以带到重定向后的方法中

                                springMvc中重定向,返回以redirect:字符串开头, 后面跟重定向的url路径

                                不管是请求转发还是重定向,model中的数据都可以带到请求转发或者是重定向

    后的方法中

                                request.setAttribute("id",items.getId());

                                model.addAttribute("id",items.getId());

                                return"redirect:toEdit.action";

     

                       相对路径和绝对路径问题:

                                相对路径: url中相对于当前路径

                                forward:或者是redirect:字符串后不以斜杠/开头的

                                绝对路径: url中从项目名后开始算

                                forward:或者是redirect:字符串后以斜杠/开头的

                                一般在当前类方法的目录中跳转使用相对路径,

                                如果跳转到其它类的方法中使用绝对路径

             3. void:

             //推荐ajax的时候使用, 其它时候一般不推荐使用

             //如果controller方法返回值为void, 还想跳转到页面就需要使用原生的request和response,这样就破坏了springMvc的体系结构, 就不走视图解析器, 所以需要写页面的完整的路径,

    Springmvc中异常处理(架构级别的异常处理)

             异常分类:

                       a) 运行时异常   就是bug

                       b) 自定义异常        可以自己定义一些业务级别异常

     

             自定义异常类 要 继承 Exception

             springmvc的自定义异常处理器 要实现HandlerExceptionResolver

                       <!-- 自定义异常处理器 在springmvc.xml中配 -->

             <beanclass="com.itheima.exception.CustomExceptionResoler" />

     

    图片上传:

             springMvc有上传的接口, 但是没有实现, 所以需要第三方实现

    json数据交互:

             springMvc中有对json的支持的接口但是没有实现,所以需要第三方的实现, 比如 jackson杰克逊的jar包

             @RequestBody可以将json格式的字符串自动转换成java中的对象, 要求json中的key必须等于pojo中的属性名称

             @ResponseBody可以将返回的java对象自动转换成json格式字符串返回给页面

    Springmvc实现Restful

             就是对url的一个命名规范, 最早出自于一个博士的论文,后来一些大企业看到后逐渐推广开.

             要求: url中只有名词没有动词(一般国人英文水平不太好,所以不强制要求), 不能有问号传参数

             提交数据路径:${pageContext.request.contextPath }/items/toEdit/${item.id}

             controller中接收:

                       @RequestMapping("/toEdit/{id}")

                       publicString toEdit123(@PathVariable("id")Integer id,

    拦截器:

             作用: 拦截请求, 一般做登录权限验证使用比较多

             单个拦截器执行顺序:

                       ===Interceptor1====preHandle==

                       ===Interceptor1====postHandle==

                       ===Interceptor1====afterCompletion==

     

             多个拦截器的执行顺序: 等于springMvc.xml文件中对拦截的配置顺序

             拦截器的拦截路径和dispatcherServlet的url 路径不相干

     

    <!-- 配置拦截器 -->

             <mvc:interceptors>

                       <mvc:interceptor>

                                <!--配置拦截路径 /**拦截所有

                                         这个拦截路径和DispatcherServlet的<url-pattern>*.action</url-

    pattern> 不相关

                                         是先进了DispatcherServlet再进入拦截器的

                                 -->

                                 <mvc:mapping path="/**"/>

                                 <beanclass="com.itheima.interceptor.LoginInterceptor"/>

                       </mvc:interceptor>

             </mvc:interceptors>

    <!-- 如果web.xml中设置成/, 那么dispatcherServlet就除了.jsp文件其他所有都不让访问, 所以需要

    对.js.css.png等静态资源放行-->

             <!-- location: 放行路径

                        mapping:放行资源的位置

             -->

             <mvc:resourceslocation="/js/" mapping="/js/**"/>

    转载请注明原文地址: https://ju.6miu.com/read-662332.html

    最新回复(0)