zoukankan      html  css  js  c++  java
  • SpringMVC注解方式与文件上传

    目录:

    springmvc的注解方式

    文件上传(上传图片,并显示)

    一、注解

    在类前面加上@Controller 表示该类是一个控制器
    在方法handleRequest 前面加上 @RequestMapping("/index") 表示路径/index会映射到该方法上

    将上一篇的博客改为注解方式:

    SpringMVC的基础配置及视图定位

    1、修改springmvc-servlet.xml

    去掉映射相关的配置,因为已经使用注解方式了
    增加
    <context:component-scan base-package="controller" />
    表示从包controller下扫描有@Controller注解的类

    2、修改IndexController

    @Controller
    public class IndexController {
        @RequestMapping("/index")
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            ModelAndView mav = new ModelAndView("index");
            mav.addObject("message", "Hello Spring MVC");
            return mav;
        }
    }

    也不需要实现Controller接口

     二、文件上传

    1、配置web.xml使其允许访问jpg文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.4">
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
      </servlet-mapping>
    </web-app>

    2、配置springmvc-servlet.xml,开放对上传功能的支持

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context         
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
        
        <context:component-scan base-package="controller" />
        <bean id="irViewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/page/" />
            <property name="suffix" value=".jsp" />
        </bean>
        
        
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    
    </beans>

    3、upload.jsp文件上传页面

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

    4、准备UploadedImageFile封装MultipartFile类型的字段 image ,用于接受页面的注入

    package 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;
        }
     
    }

    注意:

    这里的字段 image必须和上传页面upload.jsp中的image
    <input type="file" name="image" accept="image/*" />
    保持一致

    5、UploadController 上传控制器

    package controller;
    
    import java.io.File;
    import java.io.IOException;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.commons.lang.xwork.RandomStringUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
     
    import pojo.UploadedImageFile;
     
    @Controller
    public class UploadController {
     
        @RequestMapping("/uploadImage")
        public ModelAndView upload(HttpServletRequest request, UploadedImageFile file)
                throws IllegalStateException, IOException {
            //采用随机数来命名图片,防止上传文件名相同的文件会覆盖原文件
            String name = RandomStringUtils.randomAlphanumeric(10);
            String newFileName = name + ".jpg";
            //获取web目录下image目录来存放上传后的文件
            File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName);
            newFile.getParentFile().mkdirs();
            //复制文件
            file.getImage().transferTo(newFile);
            //把生成的随机文件名传给视图,用来显示
            ModelAndView mav = new ModelAndView("showUploadedFile");
            mav.addObject("imageName", newFileName);
            return mav;
        }
    }

    6、显示图片showUploadedFile.jsp

    注意是在page目录下新建jsp文件

    <img src="image/${imageName}"/>

     7、部署,访问http://localhost:8080/springmvc/upload.jsp

  • 相关阅读:
    JavaScript 数据类型判断
    使用渐进增强的方式美化复选框样式
    使用 Bootstrap 和 HTML5 Boilerplate 开始一个项目
    CSS基础知识之文本属性二三事
    精简CSS代码
    CSS选择器特殊性与重要性
    面试官:能解释一下javascript中的this吗
    VueRouter爬坑第四篇-命名路由、编程式导航
    Vuex实践(下)-mapState和mapGetters
    Vuex实践(中)-多module中的state、mutations、actions和getters
  • 原文地址:https://www.cnblogs.com/yeyangtao/p/10876888.html
Copyright © 2011-2022 走看看