springmvc基础代码书写

文章目录

拦截器

在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用,缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

public class IndexInterceptor extends HandlerInterceptorAdapter {
    /**
     * 在业务处理器处理请求之前被调用
     * 如果返回false
     * 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
     * 如果返回true
     * 执行下一个拦截器,直到所有的拦截器都执行完毕
     * 再执行被拦截的Controller
     * 然后进入拦截器链,
     * 从最后一个拦截器往回执行所有的postHandle()
     * 接着再从最后一个拦截器往回执行所有的afterCompletion()
     */
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle(), 在访问Controller之前被调用");
        return true;
    }
    /**
     * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
     * 可在modelAndView中加入数据,比如当前时间
     */
    public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle(), 在访问Controller之后,访问视图之前被调用,这里可以注入一个时间到modelAndView中,用于后续视图显示");
        modelAndView.addObject("date","由拦截器生成的时间:" + new Date()); }
    /**
     * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
     *
     * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
     */
    public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)            throws Exception {
        System.out.println("afterCompletion(), 在访问视图之后被调用");
    }
}

再在spring-mvc.xml中添加配置即可

 <mvc:interceptors>
        <mvc:interceptor>
        <!-- 拦截所有的 /lmj/*的请求 -->
            <mvc:mapping path="/lmj/*"/>
            <!-- 指定拦截器的实现类的位置 -->
            <bean class="com.lmj.IndexInterceptor"/>
        </mvc:interceptor>
        <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
    </mvc:interceptors>

过 滤 器 : \color{red}{过滤器:} 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次

文件上传

建一个文件处理的pojo类

import org.springframework.web.multipart.MultipartFile;
public class UploadedImageFile {
    MultipartFile image;
    public MultipartFile getImage() {
        return image;
    }
    public void setImage(MultipartFile image) {
        this.image = image;
    }
}

设置上传的路经和文件的存放的位置

@Controller
public class UploadController {
    @RequestMapping("/uploadImage")
    public ModelAndView upload(HttpServletRequest request, UploadedImageFile file) throws IllegalStateException, IOException {
        String name = String.valueOf(UUID.randomUUID());
        String newFileName = name + ".jpg";
        System.out.println(request.getServletContext().getRealPath("/image"));
        File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName);
        newFile.getParentFile().mkdirs();
        file.getImage().transferTo(newFile);
        ModelAndView mav = new ModelAndView("springmvc/showUploadedFile");
        mav.addObject("imageName", newFileName);
        return mav;
    }
}
/*spring-mvc.xml中添加相关配置
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
 */

前端显示

 上传的代码
 <form action="uploadImage" method="post" enctype="multipart/form-data">
     选择图片:<input type="file" name="image" accept="image/*" /> <br>
     <input type="submit" value="上传">
   </form>

显示的代码
 <img src="image/${imageName}"/><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值