SpringMVC相关笔记

SpringmMVC
    响应数据和结果视图
        返回值分类
            String
                在控制器方法中: 
                    return "jsp页面路径";

            void
                使用HttpServletRequest做请求转发;
                使用HttpServletResponse做请求重定向;
                使用HttpServletResponse向浏览器写数据;

            ModelAndView
                ModelAndView是SpringMVC为我们提供的一个对象,该对象可以用作控制器方法的返回值;
                在控制器方法中: 
                    ModelAndView对象.addObject(String key, Object obj);
                    ModelAndView对象.setViewName("jsp页面路径"");
                    return ModelAndView对象;

        转发与重定向
            转发
                return "forward:URL";

            重定向
                return "redirect:URL";

        @ResponseBody
            位置: 控制器方法返回值上;
            作用: 用于将控制器方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如: json,xml等,然后通过Response响应给客户端;
            前提
                <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>

    SpringMVC实现文件上传
        1.依赖
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>

        2.配置解析器: applicationContext-controller.xml
            <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <property name="maxUploadSize">
                    <value>524288</value>
                </property>
            </bean>

        3.启动页面: /WEB-INF/jsp/items/editItems.jsp
            a. 表单请求方式为: method="post"
            b. 表单数据提交方式为: enctype="multipart/form-data"
            c. 提供type为file的input;

        4.修改ItemsController的updateItems的方法
            @RequestMapping("/updateItems")
            public String updateItems(Items items, MultipartFile imageFile) throws Exception {
                if (imageFile != null && imageFile.getSize() > 0) {
                    // 1、文件重命名
                    String filename = imageFile.getOriginalFilename();
                    String suffix = FilenameUtils.getExtension(filename);
                    String uuid = UUID.randomUUID().toString().replace("-", "");
                    String newName = uuid + "." + suffix;
                    // 2、文件上传
                    File file = new File("D:\\SOFTWARE_WORKSPACE\\heima_v65\\ssm_case\\WebContent\\image\\" + newName);
                    imageFile.transferTo(file);
                    items.setImage(newName);
                }
                itemsService.updateItems(items);
                return "redirect:/items/itemsList.action";
            }

    SpringMVC中的异常处理
        1.自定义异常: cn.itheima.exception.CommonsException
            public class CommonsException extends Exception {
                private static final long serialVersionUID = 1L;
                private String message;
                public CommonsException(String message) {
                    super(message);
                    this.message = message;
                }
                public String getMessage() {
                    return message;
                }
                public void setMessage(String message) {
                    this.message = message;
                }
            }

        2.自定义异常处理器: cn.itheima.exception.CommonsExceptionResolver
            public class CommonsExceptionResolver implements HandlerExceptionResolver {
                @Override
                public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
                    e.getMessage();
                    CommonsException commonsException = null;
                    if (e instanceof CommonsException) {
                        commonsException = (CommonsException) e;
                    } else {
                        commonsException = new CommonsException("系统异常,请与管理员联系!");
                    }
                    ModelAndView modelAndView = new ModelAndView();
                    modelAndView.setViewName("/error.jsp");
                    modelAndView.addObject("message", commonsException.getMessage());
                    return modelAndView;
                }
            }

        3.注册异常处理器: applicationContext-controller.xml
            <bean class="cn.itheima.exception.CommonsExceptionResolver"></bean>

    SpringMVC中的拦截器
        认识拦截器
            SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理;
            拦截器链就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用;
            拦截器与过滤器的区别
                过滤器是servlet规范中的一部分,任何JavaWeb工程都可以使用;
                拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用;
                过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截;
                拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的;

        使用
            1.自定义拦截器: HelloInterceptor(cn.itheima.web.interceptor.HelloInterceptor)
                public class HelloInterceptor implements HandlerInterceptor {
                    /**
                     * controller执行前执行;
                     * true: 继续执行;
                     * false: 中止执行;
                    */
                    @Override
                    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
                        System.out.println("controller执行前");
                        return true;
                    }
                    /**
                     * controller执行后但 DispatcherServlet 返回响应前执行;
                    */
                    @Override
                    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
                        System.out.println("controller执行后但 DispatcherServlet 返回响应前执行");
                    }
                    /**
                     * controller执行后且 DispatcherServlet 完全处理完请求后执行;
                    */
                    @Override
                    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
                        System.out.println("controller执行后且 DispatcherServlet 完全处理完请求后执行");
                    }
                }

            2.配置HelloInterceptor: applicationContext-controller.xml
                <mvc:interceptors>
                    <mvc:interceptor>
                        <mvc:mapping path="/**" />
                        <bean class="cn.itheima.web.interceptor.HelloInterceptor"></bean>
                    </mvc:interceptor>
                </mvc:interceptors>

            3.测试
                http://localhost:8080/ssm_case/items/updatePage/001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值